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

2024-04-01 10:36
文章标签 教程 stm32 移植 iii os uc 简明

本文主要是介绍【uC/OS-III篇】uC/OS-III 移植到 STM32 简明教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

一、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
在这里插入图片描述

修改为

在这里插入图片描述

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

在这里插入图片描述

如果你的工程中原本也定义了这两个中断处理函数,也要注释掉在这里插入图片描述

这篇关于【uC/OS-III篇】uC/OS-III 移植到 STM32 简明教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/866940

相关文章

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是