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

[复制链接]
 楼主| wahahaabc 发表于 2008-1-29 09:12 | 显示全部楼层 |阅读模式
关于uc/OS-II移植到Cortex-M3的两个问题(参考书《Cortex-M3开发指南》):<br />1.为什么要将PendSV异常设置为最低优先级???<br />P372的解释“OSPendSV()不能抢占其他代码,所以将它设置为最低优先级”的解释过于简单,大侠能否说得更详细一些。<br /><br />2.P373中间的一段黑体字“再次声明优先级高于OS_CRITICAL_INT_PRIO的中断不能调用任何uc/os-ii的函数和变量”,在该书的移植代码中,已经多次提到这个问题。为什么优先级高于OS_CRITICAL_INT_PRIO的中断不能调用任何uc/os-ii的函数和变量???大侠能否举一个例子???
zlgarm 发表于 2008-1-29 09:42 | 显示全部楼层

问题回答

1.为什么要将PendSV异常设置为最低优先级?<br />&nbsp;&nbsp;&nbsp;&nbsp;PendSV是切换任务的地方,也就是保存旧任务寄存器内容,和恢复新任务寄存器内容的地方。假设PendSV不是最低优先级,那么它就有可能嵌套其他中断,它要保存的寄存器内容不是旧任务的,而是被嵌套的中断的,任务切换就失败。如果PendSV是最低优先级,那么它要保存的寄存器内容永远是任务的,不会是中断的。<br /><br />2.&nbsp;P373中间的一段黑体字“再次声明优先级高于OS_CRITICAL_INT_PRIO的...<br />OS_CRITICAL_INT_PRIO默认是0,所有中断都受uCOS-II开关管理(OS_ENTER_CRITICAL/OS_EXIT_CRITICAL),这时候你可以在任意中断中,按照uCOS-II的规范,加入它的函数和变量等。但如果OS_CRITICAL_INT_PRIO不是0,例如是“1&lt&lt5”,那么0和1的优先级的中断不受OS_ENTER_CRITICAL/&nbsp;OS_EXIT_CRITICAL开关管理,如果在里面使用了ucos的函数或变量,那么ucos就不能统计中断嵌套(Nesting)的情况,系统有可能崩溃。<br /><br />(zlgarm_zsg)<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

119

主题

627

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部