
FREERTOS学习笔记
文章平均质量分 55
ViTO_2001
这个作者很懒,什么都没留下…
展开
-
FreeRTOS内核小结
关于FreeRTOS内核的一些小结,包括调度方式、信号量、互斥信号量、消息队列、事件组以及任务通知。原创 2022-07-07 16:35:54 · 435 阅读 · 1 评论 -
FreeRTOS内部机制学习笔记三——互斥的引入
FreeRTOS内部机制学习笔记三——互斥的引入在多任务系统中,如果有两个或者多个任务需要使用同一个变量,那么会出现一些数据错误。 比如任务A和任务B都需要实现对某个全局变量的自加,而变量自加需要三个过程:①从内存读取数据②对数据进行自加一③向内存写入数据。如果任务A在执行完过程①后被切换带任务B,任务B会对变量值进行修改,当时间片再次分配给任务A时,任务A会继续执行上次中断在过程①的任务,当执行完过程③之后,将数据写入内存中,这时上次任务B对全局变量的数据操作将不会起作用,因为被这次操作将上次任务B原创 2022-03-23 11:22:47 · 667 阅读 · 0 评论 -
FreeRTOS内部机制学习笔记二——任务调度机制
FreeRTOS内部机制学习笔记二——任务调度机制2.1FreeRTOS任务的创建以下是FreeRTOS创建任务线程的程序/* Create the thread(s) *//* definition and creation of LED_RED_Task */osThreadDef(LED_RED_Task, StartLED_RED_Task, osPriorityNormal, 0, 128);LED_RED_TaskHandle = osThreadCreate(osThread(LE原创 2022-03-23 11:11:20 · 1510 阅读 · 0 评论 -
FreeRTOS内部机制学习笔记一——ARM架构的三种场景的现场保存
FreeRTOS内部机制学习笔记一——ARM架构的三种场景的现场保存1.1任务切换CPU中所有寄存器都需要压入到栈中例如在执行任务A的时候被任务B打断,那么任务A被打断处的CPU寄存器状态都会被压入栈中,等切换到任务A时,存在栈的值会出栈到CPU寄存器,继续执行指令。1.2硬件中断硬件会保存CPU部分寄存器的值;软件上需要保存中断会破坏的寄存器的值。1.3调用子函数例如:void A_Fun(){ ........... B_Fun(&a,&b,....);原创 2022-03-23 10:52:55 · 391 阅读 · 0 评论 -
FREERTOS学习笔记十-内存管理
FREERTOS学习笔记十-内存管理1.FreeRTOS内存管理方式1.1 heap_1.c中的内存分配 动态内存分配需要一个内存堆,FreeRTOS中的内存堆为ucHeap[],大小为configTOTAL_HEAP_SIZE。不管是哪种内存分配方法,它们的内存堆都为ucHeap[],而且大小都是configTOTAL_HEAP_SIZE。特点:①适用于那些一旦创建好任务、信号量和队列就再也不会删除的应用,实际上大多数的FreeRTOS应用都是这样的。②具有可确定性(执行所花费的时间大多原创 2022-02-03 15:09:10 · 1151 阅读 · 0 评论 -
FREERTOS学习笔记九-邮件
FREERTOS学习笔记九-邮件1.实验内容 邮件和消息队列类似,不过邮箱可以发送更多类型的数据,如结构体。 本次实验是在实验三的基础上进行修改,其中任务三负责检测按键并发送结构体,任务四负责接收邮件。2.CubeMX的配置 FREERTOS已经有相关的封装函数,无需增加配置。3.程序编写3.1定义测试结构体/* Private typedef -----------------------------------------------------------*//* USE原创 2022-02-03 15:07:11 · 1995 阅读 · 0 评论 -
FREERTOS学习笔记八-任务通知
FREERTOS学习笔记八-任务通知1.实验内容 本次实验内容是在实验三工程的基础进行修改,其中任务三和任务四分别监听KEY0和KEY1按键的按下,当按键按下后会给任务二发送标志位。2.CubeMX的配置2.1打开任务通知3.程序编写3.1定义标志位/* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD */#define BIT_1 (原创 2022-02-03 15:05:39 · 1102 阅读 · 0 评论 -
FREERTOS学习笔记七-定时器
FREERTOS学习笔记七-定时器1.实验内容 本次实验内容是在实验三的基础上增加定时器功能,并在定时器的回调函数中进行串口打印。2.CubeMX的配置2.1使能定时器并配置定时器中断优先级、队列消息长度和深度。2.2添加定时器 添加定时器,可以设置定时器的名称和回调函数的名称,同时可以选择单次定时还是周期定时。3.程序编写3.1启动定时器 /* USER CODE BEGIN RTOS_TIMERS */ /* start timers, add new ones,原创 2022-02-03 15:02:49 · 2268 阅读 · 0 评论 -
FREERTOS学习笔记六-事件组
FREERTOS学习笔记六-事件组1.实验内容1.1介绍 事件“标志”是布尔值(1或0),用于指示事件是否发生。事件“组”是一组事件标志。 事件标志只能为1或0,从而允许将事件标志的状态存储在单个位中,而将事件组中所有事件标志的状态存储在单个变量中;事件组中每个事件标志的状态由EventBits_t类型的变量中的一位表示。因此,事件标志也称为事件“位”。如果将EventBits_t变量中的某个位设置为1,则发生了该位表示的事件。如果将EventBits_t变量中的某个位设置为0,则该位表示的事件原创 2022-02-03 14:59:51 · 808 阅读 · 0 评论 -
FREERTOS学习笔记五-互斥锁
学习笔记五-互斥锁1.实验内容 互斥锁即优先级继承,其作用就是在H、L两个任务同时需要唯一资源时,且任务L需要先得到了使用权,这时需要提高L的优先级,让L尽快干完活,好让H用,避免因任务M打断任务L而导致任务L占用资源的时间过长。 而递归互斥锁是可以在一个任务线程内使用。 本次实验是在实验三的基础上进行修改,其中将按键任务的优先级更改为三者中的H;将任务三的优先级更改为三者中的M;将任务四的优先级更改为三者中的L。2.CubeMX的配置2.1添加互斥锁2.2使能递归互斥锁2.原创 2022-02-03 14:55:36 · 2665 阅读 · 0 评论 -
FREERTOS学习笔记四-信号量
FREERTOS学习笔记四-信号量1.实验内容 FREERTOS中信号量有二值信号量和计数信号量,其中二值信号量的剩余信号量只有0和1;而计数信号量的信号剩余量可以自行设定。本次实验是在实验三的基础上进行修改,将任务三和任务四分别更改为通过按键实现释放信号(信号量会加一),和获得信号(信号量会减一)。2.CubeMX配置2.1添加二进制信号量2.2在任务传入参数中添加信号名3.函数编写3.1任务3程序/* USER CODE END Header_StartTask03 */vo原创 2022-02-03 14:50:04 · 1984 阅读 · 0 评论 -
FREERTOS学习笔记三-消息队列
FREERTOS学习笔记三-消息队列1.实验内容 实验二内容:创建两个动态任务,任务一控制LED的闪烁,任务二用于检测按键。当按键KEY0按下时,任务一被挂起;当按键KEY1被按下时,任务一被取消挂起。 实验三是在实验二的基础上进行修改,增加一个消息队列和两个任务进程;任务二按键检测,当按键被按下时,会发生消息;任务三和任务四负责接收消息。2.CubeMX的配置1.1添加两个优先级相同的任务1.2添加消息队列消息大小为16,消息格式为无符号的16位1.3添加调试串口2.程序编原创 2022-02-03 14:43:53 · 1935 阅读 · 0 评论 -
FREERTOS学习笔记二-任务的挂起与取消挂起
FREERTOS学习笔记二-任务的挂起与取消挂起1.实验内容 创建两个动态任务,任务一控制LED的闪烁,任务二用于检测按键。当按键KEY0按下时,任务一被挂起;当按键KEY1被按下时,任务一被取消挂起。2.CubeMX的配置2.1选择调试模式2.2使能高速时钟2.3设置基准时钟源2.4配置LED2.5配置按键KEYO与KEY12.6创建两个动态任务2.7设置时钟3.程序编写3.1LED任务void StartLED_RED_Task(void const * ar原创 2022-02-03 14:31:25 · 2384 阅读 · 0 评论 -
FREERTOS学习笔记一-跑马灯
FREERTOS学习笔记一-跑马灯 本次实验是根据开发板原理图控制两灯的闪烁。1.CubeMX配置1.1配置基准时钟源1.2使能FREERTOS1.3更改默认任务1.4点击ADD创建新的任务2.程序编写2.1编写任务内容3.程序运行正常4.更换更精准延时4.1函数更改void StartLED_RED_Task(void const * argument){ /* USER CODE BEGIN StartLED_RED_Task */ /* Infin原创 2022-02-03 14:25:33 · 1783 阅读 · 0 评论