
FreeRTOS
文章平均质量分 85
FreeRTOS
kunkliu
good good study
展开
-
FreeRTOS高级篇 FreeRTOS基础篇
https://blog.youkuaiyun.com/zhzht19861011/category_9265965.html?spm=1001.2014.3001.5482https://blog.youkuaiyun.com/zhzht19861011/category_9265276.html?spm=1001.2014.3001.5482转载 2022-07-26 16:01:01 · 328 阅读 · 0 评论 -
vTaskSwitchContext
在FreeRTOS任务管理中,最主要的目的就是找到就绪态优先级最高的任务,然后执行任务切换,从而能保持优先级最高的任务一直占用CPU资源。使用此方法,uxTopReadyPriority每个bit位表示一个优先级,bit0表示优先级0,bit31表示优先级31,使用此方式优先级最大只能是32个。知道最高优先级的优先级,则通过listGET_OWNER_OF_NEXT_ENTRY()对应最高优先级的列表项,将pxCurrentTCB指向对应的控制块。特殊方式是使用了某些硬件的特性,只针对部分MCU而使用。..转载 2022-07-22 18:36:48 · 2216 阅读 · 1 评论 -
Mastering the FreeRTOS Real Time Kernel-A Hands-On Tutorial Guide 掌握FreeRTOS™ 实时内核 中文版
Mastering the FreeRTOS Real Time Kernel-A Hands-On Tutorial Guide 掌握FreeRTOS™ 实时内核 中文版转载 2022-07-22 14:12:10 · 1457 阅读 · 0 评论 -
K210 FreeRTOS SDK启动分析
main_thunk任务内部执行了一些系统初始化操作(hal/drivers/fpioa),然后执行user_main函数,这个函数就是os_entry函数的入参,我们继续跟踪,发现lib/bsp/entry_user.c这个里面的_init_bsp调用了os_entry(main),此处的main即src/hello_world/main.c里面main函数,另外通过汇编代码跟踪,我们发现lib/bsp/crt.S这个里面调用了_init_bsp。针对以上疑问,我们做了这样一个尝试。...转载 2022-07-20 14:01:53 · 708 阅读 · 0 评论 -
FreeRTOS系列|内存管理二
内存管理应用实例 本实例介绍FreeRTOS内存管理中heap_4方法的内存申请和释放函数的使用,并观察申请和释放过程中内存大小的变化情况 使用STM32CubeMX将FreeRTOS移植到工程中,创建一个任务,分别使用按键控制内存的申请、释放、使用和查询剩余空闲堆空间 Malloc_Task:用于完成内存的申请、释放、使用以及查询剩余空闲堆空间功能 1. STM32CubeMX设置 RCC设置外接HSE,时钟设置为72MPA0设置为GPIO输入模式、下拉模式;PE2/PE3/PE4设置转载 2022-05-31 20:02:01 · 322 阅读 · 0 评论 -
FreeRTOS系列|内存管理一
内存管理是一个系统基本组成部分,FreeRTOS中大量使用了内存管理,比如创建任务、信号量、队列等会自动从堆中申请内存。用户应用层代码也可以使用FreeRTOS提供的内存管理函数来申请和释放内存 1. 内存管理简介 FreeRTOS创建任务、信号量、队列等的时候有两种内存申请的方法:一种是动态的申请所需的RAM;一种是由用户自行定义所需的RAM(静态申请) 两者的区别动态内存静态内存时间不同发生在程序调入和执行的时候发生在程序编译和连接的时候空间不同堆只能动态分配;栈可以动态分配;动态分配由函数mal转载 2022-05-31 20:01:29 · 1304 阅读 · 0 评论 -
FreeRTOS系列|软件定时器
MCU一般都自带定时器,属于硬件定时器,但是不同的MCU其硬件定时器数量不同,有时需要考虑成本的问题。在硬件定时器不够用的时候,FreeRTOS也提供了定时器功能,不过是属于软件定时器,其定时精度没有硬件定时器高,但是对于精度要求不高的周期性任务也足够了 1. 软件定时器介绍 软件定时器允许设置一段时间,当设置的时间到达之后就会执行回调函数。软件定时器的回调函数是在定时器服务任务中执行的,因此不能在回调函数中调用会阻塞任务的API函数 定时器是一个可选的、不属于FreeRTOS内核的功能,是由定时器服转载 2022-05-25 09:36:17 · 1166 阅读 · 0 评论 -
FreeRTOS系列|事件标志组
事件标志组1. 事件标志组介绍 信号量只能实现任务与单个事件或任务间的同步。但是某些任务可能会需要与多个事件或任务进行同步,此时就可以使用事件标志组来解决。事件标志组能够实现某个任务与多个事件或任务间的同步 事件位:用来表明某个事件是否发生,通常用作事件标志事件组:一组事件位组成一个事件组,事件组中的事件位通过编号来访问 事件标志组的数据类型为 EventGroupHandle_t,事件标志组中的所有事件位都存储在一个无符号的 EventBits_t 类型的变量中;该变量为16位数据类型时,事转载 2022-05-25 09:36:03 · 598 阅读 · 0 评论 -
FreeRTOS系列|递归互斥信号量
递归互斥信号量1. 递归互斥信号量 递归互斥信号量是一种特殊的互斥信号量,已经获取了互斥信号量的任务不能再次获取这个互斥信号量,但是递归互斥信号量不同;已经获取了递归互斥信号量的任务可以再次获取这个递归互斥信号量(即可以嵌套使用),且次数不限。 递归互斥信号量也有优先级继承的问题。一个任务获取了多少次递归互斥信号量就必须释放多少次。比如,若某个任务成功获取了3次递归互斥量,那么该任务也需要同样释放3次递归信号量。同互斥信号量一样,递归互斥信号量不能用在中断服务函数中 2. 递归互斥信号量的API函数转载 2022-05-25 09:35:50 · 818 阅读 · 0 评论 -
FreeRTOS系列|互斥信号量
互斥信号量1. 优先级翻转 优先级翻转是使用二值信号量时常遇见的问题,在可剥夺内核中非常常见,但是在实时系统中不允许出现这种现象,因为会破坏任务的预期顺序,可能会导致严重后果。 如下图所示的优先级翻转的例子: 低优先级任务L要访问共享资源,在获取到信号量使用CPU的过程中,如果此时高优先级任务H到达,会剥夺L的CPU使用权从而运行任务H当H想要访问共享资源时,由于此时该资源的信号量仍被L占用着,H只能挂起等待L释放该信号量L继续运行,此时中优先级任务M到达,再次剥夺L的CPU使用权从而运行任务转载 2022-05-25 09:35:23 · 1519 阅读 · 0 评论 -
FreeRTOS系列|计数信号量
1. 计数信号量简介 计数型信号量有以下两种典型用法 事件计数:每次事件发生,事件处理函数将释放信号量(信号量计数值加1),其他处理任务会获取信号量(信号量计数值减1)来处理事件。因此,计数值是事件发生的数量和事件处理的数量差值。计数信号量在创建时其值为0资源管理:信号量表示有效的资源数目。任务必须先获取信号量才能获取资源控制权。当计数值减为零时表示没有的资源。当任务完成后,它会返还信号量(信号量计数值增加)。信号量创建时计数值应等于最大资源数目 计数信号量有释放信号量操作和获取信号量操作,释放信号量转载 2022-05-25 09:35:08 · 1183 阅读 · 0 评论 -
FreeRTOS系列|二值信号量
1. 信号量简介 信号量一般用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。 :root { --mermaid-font-family: “trebuchet ms”, verdana, arial;}转载 2022-05-25 09:34:53 · 1722 阅读 · 0 评论 -
FreeRTOS系列|消息队列二
本文主要介绍如何在任务或中断中向队列发送消息或者从队列中接收消息。 使用STM32CubeMX将FreeRTOS移植到工程中,创建两个任务以及两个消息队列,并开启两个中断 两个任务 Keyscan_Task:读取按键的键值,并将键值发送到队列Key_Queue中Keyprocess_Task:按键处理任务,读取队列Key_Queue中的消息,并根据不同的消息值做相应的处理 两个队列 Msg_Queue:用于传递串口发送过来的消息Key_Queue:用于传递按键值 两转载 2022-05-25 09:34:11 · 954 阅读 · 0 评论 -
FreeRTOS系列|消息队列一
1. 消息队列简介 消息队列可以在任务与任务、任务与中断之间传递消息,队列可以保存有限个具有确定长度的数据单元。队列可保存的最大单元数目被称为队列的长度,在队列创建时需要指定其长度和每个单元(队列项或消息)的大小。通常情况下,队列被作为FIFO(先进先出)使用,即数据由队尾写入,从队首读出。当然由队列首写入也是可能的 队列有如下特性: 数据存储:往队列写入数据是通过字节拷贝把数据复制存储到队列中;从队列读出数据使得把队列中的数据拷贝删除可被多任务存取:队列不是属于某个特别指定的任务的,任何任务都可以转载 2022-05-25 09:33:57 · 438 阅读 · 1 评论 -
FreeRTOS系列|列表和列表项
列表和列表项是FreeRTOS的一个数据结构,FreeRTOS大量使用到了列表和列表项,它是FreeRTOS的基石 1. 列表和列表项的定义 1.1 列表 列表是FreeRTOS中的一个数据结构,与链表类似,列表被用来跟踪FreeRTOS中的任务。其结构体 List_t 在 list.h 文件中被定义 typedef struct xLIST{ /* 列表内有效列表项个数 */ configLIST_VOLATILE UBaseType_t uxNumberOfItems; /* 记录当前列转载 2022-05-25 09:33:42 · 899 阅读 · 0 评论 -
FreeRTOS系列|任务相关API函数
任务相关API函数1. 任务相关API函数 FreeRTOS中有很多与任务相关的API函数,大多数是辅助函数。下表是这些与任务相关的API函数功能和描述简介 函数名功能描述uxTaskPriorityGet()查询某个任务的优先级vTaskPrioritySet()改变某个任务的优先级uxTaskGetSystemState()获取系统中任务状态vTaskGetInfo()获取某个任务信息xTaskGetApplicationTaskTag()获取某个任务的标签值xTaskGetCurrentTask转载 2022-05-25 09:33:22 · 842 阅读 · 0 评论 -
FreeRTOS系列|处理器利用率
处理器利用率1. 处理器利用率统计的作用 处理器利用率其实就是系统运行的程序占用的CPU资源,表示机器在某段时间程序运行的情况,如果这段时间中,程序一直在占用CPU的使用权,那么可以认为CPU的利用率是100%;CPU的利用率越高,说明机器在这个时间上运行了很多程序,反之较少。利用率的高低与CPU强弱有直接关系。比如同一段程序,如果在运算速度很慢的CPU上运行,它可能要1000ms,而在运算速度很快的CPU上运行可能只需要10ms,那么在1000ms这段时间中,前者的处理器利用率就是100%,而后者只有转载 2022-05-24 14:09:40 · 962 阅读 · 0 评论 -
FreeRTOS系列|任务堆栈
任务堆栈运行freertos系统的大部分都是资源有限的MCU,所以对于RAM我们都要考虑尽量的节省,避免资源浪费。下面将会基于Cortex-M3内核的STM32F103型MCU来介绍FreeRTOS任务栈大小的确定方法以及栈溢出检测方法 1. 任务堆栈大小 需要用到堆栈的地方: 函数嵌套:函数局部变量、函数形参、函数返回地址、函数内部状态值任务切换:任务切换时所有的寄存器都需要入栈中断:M3内核MCU有8个寄存器是自动入栈的(任务栈),进入中断以后其余寄存器入栈以及可能发生的中断嵌套都是用的系统栈转载 2022-05-24 14:00:05 · 2795 阅读 · 0 评论 -
FreeRTOS系列|中断管理和临界段
1. 中断管理 1.1 中断管理简介 中断是微控制器的一个常见特性,中断由硬件产生,当中断产生后CPU就会中断当前的流程转而去处理中断服务,Cortex-M内核的MCU提供了一个用于中断管理的嵌套向量中断控制器(NVIC) 当多个中断来临时处理器应该享有哪一个中断是由中断的优先级来决定的,高优先级的中断(优先级编号小)首先得到响应,而高优先级的中断可以抢占低优先级的中断,即中断嵌套。Cortex-M处理器的有些中断是具有固定的优先级的,比如复位、NMI、HardFault,这些中断的优先级都是负数,优转载 2022-05-24 11:29:35 · 340 阅读 · 0 评论 -
FreeRTOS系列|时间管理
1. FreeRTOS延时函数 在使用FreeRTOS的过程中经常会在一个任务中使用延时函数对该任务延时,当执行延时函数的时候就会进行任务切换,并且此任务就会进入阻塞态,直到延时完成,任务重新进入就绪态 1.1 相对延时函数 相对延时函数vTaskDelay()在文件task.c中定义,功能是使任务进入阻塞态,根据传入的参数延时多少个tick(系统节拍),其函数原型如下: 函数原型:void vTaskDelay(TickType_t xTicksToDelay)传 入 值:xTicksToDel转载 2022-05-24 11:15:13 · 1631 阅读 · 0 评论 -
FreeRTOS系列|多任务调度
1. 多任务启动流程多任务启动流程如下表所示 启动后以下各函数由上至下依次执行含义osKernelStart()启动内核vTaskStartScheduler()启动任务调度器xPortStartScheduler()启动调度器prvStartFirstTask()启动第一个任务SVC调用SVC中断2. 源码分析 启动任务调度器 void vTaskStartScheduler( void ){ BaseType_t xReturn; /* Add the idle task at the转载 2022-05-24 10:59:05 · 821 阅读 · 0 评论 -
FreeRTOS系列|任务挂起和恢复
1. 任务挂起和恢复API函数 vTaskSuspend()函数:将任务置于挂起状态 void vTaskSuspend(TaskHandle_t xTaskToSuspend)参 数:xTaskToSuspend 要挂起的任务的任务句柄返 回 值:无vTaskResume()函数:将任务从挂起状态恢复到就绪态 void vTaskResume(TaskHandle_t xTaskToResume)参 数:xTaskToResume 要恢复的任务的任务句柄返 回 值:无转载 2022-05-24 10:51:00 · 1166 阅读 · 0 评论 -
FreeRTOS系列|任务创建和删除
1. 任务创建和删除API函数xTaskCreate()函数:动态创建一个新的任务,每个任务都需要RAM来保存任务状态(任务控制块+任务栈),此接口采用动态分配内存资源 BaseType_t xTaskCreate(TaskFunction_t pvTaskCode, //任务函数(函数名) const char *const pcName, //任务名称(字符串) unsigned short usStackD转载 2022-05-24 09:27:11 · 604 阅读 · 0 评论 -
FreeRTOS系列|任务基础知识
1. 多任务系统1.1 前后台系统 单片机裸机开发时,一般都是在main函数里面用while(1)做一个大循环来完成所有的处理,循环中调用相应的函数完成所需的处理。有时也需要在中断中完成一些处理。相对于多任务系统而言,这就是单人单任务系统也称作前后台系统,中断服务函数作为前台程序,while(1)作为后台程序,如下图示 1.2 抢占式多任务系统 多任务系统会把一个大问题分而治之,把大问题划分成很多个小问题,逐步的把小问题解决掉,大问题也就随之解决了,这些小问题可以单独的作为一个小任务来处理。多个转载 2022-05-24 09:26:48 · 944 阅读 · 0 评论 -
FreeRTOS系列|开发环境
硬件开发环境FreeRTOS系列所使用的硬件为STM32F103ZET6开发板 2. 软件开发环境 2.1 Keil MDK-ARM软件简介及安装 2.1.1 Keil MDK-ARM简介 Keil MDK,也称MDK-ARM,Realview MDK(Microcontroller Development Kit),目前由三家国内代理商提供技术支持和相关服务。 MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。 MDK-ARM.转载 2022-05-24 09:26:39 · 1017 阅读 · 0 评论 -
FreeRTOS系列|FreeRTOS简介
1. RTOS简介 RTOS全称为 Real Time Operation System,即实时操作系统。RTOS强调的是实时性,又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作,不允许超时;而软实时里对处理过程超时的要求则没有很严格。RTOS的核心就是任务调度 RTOS的多个工作流如下图示: RTOS工作原理如下图示: RTOS通用组件如下图示: RTOS的特点: 更好的事件实时处理机制更高效利用CPU资源通用的任务管理框架 2. FreeRTOS介绍 FreeRTOS是R转载 2022-05-24 09:26:17 · 15004 阅读 · 0 评论 -
可能是最全的FreeRTOS源码分析及应用开发系列
可能是最全的FreeRTOS源码分析及应用开发系列FreeRTOS 是一个可裁剪的小型且免费的 RTOS 系统,尺寸非常小,可运行于微控制器上。其特点包括: – 内核支持抢占式,合作式和时间片调度。 – 提供了一个用于低功耗的 Tickless 模式。 – 系统的组件在创建时可以选择动态或者静态的 RAM。 – FreeRTOS-MPU 支持 Corex-M 系列中的 MPU 单元,如 STM32F429。 – FreeRTOS 系统简单、小巧、易用,通常情况下内核占用 4k-9k 字节的空间。转载 2022-05-23 18:29:27 · 6167 阅读 · 0 评论 -
「FreeRTOS源码解析(二)」任务
一、前言本期文章讲解FreeRTOS实时操作系统源码,主要是源码分析,实操很少。上节讲了FreeRTOS中的链表,本节将FreeRTOS的任务。在裸机系统中,系统的主体就是 main 函数里面顺序执行的无限循环,在循环里面 CPU 按照顺序完成各种事情,遇到中断会先完成中断处理,中断处理完成后再回到原来的任务。在多任务系统中,根据功能的不同,把整个系统分割成一个个独立的且无法返回的函数,这个函数称为任务。在一个裸机系统中,系统在运行的时候,全局变量放在哪里,子函数调用时,局部变量放在哪里,中断发生时,函数返转载 2022-05-23 18:12:17 · 1174 阅读 · 0 评论 -
「FreeRTOS源码解析(一)」链表
一、前言本期文章讲解FreeRTOS实时操作系统源码,主要是源码分析,实操很少。FreeRTOS在嵌入式领域中应用越来越多,在硬件资源有限的情况下,使用FreeRTOS可以做到实时响应时间,实时处理事件。相比传统的轮询系统和前台系统有着不一样的性能。FreeRTOS中存在大量的基础数据结构链表和链表的操作,了解掌握链表有助于实操时可以入手改写代码。链表的节点本来不是用来存储大量的数据,但是可以使用指针挂载很对数据。被挂载的数据结构可以是单个数据、数组、指针数据和自定义的结构体数据类型。链表最大的作用是通过节转载 2022-05-23 18:02:29 · 513 阅读 · 0 评论 -
移植FreeRTOS到STM32F103全过程
熟悉freeRTOS的firmware结构 解压源码到..\FreeRTOSv8.2.2,首先一定要浏览一下各个文件夹下的readme.txt文件。进到这个目录:FreeRTOSv8.2.2\FreeRTOS\Source 看看这个readme文件: Each real time kernel port consists of three files that contain the cor.转载 2022-05-23 17:23:58 · 436 阅读 · 0 评论 -
FreeRTOS快速入门-初探FreeRTOS
首发,公众号【一起学嵌入式】 对于 RTOS 入门系列文章,已经更新完一款(RT-Thread): 助你快速入门 RT-Thread 这个系列的文章结合 RT-Thread,介绍过 RTOS 相关的核心知识。 接下来,开始另外一款 RTOS – FreeRTOS 入门系列,希望能够帮助初学者快速掌握 FreeRTOS,帮助老手回顾基础内容。 一起学习、一起进步。加油~ FreeRTOS简介 先来看看官网介绍,官方网址 https://freertos.org/1 Free.转载 2022-05-23 17:10:53 · 2276 阅读 · 0 评论 -
TC397A移植FreeRTOS
Free RTOS移植到Infineon第二代Tricore处理器。主要完成三个工作:一、文件框架搭建;二、硬件移植文件修改;三、操作系统配置。 一、文件框架搭建 源文件必选: FreeRTOS/Source/tasks.cFreeRTOS/Source/queue.cFreeRTOS/Source/list.cFreeRTOS/Source/portable/[compiler]/[arc...转载 2022-05-23 16:33:43 · 1119 阅读 · 0 评论 -
【FreeRTOS】源文件下载及概述
目录: 地址下载文件目录介绍documentsFreeRTOSFreeRTOS-Plus 源代码简介include文件夹portable文件夹croutine.cevent_groups.clist.cqueue.cstream_buffer.ctask.ctimer.c 总结 地址下载 FreeRTOS官网 下载下来的根文件目录是这样的: 文件目录介绍 documents FreeRTOS_Reference_Manual_V10.0.0.pdf里面大部分是RTOS的.转载 2022-05-19 14:22:05 · 687 阅读 · 0 评论 -
FreeRTOS简介
初识FreeRTOS 1.什么是FreeRTOS? Free 即免费的,RTOS 全称是 Real Time Operating System,中文就是实时操作系统。注意,RTOS 不是指某一个确定的系统,而是指一类系统。比如 uC/OS,FreeRTOS,RTX,RT-Thread 等这些都是 RTOS 类操作系统。操作系统允许多个任务同时运行,这个叫做多任务。实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运...转载 2022-01-10 13:46:41 · 12795 阅读 · 4 评论