开启ucosii的移植之旅

开启ucosii的移植之旅:

4.6.1、移植和硬件平台的关系

(1)只要是cortex-m3内核内核的soc移植差异都不大。

同内核同soc的不同开发板移植差异都不大。

不同内核的开发板移植难度大,找的官方移植的同内核版本为起点。

移植的一般思路: 先找到相近的内核移植好的源码。(官网里找一个)

在开发环境上建立好工程模板后,将ucosii的核心代码添加进去。然后编译,解决报错和警告。(在这里我们只是解决了语法错误,并不知道整个代码具体干了什么事,自己是不清楚的)下载运行,并小幅修改代码查看结果(验证自己的想法),最后添加并调试项目需要的BSP,编写并调试项目app部分。

4.6.2开始移植代码

跟着朱老师实战一下: 自己的板子是 STM32F103RCT6,建好工程模板。

编译出错3个错误。

..\app\..\APP\includes.h(52): error:  #5: cannot open source input file "stm32f10x_lib.h": No such file or directory

找不到"stm32f10x_lib.h"头文件,因为老版本的缘故,实际上"stm32f10x_lib.h"里边包含了各个外设的头文件。这个在新版本里没有,但是我们有"stm32f10x.h"

还有绝对路径包含的问题,注意自己的文件名大小写以及对错。

.\Objects\project_template.axf: Error: L6200E: Symbol __ARM_use_no_argv multiply defined (by app.o and main.o).

.\Objects\project_template.axf: Error: L6200E: Symbol main multiply defined (by app.o and main.o).      main函数重复了。我们在user里定义了main函数,而移植过来的app里面也有main函数。

.\Objects\project_template.axf: Error: L6218E: Undefined symbol OS_CPU_SysTickInit (referred from app.o).

.\Objects\project_template.axf: Error: L6218E: Undefined symbol OS_CPU_PendSVHandler (referred from vectors.o).

把一些文件没有添加进来。粗心造成的。 在这里遇到vectors.s这是以前的启动文件,现在用startup_stm32f10x_xx,,xx根据单片机的容量来选择。代码可以编译成功了。

4.6.3整理bsp部分:

实际移植发现的问题: 

stm32单片机硬件仿真时超过五个断点就会全速运行不了。

 自己对 OSTCBList的指针的理解有偏差:刚开始确实是OS_TCB      OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]任务数组,按照元素下标依次连接(在TCB初始化函数中)但是每创建一个任务时(在此之前已经创建了两个任务,)

在OSTCBint函数中 :

ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain */
ptcb->OSTCBPrev = (OS_TCB *)0;
if (OSTCBList != (OS_TCB *)0) {
OSTCBList->OSTCBPrev = ptcb;
}
OSTCBList = ptcb;

 

 OSTCBList保存的是是上一次的TCB的地址,所以每次OSTCBList

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2018-10-27 21:07  栀子花开fwh  阅读(608)  评论(0编辑  收藏  举报