基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1)

这篇具有很好参考价值的文章主要介绍了基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

直接意识代码:

int main()
{
    while(1)
    {
        //LED1置为高电平 
        ...... 
        //延时1000MS 
        ...... 
        //LED1置为低电平 
        ...... 
        //延时1000MS 
        ...... 
        //LED2置为高电平 
        ...... 
        //延时500MS 
        ...... 
        //LED2置为低电平 
        ...... 
        //延时500MS 
        ......
    }
}

这是我们大脑最希望的添加代码方式,很显然他是错的两个任务之间产生了相互的影响,使得两个任务都执行错误,这种思想在裸机开发中肯定是错的,但是在我们的RTOS中他就可以是对的

任务型代码:

//创建LED1任务
void LED1_Task()
{
    //LED1置为高电平 
    ...... 
    //延时1000MS 
    ...... 
    //LED1置为低电平 
    ...... 
    //延时1000MS 
    ...... 
}


//创建LED2任务
void LED2_Task()
{
    //LED2置为高电平 
    ...... 
    //延时500MS 
    ...... 
    //LED2置为低电平 
    ...... 
    //延时500MS 
    ......
}

这是独立的两个任务内容,我们只需要把他的扔到我们的任务执行器里,他就会**“同时”运行了,很多小伙伴就会疑问了,单片机明明只有一个核**,为什么可以同时执行多个任务呢?这就需要去了解RTOS操作系统中任务“同时”执行的原理

1.4 任务“同时”执行的原理

在RTOS中,RTOS利用了一种类似于**“视觉暂留”的工作原理,多个任务之间快速切换。在ROTS中,可以让我们的每个任务执行一个时间单位**,然后就切换到另外一个任务执行一个时间单位,再切换回去,两个任务都是独立运行的,互不影响,由于切换的频率很快就感觉像是同时运行的一样

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

上图为一个简单的示意图,读者朋友们可以结合该图好好理解一下RTOS系统的执行过程。

二、 FreeRTOS的手动移植

为了图方便,笔者这里直接使用CubeMX去生成一个基于HAL库的初始STM32工程文件。不习惯用HAL库的,可以找一个标准库的初始STM32工程文件,进行手动移植工作。

①、建立STM32空工程

这里使用STM32CubeMX快速创建项目,要注意的是我们完成最基本的配置以后,需要将我们的Timebase Source修改一下,修改成除了滴答定时器的其他定时器,如下图:

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

这里我使用的TIM2作为Timebase Source

为什么不可以使用滴答定时器呢?

FreeRTOS中我们的SysTick定时器被用于了我们的始终基准,它用来实现我们的任务切换,我们的SysTick定时器每次触发我们的中断默认是一毫秒,可以自行修改为其他值

Timebase Source是干嘛的呢?

简单的说,正常裸机开发中我们的SysTick定时器是用来主要是用来进行我们的HAL_Delay()延时的,使用其作为基准,前面我们说了SysTick定时器被用于系统任务切换了,所以它就是一直在工作,或者说一直在触发中断,这样的话我们的**HAL_Delay()就需用使用我们的其他定时器(TIM2)**进行替代其作用了

②、FreeRTOS内核下载

这一步将会教大家如何去下载FreeRTOS内核以及如何进行移植到我们的项目里面。

首先,登入FreeRTOS的官网,地址:FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions for embedded systems with Internet of Things extensions")

点击右上角的Download FreeRTOS

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

来到版本选择界面

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

上面的是FreeRTOS****的最新版本,下面的就是长期维护的版本

我们直接点击上面这个Github超链接

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

然后就依次带点击CodeDownload ZIP

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

但是,这时候下载完成的压缩波其实并不包含FreeRTOS的子模块。所以,在该页面向下翻找。

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

找到Kernel source(内核资源) 这里,点击箭头处的超链接;

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

按照上方步骤下载压缩包,之后进行解压,最终成功得到2个文件夹;

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

其中,FreeRTOS-Kernel-mainFreeRTOS的内核文件,FreeRTOS-main文件夹下的内容则比较繁杂,我们主要看里面Demo文件

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

Demo文件夹里面的文件非常多,不过我们可以找到这样一个文件夹CORTEX_STM32F103_Keil

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

CORTEX_STM32F103_Keil文件夹为官方将系统已经移植好的实例,但是这并不是我们直接移植的,感兴趣的小伙伴可以先打看官方移植好的能不能看懂。

③、手动移植FreeRTOS内核文件

1、打开第一步建立的新项目

2、左侧项目文件添加两个新的分组

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

3、建立对应的FreeRTOS文件夹

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

4、打开FreeRTOS-Kernel文件夹

5、主目录下所有的.C后缀的文件全部复制我们的FreeRTOS文件夹下(一共七个)

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

6、复制include文件夹以及portable文件夹到FreeRTOS文件夹下

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

7、保留FreeRTOS/portable文件夹中的Keil、MemMang、RVDS文件夹,其余全部删除

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

8、保留FreeRTOS/portable/RVDS文件夹中的ARM_CM3文件夹

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

9、然后如图进行Keil项目的分组文件配置

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

10、添加对应的头文件

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

11、直接编译(出现9个错误)

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

④、项目问题修复

缺少FreeRTOSConfig.h文件(FreeRTOS的配置文件)

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

示例项目中复制粘贴并且添加到项目文件夹中(记得添加头文件路径)

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

编译无错误

⑤、项目添加处理

虽然没有错误了,但是我们的移植没有完成,还有一些小步骤需要完成,的确有些繁琐,好在逻辑性还是比较强的,理解起来相对容易。

在FreeRTOSConfig.h中添加#define xPortPendSVHandler PendSV_Handler

在FreeRTOSConfig.h中添加#define xPortSysTickHandler SysTick_Handler

在FreeRTOSConfig.h中添加#define vPortSVCHandler SVC_Handler

左边三个是我们Free RTOS中定义好的函数,右边的是系统项目本来就定义好的函数,他们的作用小伙伴们可以去了解一下,作为初学者这里不进行拓展,反正就是和我们操作系统的中断还有任务切换有关的函数

编译,还是报错,重复定义

处理错误: 进入对应的文件stm32f1xx_it.c删除重复的3个函数

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

OK移植成功了!!!

⑥、FreeRTOS点灯项目创建

相关的头文件引入:用到的头文件有**“FreeRTOS.h”(操作系统相关)"task.h"(任务相关)**

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

05)]

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1),程序员,嵌入式

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!文章来源地址https://www.toymoban.com/news/detail-846006.html

到了这里,关于基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32初学者入门FreeRTOS操作系统,多任务实时系统

            FreeRTOS(Free Real-Time Operating System)是一个开源的嵌入式实时操作系统,它专门设计用于在资源有限的嵌入式系统中运行。FreeRTOS提供了一些用于任务管理、调度、同步和通信的功能,使开发者能够轻松地创建可靠的嵌入式系统。 以下是FreeRTOS的一些特点和功能: 轻量

    2024年02月11日
    浏览(45)
  • STM32操作系统FreeRTOS学习——基于hal库

    目录 一、基础概念 1、FreeRTOS 2、单片机编程的系统概念 a、裸机系统,包括轮询系统(不包括中断)和前后台系统(中断为前台,轮询为后台) b、多任务系统 3、FreeRTOS编程风格 a、数据类型 b、变量名的定义 c、函数名 d、宏定义 二、Cubemx创建工程 1、创建任务 2、创建队列

    2024年02月10日
    浏览(38)
  • 基于STM32的homeassistant(采用FreeRTOS操作系统)【第一章:设备配网、连接服务器、断网重连、断服务器重接】

      主控 STM32F103C8T6 WIFI模块 ESP01S 开发语言 C 开发编译器· KEIL 组网方式 WIFI 服务器协议 MQTT ESP01S的AT指令配网以及服务器连接 STM32与ESP01S的usart协议通信 断网重连以及断服务器重连 STM32向服务器端口发送对应指令         ESP01S的配网方式为AT指令集,通过识别对对应的AT指令

    2024年02月12日
    浏览(49)
  • 【STM32】STM32 移植鸿蒙操作系统

    随着 OpenHarmony3.1 的正式发布,其功能也在不断完善。OpenHarmony LiteOS-M 内核是面向IoT领域构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点,其代码结构简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等,分为硬件相关层以及硬件无

    2024年02月09日
    浏览(53)
  • 基于STM32的homeassistant(采用FreeRTOS操作系统)【第一、二章优化拓展:Wifi、服务器连接验证以及UASRT串口区分】

      主控 STM32F103C8T6 WIFI模块 ESP01S 开发语言 C 开发编译器· KEIL 组网方式 WIFI 服务器协议 MQTT STM32 ESP01S 3.3V 3.3V GND GND GPIO2  (USRAT2-TX) RX GPIO3 (USART3-RX) TX 对ESP01S的AT指令的反馈指令进行验证解析 对ESP的USART2通信串口进行printf端口重映射 对调试用的USART1通信串口编写USART_printf函数并

    2024年02月17日
    浏览(49)
  • 使用STM32CubeMX生成ThreadX实时操作系统工程模板

    文章发布于博客园,主页:https://www.cnblogs.com/-fcy-/。转载请注明出处! 由于需要在stm32上使用USB Host CDC-ECM,连接EC20发送数据到服务器,接触到了ThreadX实时操作系统。 在调研过程中,发现stm32官方USB库内只有Device ECM类,无法作为host连接网卡; 电脑上经常使用的tinyusb,对st

    2024年02月04日
    浏览(41)
  • 如何剪裁操作系统源码——移植FreeRTOS的内存管理模块到ARMV8裸片

    本文面向的需求场景是,为缺乏标准库实现的处理器IP移植内存管理模块,即为裸片部署C标准库中的 malloc() 和 free() 函数。 具体做法是——从操作系统的内存管理组件中剪裁出必要的源码,适配到目标处理器的开发环境(SDK/IDE/CMAKE工程子目录)中。 1.1 C标准库中的内存管理

    2024年02月13日
    浏览(34)
  • FreeRTOS_从底层学习实时操作系统

    目录 1. 裸机系统和多任务系统 2. 任务的定任务切换的实现 2.1 什么是任务? 2.2 调度器 2.3 临界段 3. 空闲任务和阻塞延迟 4. 时间片 裸机系统:         裸机系统 分为 轮询系统 和 前后台系统 ;(51单片机就属于裸机系统)         轮询系统 是在裸机编程的时候,先初始化

    2024年02月07日
    浏览(38)
  • FreeRTOS实时操作系统(六)列表与列表项

    FreeRTOS实时操作系统(一)RTOS的基本概念 FreeRTOS实时操作系统(二)任务创建与任务删除(HAL库) FreeRTOS实时操作系统(三)任务挂起与恢复 FreeRTOS实时操作系统(四)中断任务管理 FreeRTOS实时操作系统(五)进入临界区、任务调度器挂起与恢复 FreeRTOS实时操作系统(六)列

    2024年02月10日
    浏览(52)
  • STM32中断分组配置NVIC_PriorityGroup,移植操作系统需需注意NVIC_PriorityGroup_4

    一、先说明中断分组的由来 中断优先级分组表: 优先级分组 抢占优先级 响应优先级 bit[7:4] 分配情况 备注 NVIC_PriorityGroup_0 取值:0 取值:0~15 0:4 0bit抢占优先级、4bit响应优先级 NVIC_PriorityGroup_1 取值:0~1 取值:0~7 1:3 1bit抢占优先级、3bit响应优先级 NVIC_PriorityGroup_2 取值:0~3

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包