[ZLG-ARM] 再次发帖问中断程序中发送信号量

[复制链接]
2356|1
 楼主| id001 发表于 2008-5-28 10:41 | 显示全部楼层 |阅读模式
我重新将问题整理到这里:原帖是:<br />UCOS-II(中断中发送信号量的疑问)<br />---------------------------<br />实验板使用的是:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SmartARM2300<br />看到一段代码如下:<br />等待信号量的代码:<br />void&nbsp;&nbsp;&nbsp;TaskBeep(void&nbsp;*pdata)<br />{<br />.....<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSSemPend(Sem1,0,&err);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.........<br />&nbsp;&nbsp;&nbsp;}<br />}<br />中断服务程序:(中断服务程序这样发送信号量是否不对????)<br />void&nbsp;&nbsp;&nbsp;ExInt_Exception(void)<br />{<br />&nbsp;&nbsp;&nbsp;OSSemPost(Sem1);&nbsp;&nbsp;&nbsp;&nbsp;???/*如果TaskBeep的信号量已处于等待状态,那么这里其不是要进行任务切换入TaskBeep中?而这是在中断服务程序中????*/<br />&nbsp;&nbsp;&nbsp;IO0IntClr=&nbsp;KEY1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;<br />}<br />我觉得以上的中断程序中发信号量,正确的因该是:<br />void&nbsp;&nbsp;&nbsp;ExInt_Exception(void)<br />{<br />&nbsp;&nbsp;&nbsp;OSIntENTER();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//加上这<br />&nbsp;&nbsp;&nbsp;OSSemPost(Sem1);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;IO0IntClr=&nbsp;KEY1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;OSIntExit();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//退出时任务调度!!(如此才可以吧)<br />}<br />-----------------------------<br /><br />再次问是否要让中断服务程序参与任务管理,因该加上OSIntENTER()与OSIntExit()两个函数???<br /><br />如果不加,请解释一下是为什么???<br /><br />LPC新手,谢谢指教<br /><br /> 相关链接:<a href='https://bbs.21ic.com/club/bbs/list.asp?boardid=39&page=1&t=2978800&tp=UCOS-II%uFF08%u4E2D%u65AD%u4E2D%u53D1%u9001%u4FE1%u53F7%u91CF%u7684%u7591%u95EE%uFF09'>https://bbs.21ic.com/club/bbs/list.asp?boardid=39&page=1&t=2978800&tp=UCOS-II%uFF08%u4E2D%u65AD%u4E2D%u53D1%u9001%u4FE1%u53F7%u91CF%u7684%u7591%u95EE%uFF09</a>
zlgarm 发表于 2008-5-28 14:51 | 显示全部楼层

楼主您好

您好:<br />&nbsp;&nbsp;&nbsp;当中断服务子程序调用OSSemPost()函数时,不会发生任务切换。因为,任务切换必须等到中断嵌套的最外层中断服务子程序调用OSIntExit()函数后,才能进行。详细内容参见《嵌入式实时操作系统ucos-II(第二版)》的174页。<br />by:lrk
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

107

帖子

0

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