分类:
2009-11-17 23:09:20
uC/OS 的移植测试
原创文章,希望喜欢的朋友给在下宣传一下,涨涨人气
shichaog
1 调试思路
一般相对处理器内存而言操作系统都比较大,为了使原本就比较复杂的问题不更加难于解决,对移植的代码,首先不加任何应用代码,只测试内核自身的运行状况;如果产生问题就可确信为是移植的自身问题而不是应用程序的问题,解决内核代码问题后;剩下的任务就是给内核添加用户任务代码,调试并使之通过测试。而对uC/OS而言主要是验证OSTaskStkInit(),OSStartHighRdy(),OSIntCtxSw(),OSTickISR(),OSCtxSw()这几个函数。
2 确保C编译器、汇编编译器及链接器的正常工作
对于MCS-51处理器而言,我们用比较流行的集C编译器、汇编编译器及链接器于一身的Keil公司产品Keil uVision3 编译器,它是功能强大的集成开发环境(IDE),所以先要确保集成开发环境没有问题,具体可以自己先写一些简单的程序,测试一下,这一步完成之后,就要做一个最小的测试,如图一中的测试程序;
图一:测试程序
Fig1:testing program
因为程序员经常使用keil 编写和调试51系列单片机的应用程序,所以一般keil是不会有问题的。从图一的输出窗口信息可以看出没有错误,但是有14个警告,并且从截图中也可以看出有未调用的代码段,这是因为为了检验系统移植是否正确,注释掉了串口初始化和中断函数及创建任务函数等的缘故;对于单片机序而言,能通过编译并不意味着生成的目标代码就能按照用户期望在单片机上运行,必须注重输出窗口给的提示信息,尤其不要忽视警告信息,这部分的提示可能就是问题的症结所在,这里图一中的警告是因为没有调用工程中所有函数所导致的,不妨碍验证keil的正确性。
3验证OSTaskStkInit()和OSStartHighRdy()函数
做完第一步工作后,接着就要使用keil调试uc/os 的内核函数了,首先修改OS_CFG.H文件,设置OS_TASK_EN为0,以禁止统计任务。因为上一步的操作中并未添加任何应用程序,所以唯一的任务就是空闲任务,可以使用单步执行来调试该函数,直到该函数运行到OS_TaskIdle()。
Keil支持单步执行的调试机制,也支持多步调试执行,并在调试同时可以查看各个寄存器以及各变量的值,单步执行main()管理员在2009年8月13日编辑了该文章文章。