(1)中断处理程序的中断矢量地址没有正确赋值,从而导致发生中断后CPU无法运行到中断处理程序位置;
(2)在OsctxSw和OSIntctxSw中的任务切换语句后加人几条NOP空语句,确保任务切换的相应指令执行结束,如果在这些位置没有加相应的空操作指令,也会导致程序跑飞;
(3)由于堆栈的空间分配不够,以及没有给CPU的各个工作模式分配空间,导致任务切换时,堆栈溢出;
(4)μC/OS-Ⅱ要求用户提供一个时钟资源来实现时钟节拍,时钟节拍应该每秒钟发生10~100次,用户必须在开始多任务调度后(即调用OSStart后)允许时钟节拍中断。通常的错误是在调用OSlnit()和OSStart()之间允许时钟节拍中断,同时用户不要单纯地追求实时性,而将系统的时钟节拍频率增加太高。以上几个方面的问题解决后,系统的工作非常稳定。
4 、系统测试
移植完成后的系统包括4个部分:自启动程序、μC/OS-Ⅱ系统文件、移植代码、应用程序。开发环境是ARM公司提供的ADSl.2(ARM Dev-eloper Suite)。该系统创建了以下3个任务来验证μC/OS-Ⅱ的移植成功:
在为自己的微处理器做完μC/OS-Ⅱ的移植后,首先建立3个任务,之后不加任何其他应用代码来测试移植好的μC/OS-Ⅱ,也就是说应该先测试内核自身的运行状况。这样做有2个原因:不希望将事情复杂化;如果有些地方没有工作可以明白是移植本身的问题,而不是应用代码产生的问题。经过测试和修改,无相关错误产生,说明移植成功。