32freeRTOS
文章平均质量分 73
加油油——1
这个作者很懒,什么都没留下…
展开
-
14.STM32freeRTOS---freeRTOS事件标志组
文章目录前言一、事件标志组简介1· 事件位(事件标志)2· 事件组3· 创建事件标志组4· 设置 事件位5· 获取事件标志组 值6· 等待指定的事件位前言前面学习了使用信号量来完成同步,但是使用信号量只能同步单个事件或任务。有时候某个任务可能会需要多个事件或任务进行同步,此时信号量就显得力气单薄了。所以freeRTOS提供了一个办法-----事件标志组。一、事件标志组简介1· 事件位(事件标志)2· 事件组事件标志组 和 事件位 的数据类型:3· 创建事件标志组4· 设置 事原创 2022-05-15 18:02:51 · 211 阅读 · 0 评论 -
13.STM32freeRTOS---软件定时器
文章目录前言一、软件定时器介绍**关于回调函数的注意事项:**软件定时器的回调函数在定时器服务中执行,所以一定不能在回调函数中调用任何会阻塞任务的API!!!比如,定时器回调函数中绝对不要用 vTaskDelay(),vTaskDelayUntil(),以及一些访问队列或者信号量的非零阻塞时间的API!!二、定时器服务/Daemon 任务1. 定时器服务任务 与 队列2. 定时器相关配置3. 单次定时器 与 周期定时器4. 复位软件定时器5. 创建软件定时器6. 开启软件定时器7. 停止软件定时器8.原创 2022-05-15 11:53:32 · 2140 阅读 · 0 评论 -
12.STM32freeRTOS---递归互斥信号量
文章目录前言一、创建递归互斥信号量二、释放递归互斥信号量三、获取递归互斥信号量四、官方例程总结前言递归互斥信号量可以看成是一个特殊的互斥信号量。对于互斥信号量,获取了互斥信号量的任务就不能再次获取这个互斥信号量,但是递归互斥信号量不一样,就算已经获取了递归互斥信号量的任务可以再次获取这个递归互斥信号量,并且不限次数。一个任务使用xSemaphoreTakeRecursive()成功的获取了多少次递归信号量,那么这个任务也必须释放多少次递归信号量。注意:递归互斥信号量也有优先级继承的机制,所以不能用于原创 2022-05-15 09:02:21 · 360 阅读 · 0 评论 -
11.STM32freeRTOS---互斥信号量 【补充】
文章目录前言一、创建互斥信号量二、获取 与 获取 互斥信号量三、实验总结前言互斥信号量就是为了解决二值信号量的优先级反转的问题。所以,我先简单的说一说互斥信号量的情况。假设有两个任务,任务1和任务2,任务1的优先级是1,任务2 的优先级是2。者两个任务都会操作同一个互斥信号量Mutex,低优先级任务先获取了互斥信号量,此时高优先级任务也要获取互斥信号量,但是发现低优先级任务正在占用互斥信号量,**于是高优先级任务会将低优先级任务的优先级拉高到和自己一样高,**然后等待拉高后的低优先级任务释放互斥信原创 2022-05-14 21:58:43 · 429 阅读 · 0 评论 -
10.STM32freeRTOS---二值信号量的优先级反转 与 互斥信号量
文章目录一、啥是优先级反转二、优先级翻转实验**hight task running!!** (4)最后:解决优先级反转的办法:互斥信号量一、啥是优先级反转先说明:任务H的优先级最高,其次是M,最后是L。(1)任务H和任务M处于阻塞态,等待某一事件的发生,任务L正在执行。(2)某一时刻L想要访问共享资源,在此之前它必须先获得对应资源的信号量。(3)L获得信号量并开始使用共享资源。(4)由于H的优先级最高,它等待的事件发生后级抢占了L的CPU使用权。(5)H开始运行。(6)H运行过程中原创 2022-05-14 17:18:18 · 782 阅读 · 0 评论 -
9.STM32freeRTOS---计数型信号量
文章目录前言一、创建计数型信号量二、释放和获取计数型信号量三、计数型信号量操作实验实验遇到的问题前言计数型信号量又叫数值信号量,二值信号量相当于长度为1的队列,那么计数型信号量就是长度大于1 的队列。同二值信号量一样,用户不需要关心队列中存储了什么数据,只需要关心队列是否为空即可。计数型信号量运用场合:事件计数,资源管理。事件计数:每次事件发生的时候就在事件处理函数中释放信号量(增加信号量的计数值),其他任务会获取信号量(信号量计数值减1,信号量值就是队列结构体成员变量uxMessageWai原创 2022-05-14 15:12:42 · 884 阅读 · 0 评论 -
8.STM32F103freeRTOS---信号量
文章目录前言一、创建二值信号量二、释放信号量三、获取信号量四、二值信号量操作实验总结前言信号量常用于控制对共享资源的访问和任务同步。信号量说的直白一点就是:计数器。比如我们去一个公共电话,我们知道电话的两种状态:使用和未使用状态。如果用电话的两个状态作为信号量的话,那么这个就是二值信号量。信号量用于控制共享资源访问的场景相当于一个上锁机制,代码只有获得了这个锁的钥匙才能够执行。信号量还有一个重要的运用场合就是任务同步,用于任务于任务或中断于任务之间的同步。一、创建二值信号量注意:二原创 2022-05-14 10:02:20 · 677 阅读 · 0 评论 -
7·STM32F103freeRTOS---队列与关于队列的实验
文章目录前言一、什么是队列1、数据存储2、多任务访问3、出队阻塞 与 入队阻塞3、队列操作过程图示二、创建队列1、函数原型(1)动态创建(2)静态创建(3)xQueueGenericCreateStatic三、向队列发送消息以 FromISR结尾的函数都是用于中断服务函数中的真正干活的发送函数:xQueueGenericSend(任务级通用入队函数)和xQueueGenericSendFromISR(中断级通用入队函数)四、队列上锁与解锁五、从队列读取消息前言在实际运用中,会遇到一个任务或者中断服务需原创 2022-05-12 20:52:00 · 857 阅读 · 0 评论 -
6.STM32freeRTOS---动态/静态创建任务与删除
文章目录前言一、动态创建任务与删除二、静态创建任务与删除1.遇到的问题前言本次实验用来熟悉任务创建和删除的API。一、动态创建任务与删除#include "sys.h"#include "usart.h"#include "led.h"#include "delay.h"#include "FreeRTOS.h"#include "task.h"#define start_task_size 52#define start_task_pro 1TaskHandle_t s原创 2022-05-11 15:33:24 · 799 阅读 · 0 评论 -
5·STM32freeRTOS---中断测试实验
//main.c#include "sys.h"#include "usart.h"#include "led.h"#include "timer.h"#include "delay.h"#include "FreeRTOS.h"#include "task.h"#include "queue.h"#define START_TASK_PRIO 1 //任务优先级#define START_STK_SIZE 100 //任务堆栈大小TaskHandl.原创 2022-05-10 20:02:44 · 548 阅读 · 0 评论 -
4.1 对于4.STM32freeRTOS---队列传递DMA搬运的ADC数据 遇到的错误解决笔记
第一个问题:串口打印出 Error:…\FreeRTOS\port\RVDS\ARM_CM3\port.c,204 错误首先,先去定位到port.c 的204行。static void prvTaskExitError( void ){/* A function that implements a task must not exit or attempt to return to* its caller as there is nothing to return to. If a ta原创 2022-05-09 14:10:21 · 1009 阅读 · 0 评论 -
4.STM32freeRTOS----队列传递DMA搬运的ADC数据
说明:这个实验是想熟悉一下freeRTOS,创建两个任务,一个任务来接收DMA搬运ADC转换过来的数据,并且把这个数据写入一个队列;另一个任务就是去队列中把这个数据读出来并且打印到串口。详细:这个实验的思路。我想熟悉一下任务之间的通信—队列的方式,于是想把ADC转换过来的数据放到一个队列中,然后通过读取这个队列就知道转换数据。主函数:首先在主函数中对串口进行初始化,led初始化,adc初始化。然后创建一个开始任务。最后开启任务调度。开始任务函数:开启与关闭临界区。创建一个队列,并且创建两个.原创 2022-05-09 14:10:01 · 2128 阅读 · 7 评论 -
1.freeRTOS---裸机程序的缺陷与RTOS的引入
一、裸机开发模式1·1 轮询方式缺点:函数之间互相影响,假如第一个功能函数运行的时间有点长,那么第二个函数就会被耽误。1·2 事件驱动方式1·2·1 常用事件驱动方式:定时器1·3 改进事件驱动方式二、裸机开发的缺陷的解决方法对于裸机程序开发的缺陷:函数之间互相影响。解决方法:状态机。2·1 什么是状态机?裸机程序在main函数里面就是轮询的方式去执行每一个功能函数,既然想减少函数之间由于函数的执行时间的相互影响,我们只要把每个功能函数执行的时间减少就行了,也就是说把每个功能原创 2022-05-08 13:22:18 · 1392 阅读 · 0 评论 -
3. STM32freeRTOS---vTaskDelay 和 vTaskDelayUntill,空闲与钩子函数,任务调度策略
一、vTaskDelay 和 vTaskDelayUntillvTaskDelay :至少等待指定个数的tick interrupt才能变为就绪态。(所以在等待的时候是阻塞态)vTaskDelayUntill :等待到指定的绝对时刻,才能变为就绪态(所以在等待的时候是阻塞态)。 BaseType_t xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,//开始时间 const Ti原创 2022-05-04 16:57:26 · 1729 阅读 · 0 评论 -
2.stm32freeRTOS---创建一个任务
文章目录前言一、创建一个任务需要注意哪些?1、任务创建函数xTaskCreate2、代码分析二、动态/静态分配1· 动态分配2· 静态分配:三、删除任务四、一个函数创建两个任务总结前言上一次是初步接触实时系统,这次开始认真学习一、创建一个任务需要注意哪些?1、任务创建函数xTaskCreate BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //任务名 const char * con原创 2022-05-04 11:13:11 · 750 阅读 · 0 评论 -
1.STM32F103freeRTOS---初步接触freeRTOS小实验
文章目录前言1. 先介绍以下freeRTOS2. 先点亮led灯练手2`1 这个点灯实验遇到的问题:只有一个任务执行3· 任务挂起 与 任务恢复 API的使用(小实验)4· 中断服务函数中恢复任务运行4`1 遇到的问题:中断进不了总结前言由于某些原因,让我接触到freeRTOS(实时系统),所以,就记录下,实时系统与stm32普遍在 while(1)里面轮询的 不同之处,以及在学习过程中遇到的bug。1. 先介绍以下freeRTOSfree :就是免费RTOS:real time原创 2022-04-19 22:28:23 · 1450 阅读 · 1 评论