![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FreeRTOS
文章平均质量分 82
汘荨
一只在校萌新,喜欢嵌入式软件开发,博客用来记录学习笔记。
展开
-
FreeRTOS学习笔记-基于stm32(14)内存管理
FreeRTOS有两种方法来创建任务,队列,信号量等,一种动态一种静态。静态方法需要手动定义任务堆栈。使用动态内存管理的时候 FreeRTOS 内核在创建任务、队列、信号量的时候会动态的申请 RAM。我们在移植FreeRTOS时可以看到在 FreeRTOS 源码中有 heap_1.c、heap_2.c、heap_3.c、heap_4.c 和 heap_5.c 五种内存分配方法,我们当时移植的是 heap_4.c。标准 C 库中的和也可以实现动态内存管理,但不是线程安全的,且执行时间不确定,效率低下等等。原创 2024-06-12 05:00:00 · 406 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(13)低功耗 Tickless 模式
STM32 本身就支持低功耗模式,如图有三种模式:睡眠(Sleep)模式;停止(Stop)模式;待机(Standby)模式。原创 2024-06-12 04:00:00 · 458 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(12)软件定时器
软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能,执行功能的函数称为。相比于硬件定时器,软件定时器精度能差点(因为优先级低容易被打断)但是却不像硬件定时器那样资源有限。软件定时器的回调函数是在中执行的,所以不能在回调函数中调用任何会阻塞任务的 API 函数!比如 vTaskDelay()、 vTaskDelayUnti(),还有一些访问队列或者信号量的非零阻塞时间的 API 函数也不能调用。原创 2024-06-11 20:45:44 · 1200 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(11)任务通知及相关API函数简介
任务通知与队列,信号量,事件标志组类似,也是一种用于任务通信和同步的机制。原创 2024-06-11 11:19:21 · 786 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(10)事件标志组
事件位用来表明某个事件是否发生,事件位通常用作事件标志,就类似标志位。原创 2024-06-05 22:46:50 · 1045 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(9)信号量总结(二值信号量、计数型信号量、互斥信号量、优先级翻转、优先级继承)
信号量是一种队列,用于任务间同步和资源管理的机制,主要用来传递状态。就像是一种特殊的“旗子”或“钥匙”,用来在不同的任务之间进行沟通和协调,确保它们能够正确地配合工作,不会互相干扰。原创 2024-06-05 11:37:53 · 935 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(8)消息队列
队列是不同任务、中断中数据传递的一种机制,又称消息队列。就类似于全局变量,将数据传输到不同的任务中。但全局变量没有写保护,容易造成数据受损。而。队列类似于数组,可以存储数量有限,大小固定的数据。队列中的每个数据叫做队列项目,能存储最大队列项目的数量交队列的长度。原创 2024-06-04 12:46:12 · 558 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(7)任务状态查询与任务时间统计API函数
定时器使用stm32的内部定时器3,在 ConfigureTimeForRunTimeStats() 中初始化定时器并配置为每10us中断一次,然后在中断服务函数中将 FreeRTOSRunTimeTicks++,从而达到计时的目的。portCONFIGURE_TIMER_FOdR_RUN_TIME_STATS() 用来初始化用于配置任务运行时间统计的时基定时器,然后查看函数的使用条件,比如这个函数要使用的话必须将宏 INCLUDE_uxTaskPriorityGet 置1;3、在将1完成后需要实现。原创 2024-05-29 14:25:05 · 845 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(6)时间片调度实验
在任务优先级相同的时候,CPU会轮流使用相同的时间去执行它,即时间片调度。这个相同的时间就是。而时间片的大小就是SysTick的中断周期(SysTick的中断周期可以修改)。比如有三个相同优先级的任务在运行,时间片大小为10ms。那么CPU前10ms执行task1,然后用10ms执行task2,再花10ms执行task3,再回到task1执行10ms,这样的轮流执行被称之为时间片流转。如果期间有一个任务执行到一半被挂载了,那么CPU就会立马抛弃这个任务执行下一个任务。原创 2024-05-08 22:43:00 · 385 阅读 · 1 评论 -
FreeRTOS学习笔记-基于stm32(5)列表和列表项
列表是FreeRTOS中的一种数据结构,类似双向循环链表。用来跟踪FreeRTOS中的任务。列表项就是存放在列表中的项目。原创 2024-03-12 23:37:34 · 1012 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(4)临界段代码保护与任务调度器的挂起和恢复
临界段代码指的是那些不能被打断的代码,例如 IIC,SPI 等对时序有着严格的控制的代码。挂起任务调度器之后,任务不能被调度但是中断可以正常运行。一般适用于临界区位于任务与任务之间。既不用延时中断又可以做到临界区的相对安全原创 2024-03-11 16:17:06 · 497 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(3)中断管理
FreeRTOS 中,通过 BASEPRI 寄存器,屏蔽优先级低于某一阈值的中断。BASEPRI 寄存器设置为0x50,表示中断优先级在5~15内的均被屏蔽,0~4的正常执行。(因为中断寄存器使用的是8位寄存器的高4位)也就是关闭FreeRTOS的中断 。原创 2024-03-08 15:22:29 · 1147 阅读 · 0 评论 -
FreeRTOS学习笔记-基于stm32(2)任务的创建与删除,挂起与恢复
首先进行强制类型转换,避免警告(就是给定义的参数类型带上括号)任务函数:就指向任务函数的指针,我此处的任务函数是 void start_task( void * pvParameters ),所以任务函数就是 start_task;任务名称:一般与任务函数一致;任务堆栈大小:通过 #define TASK1_STACK_SIZE 128 宏定义,将堆栈设置为128字,即128*4字节;传递给任务函数的参数:无,即NULL;原创 2024-03-07 17:53:11 · 1198 阅读 · 0 评论 -
..\OBJ\LED.axf: Error: L6218E: Undefined symbol xTaskGetSchedulerState (referred from delay.o)
在查看相关例程后,发现 FreeRTOSConfig.h 文件移植错误,只要将 FreeRTOSConfig.h 文件改为如下代码即可。这是 FreeRTOSConfig.h 文件所在地方。原创 2024-03-05 21:01:12 · 528 阅读 · 0 评论 -
STM32F103-基于正点原子的 FreeRTOS 移植(完整教程)附测试代码
在看正点原子的移植的时候,发现开发手册的描述并不全面,有几处遗漏。下面我展示出完整的教程,希望大家在学习的时候能够轻松点。原创 2024-03-04 17:25:15 · 2823 阅读 · 9 评论 -
FreeRTOS学习笔记-基于stm32(1)任务基础知识
我们使用的32板子是,又称。裸机有如下缺点:1、实时性差。只能一步一步执行任务,比如在一个while循环中,要想执行上一个任务,就必须把下面的任务执行完,循环一遍后才能执行这个任务;2、浪费资源。在程序delay延时的时候会进入空等待,此时CPU不执行其他代码;3、结构臃肿。实现的功能都放在无限循环中。但就可以解决这些问题。RTOS有以下特点:1、分而治之。实现的功能可以划分为多个任务;2、任务调度。在延时函数时,不会进入空等待,而是让CPU执行其他任务;3、抢占式。原创 2024-03-02 17:48:06 · 661 阅读 · 0 评论