将uC/OS-III移植到CubeMX生成的HAL库工程中

1#前言

  毕设需要将uC/OS-III移植到stm32的板子上。目前国内大多数教程都是将uC/OS-III移植到ST 3.5.0库上的,没有讲如何移植到CubeMX生成的HAL库工程中的。主要原因可能是CubeMX每次生成代码时,都会将一部分用户修改的代码再修改回去,需要重新修改,比较麻烦。但鉴于CubeMX生成配置源代码极为方便,且不容易出错,一些HAL函数也比较好用。因此有必要将uC/OS-III移植到CubeMX生成的HAL库工程中。

  我的开发环境:stm32f103ret6 + Keil5 + CubeMX + uC/OS-III源码(从Micrium下载的F107的例程)


2#移植准备

  由于本人水平有限,还不知道怎么移植系统能够使得CubeMX更新代码时,可以不用重新修改代码。因此尽量一口气将想要配置好的配置好。
  生成代码工程格式选”MDK5”,最好勾选那个“每个外设都独立生成.c和.h”的选项,这样比较干净。


3#移植

  移植大部分操作可以参考野火那本书里面(书名叫《uCOS-III 应用开发指南—基于 STM32F103系列》,云盘:云盘下载),个人建议先照着那本书做一遍,先在ST 3.5.0 的库上移植成功,顺手学一下怎么用,再接着做我这里。好,现在假定你已经照着那本书移植一遍了,那么要做的事情有:
  ①请再不厌其烦的添加文件、添加编译路径(你就可以把之前移植时修改好的文件复制过来,大部分内容不用再次修改)

  ②请把BSP_Init函数里面的内容删了,我们用新的。另外,bsp_led这些文件都不用了,你们懂得。

  ③修改所选用的库函数:因为使用的不再是ST 3.5.0的库,因此原来的stm32f10x.h头文件换成stm32f1xx_hal.h(bsp.h里有一处,includes.h里有一处,共两处),如果不改的话,一些中断号会被重复定义。
  这里写图片描述

  ④把main.c里面的函数全部搬到bsp.c里面去(main函数除外),main.c中的初始化代码复制到BSP_Init()函数中。

  ⑤好了,main.c里面实现的功能全部都由BSP_Init()代为实现了,main.c里面的main函数已形同虚设。但是它的存在会跟APP.c的main函数冲突,那个main函数是我们uC/OS要运行所需要的真正的main。是选择把main.c移除,还是选择把APP.c的main函数拷贝到main.c中,随你

  ⑥把跟SysTick有关的改了,具体有:所有配置SysTick的配置函数全部删掉,把原来SysTick_IRQHandler()函数里面的东西复制到OS_CPU_SysTickHandler()里面(别忘了修改启动代码)。另外,有一个修改PendSV优先级的函数,把它删掉。OK搞定。


4#测试

  经测试,移植的程序能够跑流水灯,说明移植成功。但如果再次使用CubeMX生成代码,则移植的工作大部分就白作了。不清楚该如何使得CubeMX不修改部分代码。


5#一点小补充

  ①Hal库使用串口的时候,串口中断实际上的开与否是由HAL函数接管的。看源码可以看到,在HAL_USART_TransmitReceive_IT和HAL_USART_Receive_IT函数中有一处是打开中断的操作。当调用上面这两个函数的时候,HAL会打开发送/接收中断,当操作完成后,会把中断关掉,这时就接收不到消息了。

猜你喜欢

转载自blog.csdn.net/lingsuifenfei123/article/details/66972711