OS_CPU_A.ASM这个文件是移植UCOS-II到LPC1114最关键的部分,里面用到一些汇编指令,Cortex-M3和Cortex-M0的任务切换都用到PenSV中断,被来向在OSStartHighRdy也安装Cortex-M3的方式来完成,就是也触发PenSV中断来完成第一个任务的执行,发现这两个内核还有有点不一样的,只要我设置NVIC_SYSPRI14为最低优先级,就不能触发SysTick这个中断了。OSStartHighRdy,OS_CPU_PendSVHandler这两个函数,启动任务和切换任务
NVIC_SYSPRI14 EQU 0xE000ED22;系统第14号中断
NVIC_PENDSVSET EQU 0x10000000;触发PenSV中断的值
OSStartHighRdy这个函数是在启动OS时调用的,就不是权限教给OS,启动第一个任务。我做了中文解释,如有不对请,帮忙指出啊。
OSStartHighRdy
LDR R0, =OSRunning ;OSRunning = TRUE
MOVS R1, #1
STRB R1, [R0] ;实际上就让OSRunning = 1 表示OS正在运行中
LDR R0, =OSTaskSwHook ;call OSTaskSwHook()
BLX R0 ; 跳到OSTaskSwHook执行
;选择已经准备好的最高优先级的任务
LDR R0, =OSTCBHighRdy ;获取最高优先级任务的TCB地址
LDR R1, [R0] ;得到堆栈指针
LDR R2, [R1]

本文详细记录了在LPC11C14上移植uCOS-II V2.91的过程,重点讨论了OS_CPU_A.ASM中涉及的汇编指令,特别是如何利用PenSV中断进行任务切换。在Cortex-M0内核中,作者发现与Cortex-M3存在差异,当设置NVIC_SYSPRI14为最低优先级时,SysTick中断无法正常触发。文中还提到了OSStartHighRdy和OS_CPU_PendSVHandler两个函数在启动和切换任务中的作用。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=8663539&d=1&t=3&u=02ff6cce14974c6ebb0bc59cbbbaef56)
8801

被折叠的 条评论
为什么被折叠?



