打印
[ZLG-MCU]

关于uc/OS-II移植到Cortex-M3的LM8962的两个问题???

[复制链接]
2771|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wahahaabc|  楼主 | 2008-1-29 09:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于uc/OS-II移植到Cortex-M3的两个问题(参考书《Cortex-M3开发指南》):
1.为什么要将PendSV异常设置为最低优先级???
P372的解释“OSPendSV()不能抢占其他代码,所以将它设置为最低优先级”的解释过于简单,大侠能否说得更详细一些。

2.P373中间的一段黑体字“再次声明优先级高于OS_CRITICAL_INT_PRIO的中断不能调用任何uc/os-ii的函数和变量”,在该书的移植代码中,已经多次提到这个问题。为什么优先级高于OS_CRITICAL_INT_PRIO的中断不能调用任何uc/os-ii的函数和变量???大侠能否举一个例子???

相关帖子

沙发
zlgarm| | 2008-1-29 09:42 | 只看该作者

问题回答

1.为什么要将PendSV异常设置为最低优先级?
    PendSV是切换任务的地方,也就是保存旧任务寄存器内容,和恢复新任务寄存器内容的地方。假设PendSV不是最低优先级,那么它就有可能嵌套其他中断,它要保存的寄存器内容不是旧任务的,而是被嵌套的中断的,任务切换就失败。如果PendSV是最低优先级,那么它要保存的寄存器内容永远是任务的,不会是中断的。

2. P373中间的一段黑体字“再次声明优先级高于OS_CRITICAL_INT_PRIO的...
OS_CRITICAL_INT_PRIO默认是0,所有中断都受uCOS-II开关管理(OS_ENTER_CRITICAL/OS_EXIT_CRITICAL),这时候你可以在任意中断中,按照uCOS-II的规范,加入它的函数和变量等。但如果OS_CRITICAL_INT_PRIO不是0,例如是“1<<5”,那么0和1的优先级的中断不受OS_ENTER_CRITICAL/ OS_EXIT_CRITICAL开关管理,如果在里面使用了ucos的函数或变量,那么ucos就不能统计中断嵌套(Nesting)的情况,系统有可能崩溃。

(zlgarm_zsg)

使用特权

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

本版积分规则

119

主题

627

帖子

0

粉丝