stm32F103C8T6基于FreeRTOS操作系统的多任务
目录
- 一、FreeRTOS简介
- 1.什么是FreeRTOS?
- 2. FreeRTOS特点
- 二、创建项目
- 三、编写代码
- 四、编译烧录
- 五、总结
- 参考链接
一、FreeRTOS简介
1.什么是FreeRTOS?
我们看一下FreeRTOS的名字,可以分为两部分:Free和 RTOS,Free 就是免费的、自由的、不受约束的意思,RTOS全称是RealTimeOperating System,中文名就是实时操作系统。可以看出 FreeROTS就是一个免费的RTOS类系统。这里要注意,RTOS不是指某一个确定的系统,而是指一类系统。比如UCOS,FreeRTOS,RTX,RT-Thread等这些都是RTOS类操作系统。
操作系统允许多个任务同时运行,这个叫做多任务,实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务,任务调度在各个任务之间的切换非常快!这就给人们造成了同一时刻有多个任务同时运行的错觉。
操作系统的分类方式可以由任务调度器的工作方式决定,比如有的操作系统给每个任务分配同样的运行时间,时间到了就轮到下一个任务,Unix操作系统就是这样的。RTOS的任务调度器被设计为可预测的,而这正是嵌入式实时操作系统所需要的,实时环境中要求操作系统必须对某一个事件做出实时的响应,因此系统任务调度器的行为必须是可预测的。像FreeRTOS这种传统的RTOS类操作系统是由用户给每个任务分配一个任务优先级,任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
FreeRTOS是RTOS系统的一种,FreeRTOS十分的小巧,可以在资源有限的微控制器中运行,当然了,FreeRTOS不仅局限于在微控制器中使用。但从文件数量上来看FreeRTOS要比UCOSI和 UCOSIII小的多。
2. FreeRTOS特点
FreeRTOS是一个可裁剪的小型RTOS系统,其特点包括:
- FreeRTOS的内核支持抢占式,合作式和时间片调度。
- SafeRTOS衍生自FreeRTOS,SafeRTOS在代码完整性上相比FreeRTOS更胜一筹。
- 提供了一个用于低功耗的Tickless模式。
- 系统的组件在创建时可以选择动态或者静态的RAM,比如任务、消息队列、信号量、软件定时器等等。
- 已经在超过30种架构的芯片上进行了移植。
- FreeRTOS-MPU支持Corex-M系列中的MPU单元,如 STM32F103。
- FreeRTOS系统简单、小巧、易用,通常情况下内核占用4k-9k字节的空间。高可移植性,代码主要C语言编写。
- 支持实时任务和协程(co-routines也有称为合作式、协同程序,本教程均成为协程)
- 任务与任务、任务与中断之间可以使用任务通知、消息队列、二值信号量、数值型信号量、递归互斥信号量和互斥信号量进行通信和同步。
- 创新的事件组(或者事件标志)。
-具有优先级继承特性的互斥信号量。
高效的软件定时器。 - 强大的跟踪执行功能。
- 堆栈溢出检测功能。
- 任务数量不限。
- 任务优先级不限。
二、创建项目
使用CubeMx创建,我这里用的是STM32F103C8。
配置两个GPIO引脚来点灯:
配置SYS:
配置FREERTOS:
配置项目信息并生成项目:
使用keil打开项目文件。
三、编写代码
打开ferrrtos.c:
在ferrrtos.c对应函数内写代码:
void StartUTask(void const * argument)
{/* USER CODE BEGIN StartUTask *//* Infinite loop */for(;;){osDelay(2000);printf("hello uc/OS! 欢迎来到RTOS多任务环境!\r\n");}/* USER CODE END StartUTask */
}/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the LED0 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{/* USER CODE BEGIN StartTask02 *//* Infinite loop */for(;;){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET);osDelay(500);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);osDelay(500);}/* USER CODE END StartTask02 */
}/* USER CODE BEGIN Header_StartTask03 */
/**
* @brief Function implementing the LED1 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask03 */
void StartTask03(void const * argument)
{/* USER CODE BEGIN StartTask03 *//* Infinite loop */for(;;){//osDelay(1000);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);osDelay(500);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);osDelay(2500);}/* USER CODE END StartTask03 */
}
四、编译烧录
编译烧录前设置:
结果:
五、总结
在本次实验中,相比uCOS移植,FreeRTOS的操作更简单,大多数CubeMxy已经写好了,自己只需写几行代码即可。
参考链接
https://blog.csdn.net/Mouer__/article/details/121616118?spm=1001.2014.3001.5501
stm32F103C8T6基于FreeRTOS操作系统的多任务相关推荐
- stm32F103C8T6基于FreeRTOS操作系统的多任务(STM32CUBEMX)
文章目录 一.简介 二.任务要求 三.创建项目 三.编写任务代码 四.效果 五.参考 一.简介 FreeRTOS,是指实时操作系统,是可以多任务进行的一个操作系统,相当于裸机开发而已,任务的实现相对方 ...
- 实战篇 | 基于freeRTOS的多任务事件传输demo(附代码)
之前分享了很多关于freeRTOS的知识,那么我们怎么在实战中去写代码呢?本篇文章重在对基于freeRTOS的架构代码的解析.整个功能如下图: 为什么要用freeRTOS 在实际项目中,如果程序等待一 ...
- 基于在STM32下完成FreeRTOS的多任务程序开发,多任务串口以及AHT20封装库,原理图,PCB图以及AHT20(实际用到的是LMT70)及采集一次温度数据的模块实战
基于在STM32下完成FreeRTOS的多任务程序开发,多任务串口以及AHT20封装库,原理图,PCB图以及AHT20(实际用到的是LMT70)及采集一次温度数据的模块实战 序 言 1)FreeRTO ...
- 基于RT-Thread操作系统的 基础四轮组智能车设计与实践
学 校: 同济大学 队伍名称: 智行·龙卷风 参赛队员: 杨怡,韦炳宇,许泽华 带队教师: 张志明,余有灵 §01 引言 1.1全国大学生智能车竞赛介绍 全国大学生智能汽车竞赛是以智能汽车为研究对象的 ...
- 基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(四)FreeRTOS系统下LwIP-1.4.1的移植
本文在前一篇的基础上,进行基于FreeRTOS的LwIP-1.4.1版本移植. 本文使用的网卡PHY芯片型号是DP83848,工作在MII接口模式,时钟频率是25MHz. 现在的LwIP版本已经发展到 ...
- android宿舍管理系统源码,基于android操作系统的手机宿舍管理系统使用手册
<基于android操作系统的手机宿舍管理系统使用手册>由会员分享,可在线阅读,更多相关<基于android操作系统的手机宿舍管理系统使用手册(5页珍藏版)>请在人人文库网上搜 ...
- S3C2440中断解析和基于WINCE操作系统的中断分析(整理于网络,用于按键中断使用)
在调试CAN总线的时候,遇到了操作系统的中断,为了彻底的弄清楚中断是怎么回事?我先从底层的中断开始研究,在这里我们只讨论外部中断,下面就结合S3C2440TEST测试程序来分析一下中断是怎么执行的:我 ...
- 用于MCU,基于FreeRTOS的micro(轻量级)ROS
编辑整理:strongerHuang 作者:Francesca Finocchiaro 关注我的读者中应该有部分是做ROS相关的工作,今天就来分享一个基于FreeRTOS的micro(微型)ROS. ...
- 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
代码地址如下: http://www.demodashi.com/demo/13533.html 文章目录 一.前言: 二.回顾下`OTA`的流程: 三.`lwip`网络框架的知识的使用: 四.如何处 ...
最新文章
- 基于SSH实现教务管理系统
- c++vector初始化的几种方法
- ISAkmp载荷头部
- 内核进程切换实现分析
- 尝试使用阿里云服务器
- 日语python_边学日语边学python语法
- 微服务框架下的思维变化-OSS.Core基础思路
- 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)
- SQL的四种连接-左外连接、右外连接、内连接、全连接(转)
- Nvivo 12 安装包可自动编码
- 【已解决】微星主板开启msi fast boot后不能进BIOS
- openwrt 格式化_如何在路由器上格式化 U 盘、硬盘
- PDF文件中的文字怎么修改?来试试这种修改方法
- 国家何时整治程序员的高薪现象???
- 虚拟机上无法运行ubuntu自带的gazebo仿真器报VMware: vmw_ioctl_command error 无效的参数
- 各类文件的文件头尾总结
- python 语言与numpy库
- 计算机专业助我成长作文600,科技伴随我成长作文
- 如何安装谷歌服务框架?(Google三件套下载教程)
- 计算机专业老师新学期工作计划,计算机教师工作计划