|
在写程序中突然遇到一个怪事情,我使用的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.
|
|