在IAR环境下LPC2129平台上脉冲捕捉导致死机问题
#define LCD_LED_SW
//extern OS_EVENT *pMbox_App_CapISR_Flowmeter;
INT8U capCnt = 0;
INT32U rcvLast = 0;
extern INT32U rcvBuf[];
extern BOOLEAN flag_capISR;
void
{
//#if OS_CRITICAL_METHOD == 3
//
//#endif
}
经过艰苦的排查之后,才发现原来犯了一个多么低级的错误,仔细看上面蓝色粗体部分,变量rcvCur是32为无符号整型,只要rcvCur不等于零,0xffffffff + rcvCur 当然就会溢出了,从而导致data abort数据中止异常。
当发现当前采样值小于上一次的采样值时,应先减再加就不会产生溢出异常了。正确写法如下:
rcvBuf[capCnt] = (0xffffffff - rcvLast) + rcvCur ;
但是,上机测试后仍然不行,实在是不明白是什么原因了。没办法只得采用开始的办法,不管什么数据,先发送走再说。
//向TaskFlowmeter任务发送邮件
OSMboxPost(pMbox_App_CapISR_Flowmeter, (void *)&rcv);
期待正解啊。
IAR环境LPC2129脉冲捕捉死机问 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)