打印

UCOS移植问题,如何使用用户堆栈PSP

[复制链接]
2072|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanjinbin|  楼主 | 2012-9-3 17:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.在移植的时候发现切换失败,总是在
OSStartHang
    B       OSStartHang     ;总是在这执行。
2.对比一个移植好的代码和自己移植的代码,发现差异是在
   OS_CPU_PendSVHandler
       CPSID   I
        ...省略...
       CPSIE   I
       BX      LR             ;
a.发现别人移植好的代码,在执行OS_CPU_PendSVHandler()中后跳出,则
   发现系统寄存器CONTROL,PROC=1自动切换到用户堆栈PSP/
b.而我自己的,代码移植的但是,跳出后发现系统寄存器CONTROL,PROC=0,没有自动切换到用户堆栈PSP.
这是那里出问题了.
沙发
yanjinbin|  楼主 | 2012-9-4 08:53 | 只看该作者
请教下,为什么看到有设置CONTROL寄存器的代码。
当是从OS_CPU_PendSVHandler返回后,自动变为选择PSP堆栈。

使用特权

评论回复
板凳
yanjinbin|  楼主 | 2012-9-5 11:58 | 只看该作者
请玩过ucos的高手说下。

使用特权

评论回复
地板
airwill| | 2012-9-5 21:00 | 只看该作者
从OS_CPU_PendSVHandler返回后,自动变为选择PSP堆栈。
这是因为从堆栈里恢复的程序状态字里的 CONTROL 里的内容确定的.
建议楼主先看一下 "Cortex-M3权威指南", 里面讲得很详细.

使用特权

评论回复
5
figo20042005| | 2012-9-5 21:52 | 只看该作者
好像以前的贴子,有关于这个的

使用特权

评论回复
6
杨遥与恒| | 2012-9-9 13:16 | 只看该作者
流程应该如下:
1.TaskStart这个任务创建


2.OSStartHighRdy();  
在这个程序中,
        LDR     R4, =NVIC_INT_CTRL     ;rigger the PendSV exception (causes context switch)
        LDR     R5, =NVIC_PENDSVSET
        STR     R5, [R4]        表示在中断开启的情况下,进入PendSV_Handler中断
                                   
       CPSIE   I                然后第一次打开中断,然后就进入了 PendSV_Handler 这个中断程序,而这个中断程序就是任务的切换程序。
      这个时候, TaskStart 优先级最高(其它四个任务此时还没建立),开始运行 TaskStart 这个任务。


3.   在TaskStart中创建任务的时候, OS_ENTER_CRITICAL();    将中断关闭,直到将4个任务创建完毕,OS_EXIT_CRITICAL();将中断打开
      (注意,因为在进入OS_ENTER_CRITICAL()时,OSInterrputSum加1,当 OSInterrputSum为0时,才能彻底中断打开)

4.由于任务创建时,已经触发了PendSV_Handler发生中断的条件,只是因为中断未开而已。此时中断开,则进入 PendSV_Handler 中断 。然后
  进入优先级最高的4个任务中的一个。比如执行TaskKey 这个任务。



5.当这个任务执行完,通过 OSTimeDlyHMSM() 进入等待状态,在OSTimeDlyHMSM()结尾处有 OS_Sched();  ,这个时候
再次进入PendSV_Handler中断,进入优先级第二高的任务....

6.在每次任务结束后,会进入最高优先级的任务,所以4个任务都会执行。而你的  TaskKey 只有到延时时间到了才会再次执行(当然它
优先级最高,当时间到了,则马上可以打断其它正在执行的任务
)。

楼主的问题我也遇到过。后来我就自己新建项目,慢慢 移植到我的板子上成功的。上面是我分析的流程,希望对你有帮助。
如果你还是解决不了,可以讲代码发上来,大家看看。

使用特权

评论回复
7
杨遥与恒| | 2012-9-9 13:18 | 只看该作者
另外,我在一些资料上看,STM32应该不需要堆栈什么PSP什么切换的。这个我还没有去研究。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

50

帖子

0

粉丝