开启ucosii的移植之旅

开启ucosii的移植之旅:数组

4.6.一、移植和硬件平台的关系app

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

同内核同soc的不一样开发板移植差别都不大。spa

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

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

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

4.6.2开始移植代码ip

跟着朱老师实战一下: 本身的板子是 STM32F103RCT6,建好工程模板。开发

编译出错3个错误。input

..\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