ucos 移植到LPC1768时遇到的一个问题

[复制链接]
 楼主| lsddata 发表于 2012-10-6 17:50 | 显示全部楼层 |阅读模式
void  eint3Isr (void)
{
  IO0IntEnf =IO0IntEnf&(~ad7190_data_out); /* P0.17下降沿中断禁止*/
delay_nus(1);
if(0x00000000==(FIO0PIN&0x00020000))
  {
   read_from_ad7190(3,ad_new_buffer);
   ad_new_data=ad_new_buffer[2]<<16|ad_new_buffer[1]<<8|ad_new_buffer[0];
   OSMboxPost(SampleMbox,&ad_new_data);
  }
IO0IntEnf = ad7190_data_out; /* P0.17下降沿中断使能          */   
IO0IntClr = ad7190_data_out;  //中断标志清零
}


只要在上面的程序中加入OSMboxPost(SampleMbox,&ad_new_data);
时,程序运行时出现异常,进入下面的while (1);

void defaultVectorHandle (void)
{
#ifdef DEBUG
    while (1);
#else
    zyReset(ZY_HARD_RESET);
#endif                                                                  /*  DEBUG                       */
}


但在别的任务中调用OSMboxPost(SampleMbox,&ad_new_data);时正常运行,哪位高人能指点一下?
阿南 发表于 2012-10-6 18:27 | 显示全部楼层
defaultVectorHandle 是默认异常处理。别的任务中调用无该问题,而这个程序中有,很大程度是和P0.17下降沿中断有关。楼主可以将该中断一直禁止,再调用试试,并跟踪该线索看是否能找到问题。
 楼主| lsddata 发表于 2012-10-6 20:32 | 显示全部楼层
我仿真跟进去看看了,是在OSMboxPost(SampleMbox,&ad_new_data)函数里,调用OS_Sched()时发生了异常,这个问题应该怎么解决啊?
阿南 发表于 2012-10-7 08:26 | 显示全部楼层
OS_Sched()这是操作系统的调度函数。
我觉得还是中断异常引起的,重点抓住只有这个函数调用才会引起,这条线索,多做些实验比较。
PS:请问eint3Isr是中断处理函数吧?试一下在其它中断处理函数调用OSMboxPost是否也会出现该问题。
 楼主| lsddata 发表于 2012-10-7 10:28 | 显示全部楼层
知道原因了,中断中要加OSIntEnter(); OSIntExit();
阿南 发表于 2012-10-7 10:33 | 显示全部楼层
呵呵,果然是中断中没处理好引起的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

94

帖子

1

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