4576|6

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于UCOS中信号量的问题 [复制链接]

 在写程序中突然遇到一个怪事情,我使用的ARM是LPC2148,操作系统用的是UCOS,程序是串口发送接收程序,其中数据的接收是用信号量来控制的,当中断中接收到数据后,向接收任务发送一个信号量,接收任务在接收到信号量后,对数据进行处理.程序可以正常运行,但运行一会儿后,PC指针不知道怎么就跑到 未定义指令异常中断那里了,然后在那里不停地循环,但如果不使用信号量,而是使用一个公共变量来控制这样一个过程,程序就完全没有问题,不知道为什么,有没有人遇到过,帮兄弟一把.

UCOS使用的是周立功公司移植的那.其他地方也有用到过信号量,都是正常的,就这一个有问题.相关的代码如下:

未定义指令异常中断处理语句:
;未定义指令
Undefined
        B       Undefined


中断中发送的信号量的地方:
if(tempChar == CHAR_LF)        //收到LF符
{
    RxBufEn = 0;

    #ifdef RxSigEn            //这个宏就是调试时用的,如果打开这个宏,使用信号量控制,程序就会跑到上面的undefined处,
                              //不启用时,一点问题没有,那样就是用RxBufEn变量来控制
        OSSemPost(SemUartRec);//发信号量,接收完成       
    #endif
}

任务中等待信号量的地方:
#ifdef RxSigEn
    OSSemPend(SemUartRec,0,&err);        //一直等待到收到完整数据
    Uart0Process();
#else
    if(RxBufEn==0)                      //等待接收完成
    {
        Uart0Process();
    }
    OSTimeDly(10);
#endif


请各位帮我看一下,如果用了信号量,程序跑一会儿就死了,暂停调试会PC会停在Undefined处,值为0x00000040.

最新回复

其实是没有问题的,我是打的时候手误,呵呵,有个地方语法打错了.让大家失望了,我的BLOG地址是: http://blog.meijwang.com  详情 回复 发表于 2007-12-12 16:08
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
在中断函数第一行加上OSIntNesting++; 或者OSIntEnter();
如果你加了还是有问题,那我就不知道为什么了,如果没加,出现你说的现象的原因是:
OSSemPost(SemUartRec);里面调用了任务级调度函数。任务级和中断级调度的唯一区别就是,任务级多了一次压栈处理。因为中断本身已经压了一次栈,所以中断级调度函数里不能再压,否则栈定会越来越高,最后溢出。在中断函数里调用OSSemPost(SemUartRec);等于就是多压了一次栈,但是如果在发出信号量前加上OSIntNesting++; 或者OSIntEnter();任务级调度函数不会有任务调度动作,也就不会压栈,就不会出问题了。
欢迎指教
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢指教,我试了一下,加了这句话后,通信都断了,不知道为什么,我再研究研究.
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

4
 
我的问题已经解决了,可以查看我的BLOG查看原因,虽然不是www871所讲的原因,但分还是要加给他的,感谢他对我的支持,谢谢了.
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 
blog进不去  
怎么解决的?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
怎么解决的 你简单介绍一下  谢谢
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 
其实是没有问题的,我是打的时候手误,呵呵,有个地方语法打错了.让大家失望了,我的BLOG地址是: http://blog.meijwang.com
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表