原来是OSSemPend(OS_EVENT *pevent, INT16U timeout, INT8U *perr)中perr参数的问题。我原先是在任务里面定义了一个INT8U *perr指针变量,然后赋给OSSemPend()的,结果产生的汇编代码在*perr = OS_ERR_NONE位置处产生的指令为STRB r7,[r4,#0x00](见9楼图),此时的r4值0x00000001,所以产生了对内存的非法操作,导致异常。如果把OSSemPend()中的*perr = OS_ERR_NONE屏蔽掉,就不会有问题,说明就是这个参数不能以局部变量的形式传过来,必须存在rom中,这样定义“INT8U *pTaskErr=0”也是不行,必须先在函数外定义一个变量,然后用指正指向它才可以“INT8U err=1;INT8U *pTaskErr=&err;”<br />我记得以前在用arm7和ADS调试V2.52版本的时候,好像不用这样的,怎么此处会有这个问题。
|