【uC/OS-III篇】uC/OS-III 移植到 STM32 简明教程

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 公司开发的第三代实时操作系统,是其成功的前两代产品的延续。它建立在先前版本的经验和反馈基础上,提供了更强大、更灵活和更可靠的解决方案。

特点:

  1. 多任务处理:支持多任务处理,允许系统同时运行多个任务。
  2. 优先级调度:支持任务优先级,可以根据任务的重要性进行优先级调度。
  3. 内核可裁剪:具有可配置的内核功能,可以根据应用程序的需求进行裁剪。
  4. 高度可移植性:可移植到多种处理器架构和开发环境中。
  5. 实时性:具有可预测的实时性能,适用于对响应时间要求严格的应用场景。

总体来说,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

修改为

往下滑,对应函数也修改下

如果你的工程中原本也定义了这两个中断处理函数,也要注释掉

相关推荐
日晨难再2 小时前
嵌入式:STM32的启动(Startup)文件解析
stm32·单片机·嵌入式硬件
PegasusYu12 小时前
STM32CUBEIDE FreeRTOS操作教程(九):eventgroup事件标志组
stm32·教程·rtos·stm32cubeide·free-rtos·eventgroup·时间标志组
文弱书生65616 小时前
输出比较简介
stm32
黑客呀19 小时前
[系统安全]Rootkit基础
stm32·单片机·系统安全
小A15919 小时前
STM32完全学习——使用SysTick精确延时(阻塞式)
stm32·嵌入式硬件·学习
楚灵魈19 小时前
[STM32]从零开始的STM32 HAL库环境搭建
stm32·单片机·嵌入式硬件
小A15920 小时前
STM32完全学习——使用标准库点亮LED
stm32·嵌入式硬件·学习
code_snow1 天前
STM32--JLINK使用、下载问题记录
stm32·单片机·嵌入式硬件
youcans_1 天前
【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识
stm32·单片机·嵌入式硬件·电机控制·foc
YuCaiH1 天前
【STM32】MPU6050简介
笔记·stm32·单片机·嵌入式硬件