1.工程文件结构
在原来的STM32工程文件下添加新文件夹uCOS-II
把图片中的Ports和Source复制过来(上一篇文章安装的文件)
即uCOS-II中的移植文件夹Ports和源文件夹Source
除此之外user文件夹发生了改变
Micrium\Software\EvalBoards\ST\STM32F103ZE-SK\IAR\OS-Probe-LCD把这个目录下的includes.h 和 os_cfg.h复制到user文件夹下
新加了文件夹app相当于应用层,对应于api则是应用层接口,ST固件库函数fwlib则相当于驱动层!
以下.h文件来自Micrium\Software\EvalBoards模板下:
includes.h//管理所有.h文件
os_cfg.h//通过宏定义配置系统功能
文件夹app app.c app_cfg.h
文件夹api bsp.c bsp.h
2.工程配置
打开工程文件,把刚复制的几个文件夹添加到项目中
新增了ucos_ports和ucos_source来自文件夹uCOS-II下的Ports和Source;
新增了app和api来自user的app和api。
然后添加头文件路径:
注意红线画出的地方,一定要找到当前头文件的根目录!
1.修改文件
编译链接会出现38个错误。
从上往下查找错误:
出现前8个错误
(1)os_cpu_a.asm
跳到错误的地方,将PUBLIC改成EXPORT
编译链接。出现
双击现在的第一个错误跳到错误的地方
查找启动代码里的代码(蓝色阴影部分)
把原来的用分号注释掉,加上下面的语句
需要补充的3点。
ALIGN:使用方式为ALIGN表达式。在默认时,ELF(可执行连接文件)的代码段和数据段是按字节对齐的,表达式的取值范围为0-31,相应的对齐方式为2表达式次方。
PRESERVE8:指示编译器8字节对齐。
THUMB:指示编译器位THUMB指令。
编译链接
出现这个错误
把__root注释掉,是IAR编译器用的
有7个函数使用了但是没有定义,os_cpu_c.c中,发现
转到OS_APP_HOOKS_EN定义的地方其中在os_cfg.h中
但这时相应的函数却没有定义。
把#define OS_APP_HOOKS_EN 0
..\obj\stm32pro_xx.axf: Error: L6218E: Undefined symbol OS_CPU_SysTickClkFreq (referred from os_cpu_c.o).
这个函数需要用户自己去定义的,不过我们可以去借助模板中的文件。
这里我们直接添加文件夹中的复制自模板中的文件,去掉我们不需要的。
app---app.c (app)
bsp---bsp.c (api)
在bsp.c中留下这两个函数。
可以看到没有这个类型的声明,那么把ucos_ii.h这个头文件添加到includes.h中来,因为ucos_ii.h中包含了定义INT32U类型的头文件。直接点击INT32U跳进去,添加相对应的头文件也可以。
中断服务函数修改
移植文件中使用到的中断服务函数和启动代码中定义的不符合
OS_CPU_SysTickHandler(os_cpu_c.c)、OS_CPU_PendSVHandler(os_cpu_a.asm)
把这两个中断函数改成和启动文件中同样的名字,这样程序才能跳进中断。
PendSV_Handler需要更改两个地方
最后在OS_CPU.h中改这两个函数的声明,改完以后
SysTick_Handler、PendSV_Handler(startup_stm32f10x_hd.s)
无论选择使用哪一个名字都不要有遗漏!
最后编译一下
在user文件夹下,直接把这个文件删除,或者进去把这两个中断屏蔽。
这时就移植完了,使用时注意初始化。