【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

修改为

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

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

相关推荐
Deitymoon1 小时前
STM32——外部中断按键控制led
stm32·单片机·嵌入式硬件
czwxkn1 小时前
7STM32(stdl)flash内部闪存
stm32·单片机·嵌入式硬件
咕噜咕噜啦啦2 小时前
STlink下载程序
stm32·单片机
Deitymoon3 小时前
STM32——串口中断接收
stm32·单片机·嵌入式硬件
Deitymoon5 小时前
STM32——串口通信发送数据
stm32·单片机·嵌入式硬件
czwxkn6 小时前
8STM32(stdl)低功耗模式
stm32·单片机·嵌入式硬件
czwxkn6 小时前
9STM32(stdl)看门狗
stm32·单片机·嵌入式硬件
LCG元8 小时前
STM32实战:基于STM32F103的SPI通信驱动W25Qxx Flash存储
stm32·单片机·嵌入式硬件
iCxhust8 小时前
led_pattern = (led_pattern << 1) | (led_pattern >> 7)执行顺序
stm32·单片机·嵌入式硬件·51单片机·微机原理
Deitymoon8 小时前
STM32——串口通信发送字符串
stm32·单片机·嵌入式硬件