一、问题:在执行完一个任务一次后,就会进入硬中断,硬件平台stm32f103vct6,IDEkeil, ucoii版本V2.86。
经过追踪发现在进入硬件中断前,是在任务调度函数中。
根据《Cotex-M3权威指南》查看Fault寄存器
查看仿真结果
发现是导致硬Falut的原因是存储器falut或总线fault或用法fault。再依次查询各个falt寄存器(注意这几个寄存器的大小),发现在存储器fault中出现错误。如下图
居然是“取指访问违例”,平常多见的是访问指针数组使用不当造成的错误,这次不一样。经过一番查找,比较大跌眼镜,任务忘了加死循环!!
二、OSFlagPost(FlagsAlarmLed, FLAGS_LED_ALL, OS_FLAG_CLR, 0);最后一个参数传递0也会导致硬Fault,这样就相当于传递给函数一个0地址参数。
作者:青岳岱宗