STM32移植uCOS-II系统(2)

1.工程文件结构

在原来的STM32工程文件下添加新文件夹uCOS-II


把图片中的PortsSource复制过来(上一篇文章安装的文件)


即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_portsucos_source来自文件夹uCOS-II下的PortsSource

新增了appapi来自userappapi

然后添加头文件路径:


注意红线画出的地方,一定要找到当前头文件的根目录!

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_HandlerPendSV_Handler(startup_stm32f10x_hd.s)

无论选择使用哪一个名字都不要有遗漏!

最后编译一下


user文件夹下,直接把这个文件删除,或者进去把这两个中断屏蔽。



这时就移植完了,使用时注意初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值