打印
[ZLG-ARM]

UCOS-II(中断中发送信号量的疑问)

[复制链接]
6546|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
id001|  楼主 | 2008-5-27 10:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验板使用的是:
      SmartARM2300
看到一段代码如下:
等待信号量的代码:
void   TaskBeep(void *pdata)
{
.....
   while(1)
   {
        OSSemPend(Sem1,0,&err);
        .........
   }
}
中断服务程序:(中断服务程序这样发送信号量是否不对????)
void   ExInt_Exception(void)
{
   OSSemPost(Sem1);    ???/*如果TaskBeep的信号量已处于等待状态,那么这里其不是要进行任务切换入TaskBeep中?而这是在中断服务程序中????*/
   IO0IntClr= KEY1;        
   VICVectAddr = 0;
}

谢谢。
 

相关帖子

沙发
qiqiang| | 2008-5-27 13:11 | 只看该作者

re

不会进入,中断程序的优先级是最高的,要执行完中断服务程序,且没有中断嵌套,并且TaskBee又是就绪队列中优先级最高的任务,才会转到它去

使用特权

评论回复
板凳
id001|  楼主 | 2008-5-27 20:45 | 只看该作者

谢谢2楼

先谢谢2楼,但我觉得不对,
用实现2楼所说的情况,应该是:

void   ExInt_Exception(void)
{
   OSIntENTER();           //加上这
   OSSemPost(Sem1);    
   IO0IntClr= KEY1;        
   VICVectAddr = 0;
   OSIntExit();           //退出时任务调度!!(如此才可以吧)
}

LPC新手,谢谢,恳请指教!

所以我觉得1楼那样在中断中发送信号量不对。
恳请ZLG_arm出来解释一下阿~~~~~~~~~~~~~~~

使用特权

评论回复
地板
sufeng983| | 2008-5-28 09:54 | 只看该作者

111

        在OSSemPost里面会调用这2个函数。
        OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM); 使任务就绪 
        OS_Sched(); 任务切换
        在OS_Sched()中会做
        if ((OSIntNesting == 0) && (OSLockNesting == 0))这个判断
        OSIntNesting这个是中断嵌套层数,只有嵌套为0的时候,也就是,没任何    中断函数没处理完的时候,才进行任何切换。 

使用特权

评论回复
5
id001|  楼主 | 2008-5-28 10:39 | 只看该作者

谢谢4楼

还是不明白。
由于进入ExInt_Exception()中断程序中没有调用OSIntENTER(),也就是说
此时OSIntNesting=0。
那么必然在调用OSSemPost()时将发生任务调度阿~~~~~~~~~~~~

再次问是否要让中断服务程序参与任务管理,因该加上OSIntENTER()与OSIntExit()两个函数???

如果不加,请解释一下是为什么???

使用特权

评论回复
6
zlgarm| | 2008-5-28 20:14 | 只看该作者

您好

楼主您好:
   您的问题已经在您发的另外一个帖子中给您解释了,请去查阅。
by:lrk

使用特权

评论回复
7
sufeng983| | 2008-5-29 10:07 | 只看该作者

LZ

    这个函数要加,而且要在每个比你当前中断低级,能被你的中断抢断的中断服务程序中加。比你当前中断高级的服务程序就不用加了,这样过多的调用势必为影响中断响应速度,就看你自己斟酌了。

使用特权

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

本版积分规则

35

主题

107

帖子

0

粉丝