uC/OS-III 移植到 STM32 简明教程
[一、uC/OS-III 介绍](#一、uC/OS-III 介绍)
二、获取UCOS-III源码
三、建立项目工程
四、解决工程编译报错
五、修改项目文件
下一篇博客:
【uC/OS-III篇】uC/OS-III 创建第一个任务(For STM32)
移植后的工程自取方式:
移植好的Keil工程
一、uC/OS-III 介绍
uC/OS-III 是 MicroC/OS-III 的一种版本,是由 Micrium 公司开发的一款实时操作系统(RTOS)。以下是有关 uC/OS-III 的一些介绍:
发布时间和来源:
uC/OS-III 于 2008 年发布,由 Jean Labrosse 创立的 Micrium 公司开发。Micrium 公司专注于提供嵌入式系统软件解决方案,包括实时操作系统、TCP/IP 协议栈、USB 协议栈等。
历史介绍:
uC/OS-III 是 Micrium 公司开发的第三代实时操作系统,是其成功的前两代产品的延续。它建立在先前版本的经验和反馈基础上,提供了更强大、更灵活和更可靠的解决方案。
特点:
- 多任务处理:支持多任务处理,允许系统同时运行多个任务。
- 优先级调度:支持任务优先级,可以根据任务的重要性进行优先级调度。
- 内核可裁剪:具有可配置的内核功能,可以根据应用程序的需求进行裁剪。
- 高度可移植性:可移植到多种处理器架构和开发环境中。
- 实时性:具有可预测的实时性能,适用于对响应时间要求严格的应用场景。
总体来说,uC/OS-III 是一款功能强大、灵活可靠的实时操作系统,适用于多种嵌入式系统应用,并在嵌入式领域取得了广泛的应用和认可。
二、获取UCOS-III源码
官网地址:Micrium Software and Documentation - Silicon Labs (silabs.com)
需要科学上网哦
一共需要下载三项源代码
1. 下载 uC-OS3 ,该文件下包含了uC/OS-III中独立于CPU的源文件,和uC/OS-III中与CPU相关的源代码
2. 下载 uC-CPU,包含了CPU相关代码
3. 下载 uC-LIB,包含了可移植的函数库,数学、字符串处理相关等
解压缩三个源码
三、建立项目工程
传统的STM32目录结构
UCOS-III文件夹内容,新建四个文件,其中多出一个UCOS-CONFIG文件,用于存放UCOS-III相关的配置文件,其他三个文件夹名字与上面三个源码名相对应即可
向UCOS-III文件夹下的四个文件中放入文件,下面主要就是配置文件、CPU相关、LIB库相关、OS3相关的源码
有些配置文件分别在源代码的Cfg文件夹中
1.先来找UCOS-CONFIG文件夹中要放的文件
(1)先是 uC-CPU 文件夹
路径 uC-CPU-1.31.01/Cfg/Template 下的 cpu_cfg.h 文件
(2)接着 uC-LIB 文件夹
路径 uC-LIB-1.39.01/Cfg/Template 下的 lib_cfg.h文件
(3)最后 uC-OS3 文件夹
路径 uC-OS3-3.08.01/Cfg/Template 下的 **os_app_hooks.c、os_app_hooks.h、os_cfg.h、os_cfg_app.h **文件
2. 找UCOS-CPU文件夹中要放的文件
首先是 UCOS-CPU 目录下的四个文件,下滑到最后就可以看到
接着
最后
3. 找UCOS-LIB文件夹中要放的文件
首先是这14个文件
接着(这里要说明的是 RealView 就是 MDK-ARM ,就是Keil MDK)
4. 找UCOS-OS3文件夹中要放的文件
首先是路径 uC-OS3-3.08.01/Ports/ARM-Cortex-M/ARMv7-M下的 **os_cpu_c.c **文件
接着是 uC-OS3-3.08.01/Ports/ARM-Cortex-M/ARMv7-M/ARM 下的 **os_cpu.c、os_cp_a.asm ** 文件
最后是 uC-OS3-3.08.01/Source 下的20个文件
最终的四个文件下的内容展示
UCO-CONFIG 文件夹下一共6个文件
UCO-CPU 文件夹下一共7个文件
UCO-LIB 文件夹下一共10个文件
UCO-OS3 文件夹下一共22个文件
配置keil项目
不废话直接上图,懂得都懂
四、解决工程编译报错
报错1:
...\UCOS-III\UCOS-OS3\os_cpu.h(83): error: #35: #error directive: "CPU_CFG_NVIC_PRIO_BITS not #define'd in 'cpu_cfg.h' " /* See Note # 1 */
解决办法:搜索整个工程,搜索 CPU_CFG_NVIC_PRIO_BITS ,将预编译的0改成1,该语句在 cpu_cfg.h 的第 242 行
CPU_CFG_NVIC_PRIO_BITS 是用来配置中断优先级位数的
报错2:
...\UCOS-III\UCOS-OS3\os_cpu_c.c(48): error: #5: cannot open source input file ".../.../.../Source/os.h": No such file or directory
改成相对路径 os.h 即可
报错3:
.\Objects\ucos.axf: Error: L6200E: Symbol Mem_Copy multiply defined (by lib_mem_a.o and lib_mem.o).
解决办法:
将lib_mem.c中的Men_Copy函数注释,或者将宏定义修改
将 #if (LIB_MEM_CFG_OPTIMIZE_ASM_EN != DEF_ENABLED) 修改为
#if (LIB_MEM_CFG_OPTIMIZE_ASM_EN != DEF_DISNABLED)
成功编译!
五、修改项目文件
在启动文件中修改如下内容
将 PendSV_Handler 修改为 OS_CPU_PendSVHandler
将 SysTick_Handler 修改为 OS_CPU_SysTickHandler
修改为
往下滑,对应函数也修改下
如果你的工程中原本也定义了这两个中断处理函数,也要注释掉