参考资料:
基于Keil MDK 平台在cortex-M3 内核MCU 评估板上测试的μC/OS-Ⅲ源码
《μC/OS-III 应用开发指南》 秉火
《嵌入式实时操作系统μCOS-II原理及应用》 任哲编著
《STM32中文参考手册》
《STM32F10x Cortex-M3 programming manual》
《ARM® Compiler v5.06 for μVision® armasm User Guide》
《cortex_m3权威指南》宋岩
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved
DCD OS_CPU_PendSVHandler ; PendSV Handler
DCD OS_CPU_SysTickHandler ; SysTick Handler
启动文件中修改过的两个中断服务函数OS_CPU_SysTickHandler、OS_CPU_PendSVHandler就是任务切换的关键 ,围绕这个两个函数,可以理清两点:
1、什么时候切换;
2、怎样完成切换。
第1部分
void OS_CPU_SysTickHandler (void)
{
CPU_SR_ALLOC();
CPU_CRITICAL_ENTER();
OSIntNestingCtr++; /* Tell uC/OS-III that we are starting an ISR */
CPU_CRITICAL_EXIT();
OSTimeTick(); /* Call uC/OS-III's OSTimeTick() */
OSIntExit(); /* Tell uC/OS-III that we are leaving the ISR */
}
(void)OSTaskSemPost((OS_TCB *)&OSTickTaskTCB,
(OS_OPT ) OS_OPT_POST_NONE,
(OS_ERR *)&err);
void OS_TickTask (void *p_arg)
{
OS_ERR err;
CPU_TS ts;
p_arg = p_arg; /* Prevent compiler warning */
while (DE