FreeRTOS介绍

目录

一、FreeRTOS相关概念

1、什么是FreeRTOS?

2、选择FreeRTOS的原因

3、FreeRTOS与Linux、单片机的区别

4、FreeRTOS 资料与源码下载

5、裸机开发与FreeRTOS

6、FreeRTOS实现多任务原理

二、将FreeRTOS移植到STM32F103C8T6

1、手动移植

2、使用CubeMX快速移植

三、使用Cubemx配置FreeRTOS的常见问题

1、Timebase Source 为什么不能设置为 SysTick?

2、FreeRTOS 版本问题

3、 FreeRTOS 各配置选项卡的解释

4、内核配置、函数使能的一些翻译

一、FreeRTOS相关概念

1、什么是FreeRTOS?

Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。

注意:RTOS不是指某一个确定的系统,而是指一类操作系统。比如:uc/OS,FreeRTOS,RTX, RT-Thread等这些都是RTOS类操作系统。

FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管
理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满
足较小系统的需要。 由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、
embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、
embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移
植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为
10.4.4版。

2、选择FreeRTOS的原因

  • FreeRTOS 是免费的;
  • 很多半导体厂商产品的SDK(Software Development Kit)软件开发工具包,就使用FreeRTOS 作为其操作系统,尤其是WIFI、蓝牙这些带有协议栈的芯片或模块;
  • 简单,因为FreeRTOS的文件数量很少;
  • FreeRTOS,最简单(只实现了内核),出货量最大,”使用的资料多,深入的资料少;
  • RT-Thread,对比学习,社区成熟,组件丰富,快速上手。

3、FreeRTOS与Linux、单片机的区别

29f88a3ddec04805adf9ee9becf358f8.png

faba2f7147c848f99c40583511797c26.png

02bbebb5333741aa8003f54f16b9207f.png

9ce4c1ec0be54820bffcf15c9c703ed8.png

4、FreeRTOS 资料与源码下载

官网资料:点击直达官网

5、裸机开发与FreeRTOS

祼机(Bare Machine)是指硬件系统上没有任何操作系统支持的情况。在祼机开发中,开发者需要自己编写所有的驱动程序和操作系统,以实现设备控制和任务管理等功能。

FreeRTOS是一款面向嵌入式系统的实时操作系统,具有轻量级、可移植、开放源代码等特点。在祼机开发中,可以使用FreeRTOS作为操作系统,来简化开发过程。

在祼机开发中使用FreeRTOS,需要进行以下步骤:

  1. 在硬件系统上移植FreeRTOS操作系统。
  2. 编写任务函数,实现任务的具体功能。
  3. 使用FreeRTOS提供的API接口来进行任务管理、内存管理、时间管理、中断处理等操作。
  4. 根据具体需求,编写设备驱动程序,以实现对硬件设备的控制。

需要注意的是,在祼机开发中使用FreeRTOS,需要对系统硬件和软件进行深入的了解和掌握,因此开发过程较为复杂。同时,由于没有操作系统的支持,所以开发者需要对任务管理、内存管理等方面进行更加细致和严密的设计,以确保系统的稳定性和可靠性。

举个例子,妈妈要一边给小孩喂饭,一边加班跟同事微信交流,怎么办?

4bf5c206b78f49a8a7531b39be87b261.png

// 经典单片机程序
void main()
{
	while (1)
    {
        喂一口饭();
        回一个信息();
    }
}
------------------------------------------------------
// RTOS程序    
喂饭()
{
    while (1)
    {
        喂一口饭();
    }
}

回信息()
{
    while (1)
    {
        回一个信息();
    }
}

void main()
{
    create_task(喂饭);
    create_task(回信息);
    start_scheduler();
    while (1)
    {
        sleep();
    }
}

aaabea22a6e4410ab589e1cef6af6b4d.png

6、FreeRTOS实现多任务原理

  • 严格来说 FreeRTOS 并不是实时操作系统,因为它是分时复用的。
  • 系统将时间分割成很多时间片,然后轮流执行各个任务。
  • 每个任务都是独立运行的,互不影响,由于切换的频率很快,就感觉像是同时运行的一样

09109ba3ce5341e9a608bfa1acb172ed.png

二、将FreeRTOS移植到STM32F103C8T6

1、手动移植

过程复杂且繁琐,对新手不友好。如有需要手动移植,可参照大佬:FreeRTOS手动移植到STM32

2、使用CubeMX快速移植

2.1 在 SYS 选项里,将 Debug 设为 Serial Wire ,并且将 Timebase Source 设为 TIM2 (其它定时器也行)

38c7d4867de34ae18f0670c081a5e630.png

2.2  将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator

0d0a6fb2b13d428cad980c0e2ce5f4f6.png

2.3 配置时钟

602fe60c12634fbba5a46de0829081c7.png

2.4 串口配置

b572167fd44a4e64a068efa3dd6e1d65.png

2.5 选择 FREERTOS 选项,并将 Interface 改为 CMSIS_V1

729c906410844708985a30df47023b04.png

2.6 配置项目信息,并导出代码

1d50bad3810d4b9fba148e765548d9af.png

fa9ac75e6623410fb8b87e3bacc4036a.png

2.7 导出代码之后打开文件,加入下面代码和打开Use MicroLIB 使printf重定向到串口

38f2c44f5003413da16ebc5395e84886.png

2.8 移植测试

bab0651f0ea14c5392aecc9f4ec064a5.png

b420b8003d26474f8e8a02e49f39c719.png

三、使用Cubemx配置FreeRTOS的常见问题

1、Timebase Source 为什么不能设置为 SysTick?

裸机的时钟源默认是 SysTick,但是开启 FreeRTOS 后,FreeRTOS会占用 SysTick (用来生成1ms 定时,用于任务调度),所以需要为其他总线提供另外的时钟源。

2、FreeRTOS 版本问题

V2 的内核版本更高,功能更多,在大多数情况下 V1 版本的内核完全够用。

3、 FreeRTOS 各配置选项卡的解释

Events事件相关的创建
Task and Queues任务与队列的创建
Timers and Semaphores定时器和信号量的创建
Mutexes互斥量的创建
FreeRTOS Heap Usage用于查看堆使用情况
config parameters内核参数设置,用户根据自己的实际应用来裁剪定制 FreeRTOS 内核
Include parametersFreeRTOS 部分函数的使能
User Constants相关宏的定义,可以自建一些常量在工程中使用
Advanced settings高级设置

4、内核配置、函数使能的一些翻译

5c566a117d7e4e0db34bfb04b9f343cc.png

3436d8e4536e414a91ece6f0ed581a52.jpeg

8bb42e285ea54a68877d53c7a32fc920.jpeg

内核参数的理解内容非常多,可以参考大佬:FreeRTOS内核配置说明

 

 

  • 30
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值