将uc/OS移植到stm32F103上

本文详细介绍了如何将嵌入式实时操作系统(uC/OS)移植到STM32F103C8T6微控制器上。首先,概述了实时操作系统的基本概念和特征,接着利用CubeMX配置STM32F103C8T6的HAL库,然后详细阐述了移植uC/OS-III的步骤,包括下载源码、添加文件、修改配置等,最后总结了移植过程中的关键点,并提供了参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、嵌入式实时操作系统(RTOS)

1.定义

实时操作系统是保证在一定时间限制内完成特定功能的操作系统。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。

2.实时任务

在实时系统中必然存在着若干个实时任务,这些任务通常与某些个外部设备相关,能反应或控制相应的外部设备,因而带有某种程度的紧迫性。可从不同的角度对实时任务加以分类。
按任务执行时是否呈现周期性变化来划分:
①周期性实时任务
外部设备周期性地发出激励信号给计算机,要求它按照指定周期循环执行,以便周期性的控制某种外部设备。
②非周期性实时任务
外部设备所发出的激励信号并无明显的周期性,但都必须联系着一个截止时间。 它又可分为开始截止时间(任务在某时间以前必须开始执行)和完成截止时间(任务在某时间以前必须完成)两部分。
根据对截至时间的要求来划分
①硬实时任务
②软实时任务

3.特征

1)高精度计时系统
计时精度是影响实时性的一个重要因素。在实时应用系统中,经常需要精确确定实时地操作某个设备或执行某个任务,或精确的计算一个时间函数。这些不仅依赖于一些硬件提供的时钟精度,也依赖于实时操作系统实现的高精度计时功能。
2)多级中断机制
一个实时应用系统通常需要处理多种外部信息或事件,但处理的紧迫程度有轻重缓急之分。有的必须立即作出反应,有的则可以延后处理。因此,需要建立多级中断嵌套处理机制,以确保对紧迫程度较高的实时事件进行及时响应和处理。
3)实时调度机制
实时操作系统不仅要及时响应实时事件中断,同时也要及时调度运行实时任务。但是,处理机调度并不能随心所欲的进行,因为涉及到两个进程之间的切换,只能在确保“安全切换”的时间点上进行,实时调度机制包括两个方面,一是在调度策略和算法上保证优先调度实时任务;二是建立更多“安全切换”时间点,保证及时调度实时任务。

二、使用CubeMX建立STM32F103C8T6HAL库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置系统时钟为72M在这里插入图片描述
将与LED相连的端口PC13配置为GPIO_Output
在这里插入图片描述
设置串口USART1
在这里插入图片描述
填写项目信息
在这里插入图片描述
在这里插入图片描述
打开项目,在main函数的while循环中添加

    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
  HAL_Delay(500);
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
  HAL_Delay(500);

连接好电路后,编译烧录运行程序

三、移植uC/OS-III

1.从ucoslll官网中下载源码
http://micrium.com/downloadcenter/

在这里插入图片描述

2.新建uC-BSP和uC-CONFIG文件夹

3.为uC-BSP文件夹新建bsp.c和bsp.h文件
在这里插入图片描述
4.将uCOS相关文件复制到HAL工程的MDK-ARM文件夹下
5.将uCOS文件添加到项目
6.在keil中导入文件
在这里插入图片描述
在这里插入图片描述

7.CPU-Add选择uC-CPU下的
在这里插入图片描述
RealView下的
在这里插入图片描述

LIB-Add uC-LIB下的
在这里插入图片描述
RealView下的
在这里插入图片描述

PORT-Add RealView下的
在这里插入图片描述

SOURCE-Add Source下的
在这里插入图片描述

CONFIG-Add uc-CONFIG下的
在这里插入图片描述

BSP-Add uc-BSP下的
在这里插入图片描述

8.在path中添加
在这里插入图片描述

9.将启动文件的PendSV_HandlerSystick_Handler改为OS_CPU_PendSVHandlerOS_CPU_SysTickHandler
在这里插入图片描述
在这里插入图片描述

10.app_cfg.h中的 #define APP_CFG_SERIAL_EN DEF_ENABLED 改为 #define APP_CFG_SERIAL_EN DEF_DISABLED
#define APP_TRACE BSP_Ser_Printf 改为 #define APP_TRACE (void)
在这里插入图片描述
在这里插入图片描述
11.includes.h
在#include <bsp.h> 后面加上

 #include “gpio.h”
 #include “app_cfg.h”

#include <stm32f10x_lib.h> 改为

 #include “stm32f1xx_hal.h”

在这里插入图片描述

12.lib_cfg.h
#define LIB_MEM_CFG_HEAP_SIZE 5u * 1024u改为

 #define LIB_MEM_CFG_HEAP_SIZE 5u * 1024u

在这里插入图片描述

13.bsp.c文件代码


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值