|
发表于 2017-2-6 11:53:57
|
显示全部楼层
本帖最后由 laoshuhunya 于 2017-2-6 14:21 编辑
这个系统原来叫“bgRTOS”,比RTX出来还早,因为商业原因没有开源,所以鲜有人知。
近期我们又对系统架构和内核进行了一次广泛深入的评估,讨论了未来30年MCU及RTOS的发展趋势,主要有以下几点:
(1)MCU工作频率继续提高,将达到GHz
(2)地址空间可能增大到40位或48位
(3)中断系统可能改进,寄存器并行入栈,中断响应延迟时间缩短为1~2个周期
(4)多核化
这次更新富有成果:
内核线程切换时间由原来的83个周期减小为73个周期(极致的响应速度始终是我们追求的目标^_^)
开始引入“规则驱动”基础架构,往机器智能方向发展。
有作者提议操作系统的“操作”一词过于空泛,没有清楚地表达系统的本质,我们把系统名称更改为“bg实时调度系统(bgRTSS)”(从这里可以看到作者们严谨的技术态度^_^)
//**********************************************************************************
__asm void xPortPendSVHandler( void )
{
extern uxCriticalNesting;
extern pxCurrentTCB;
extern vTaskSwitchContext;
PRESERVE8
mrs r0, psp
isb
/* Get the location of the current TCB. */
ldr r3, =pxCurrentTCB
ldr r2, [r3]
/* Is the task using the FPU context? If so, push high vfp registers. */
tst r14, #0x10
it eq
vstmdbeq r0!, {s16-s31}
/* Save the core registers. */
stmdb r0!, {r4-r11, r14}
/* Save the new top of stack into the first member of the TCB. */
str r0, [r2]
stmdb sp!, {r3}
mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY
cpsid i
msr basepri, r0
dsb
isb
cpsie i
bl vTaskSwitchContext
mov r0, #0
msr basepri, r0
ldmia sp!, {r3}
/* The first item in pxCurrentTCB is the task top of stack. */
ldr r1, [r3]
ldr r0, [r1]
/* Pop the core registers. */
ldmia r0!, {r4-r11, r14}
/* Is the task using the FPU context? If so, pop the high vfp registers too. */
tst r14, #0x10
it eq
vldmiaeq r0!, {s16-s31}
msr psp, r0
isb
#ifdef WORKAROUND_PMU_CM001 /* XMC4000 specific errata */
#if WORKAROUND_PMU_CM001 == 1
push { r14 }
pop { pc }
nop
#endif
#endif
bx r14
}
//**********************************************************************************
上面是FreeRTOS v9.0.0线程切换器的代码,老衲认为过于保守,有充分的理由进行优化。
比如:
mrs r0, psp
isb
...
msr psp, r0
isb
这两条ISB指令是多余的,因为ARM架构定义了中断进入和返回具有ISB指令的作用。
编辑补充:PSP是R13的一个实体,与Rd之间的数据传输属于寄存器集内部传送,不涉及寄存器与RAM存储器的数据传输,不需要用ISB指令。
另外,浮点寄存器入栈出栈的指令
tst r14, #0x10
it eq
vstmdbeq r0!, {s16-s31}
...
tst r14, #0x10
it eq
vldmiaeq r0!, {s16-s31}
这里不应该用IT指令,因为IT指令与STM、LDM结合时,在STM或LDM数据传输过程中如果被中断会从头开始传输,而不是在高级中断退出后在断点处继续之前的传输,这增加了线程切换时间。
对于RTOS线程切换器来说,俺认为能减少1个运行周期都是重要的进步。
从线程切换时间看,RT-Thread称之为“实时线程操作系统”是当之无愧的^_^,各方面性能明显优于uCOS
|
|