2019-07-20 21:53发布
zmingwang 发表于 2016-6-2 00:09 这个问题有点复杂,我没有看过ucos的源码,所以只能给你提供一些思路. 在用户模式下,是不能直接访问cortex内 ...
最多设置5个标签!
这个问题有点复杂,我没有看过ucos的源码,所以只能给你提供一些思路.
在用户模式下,是不能直接访问cortex内核寄存器的,所以ucos应该是没有使用用户模式,否则你在ucos线程中初始化NVIC就一定会进HardFault_Handler.
如果你要使用用户模式,那就应该移植以下几个地方:
1.跟踪ucos的线程创建函数,一直跟到最低层的汇编代码,找到设置栈顶的那条指令,一般是 "MSR MSP, R0"这样的,将之改为"MSR PSP, R0","MOV R0, #0x03","MSR CONTROL, R0".
2.同样,用于上下文切换的汇编函数,也要将"MSR MSP, R0"改为"MSR PSP, R0",此处就可以不用设置CONTROL了.
3.因为应用程序完全有可能在线程中创建线程,所以要将1中的汇编函数改为SVC调用.
4.因为线程会主动放弃CPU,比如调用osDelay(),所以要将ucos实现上下文切换的汇编函数改为SVC调用
5.因为系统的时间片中断(一般是SysTick_Handler)里会进行线程调度,所以还要在PendSV中实现上下文切换,在SysTick_Handler中触发PendSV.
以上,我能想到的就这么多,你试试吧
谢谢您的回答
一周热门 更多>