开启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