![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
FreeRTOS
文章平均质量分 63
FreeRTOS
lljss2020
这个作者很懒,什么都没留下…
展开
-
taskENTER_CRITICAL()分析
taskENTER_CRITICAL_FROM_ISR()和 taskEXIT_CRITICAL_FROM_ISR()中断级别临 界 段 代 码 保 护 , 是 用 在 中 断 服 务 程 序 中 的 , 而 且 这 个 中 断 的 优 先 级 一 定 要 低 于configMAX_SYSCALL_INTERRUPT_PRIORITY!举例,中断优先级为7的uart接收中断,可以使用taskENTER_CRITICAL_FROM_ISR()和 taskEXIT_CRITICAL_FROM_ISR()。原创 2024-05-31 14:20:43 · 585 阅读 · 0 评论 -
FreeRTOS使用时STM32外设优先级设置
1. 在使用FreeRTOS的情况下,如果需在该外设中断服务程序中,发送FreeRTOS的API函数,则外设的优先级必须>=5,即优先级不大于5,STM32中优先级值越小优先级越高。下图中TIM2、USART1中断中可以发送API函数,来切换任务。HAL_StatusTypeDef HAL_Init(void){ /* Configure Flash prefetch */#if (PREFETCH_ENABLE != 0)#if defined(STM32F101x6) || defi原创 2020-11-04 21:51:16 · 1877 阅读 · 1 评论 -
FreeRTOS任务执行时间统计串口输出显示
1. 开启一个50us定时器(假设FreeRTOS 1ms中断一次)打开中断中断优先级为1,比较高2. 实际代码//FreeRTOSConfig.h#define configUSE_STATS_FORMATTING_FUNCTIONS 1#define configGENERATE_RUN_TIME_STATS 1#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() ConfigureTimeForRunTimeStats()原创 2020-11-03 21:00:47 · 469 阅读 · 0 评论 -
FreeRTOS 堆栈太小导致HardFault,实际测试该设置多大
例如某个任务的堆栈太小,刚运行时,可能刚刚够用,但是随着程序运行,堆栈击穿,导致程序运行出错,debug时可发现可能某些任务不运行了,或者运行到一个函数,直接hardfault,但在函数中的位置不一定每次都一样。1. 使用STM32CubeIDE中自动生成的heap大小为15360字。这个大小是否合适,我们实际来测试下。2. 理论知识FreeRTOS提供了5种内存管理实现,有简单也有复杂的,可以应用于绝大多数场合。它们位于下载包目录…\FreeRTOS\Source\portable\MemMang原创 2020-11-03 20:52:24 · 2687 阅读 · 0 评论 -
FreeRTOS在串口发送(查询方式发送)任务执行中,高优先级任务切换导致串口数据停顿
FreeRTOS在串口发送任务运行中(串口采用查询方式发送数据),高优先级任务(例如定时AD采样任务)切换执行,这样串口数据会出现停顿,停顿时间视高优先级任务的执行时间而定。下图中红框中一帧串口数据出现了停顿。...原创 2020-10-31 16:52:35 · 1161 阅读 · 1 评论 -
FreeRTOS优先级详解
1. STM32Cube中中断优先级分布HAL_StatusTypeDef HAL_Init(void){ /* Configure Flash prefetch */#if (PREFETCH_ENABLE != 0)#if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || \ defined(STM32F102x6) || defined(S原创 2020-08-29 19:49:49 · 2743 阅读 · 0 评论 -
FreeRTOS创建任务分析
xTaskCreate申请任务堆栈内存,保存到pxNewTCB->pxStack申请任务控制块内存prvInitialiseNewTask初始化任务prvAddNewTaskToReadyList添加新创建任务到就绪列表中prvInitialiseNewTask初始化堆栈内容都为0xA5(条件编译)获取栈顶,保存在pxTopOfStack pxTopOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 )原创 2020-08-25 21:46:04 · 261 阅读 · 0 评论 -
..MiddlewaresThird_PartyFreeRTOSSourceportableRVDSARM_CM4Fport.c(483) error A1586E Bad operand types
编译FreeRTOS程序,出现错误…\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c(483): error: A1586E: Bad operand types (UnDefOT, Constant) for operator (Stm32f407xx.h修改:#define __NVIC_PRIO_BITS 4U /*!< STM32F4XX uses 4 Bits f原创 2020-06-07 20:50:52 · 2927 阅读 · 0 评论 -
FreeRTOS实验一:portYIELD_FROM_ISR()任务切换的时机分析
分析下portYIELD_FROM_ISR()任务切换的时机。void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ BaseType_t ret; BaseType_t pxHigherPriorityTaskWoken; if(huart->Instance==USART6) { //加上自己的代码 if(BinarySemaphore != NULL) { ret = xSem原创 2020-05-23 13:58:36 · 15282 阅读 · 0 评论 -
FreeRTOS软件定时器
#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "timers.h"#include "os_start.h"#define START_TASK_PRIO 1#define START_STK_SIZE 128 TaskHandle_t StartTask_Handler;void sta...原创 2020-08-14 23:54:39 · 815 阅读 · 0 评论 -
FreeRTOS事件标志组
#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "timers.h"#include "limits.h"#include "os_start.h"#include "event_groups.h"#define START_TASK_PRIO 1#define START_STK_SIZE ...原创 2020-08-14 23:55:11 · 699 阅读 · 0 评论 -
FreeRTOS互斥信号量
#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "semphr.h"#include "os_start.h"#define START_TASK_PRIO 1#define START_STK_SIZE 128 TaskHandle_t StartTask_Handler;void st...原创 2020-08-14 23:55:32 · 776 阅读 · 0 评论 -
FreeRTOS消息邮箱
#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "os_start.h"#define START_TASK_PRIO 1#define START_STK_SIZE 128 TaskHandle_t StartTask_Handler;void start_task(void *pvPara...原创 2020-08-14 23:55:51 · 2379 阅读 · 0 评论 -
FreeRTOS计数型值信号量
#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "semphr.h"#include "os_start.h"#define START_TASK_PRIO 1#define START_STK_SIZE 128 TaskHandle_t StartTask_Handler;void sta...原创 2020-08-15 13:49:22 · 203 阅读 · 0 评论 -
FreeRTOS二值信号量
#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "semphr.h"SemaphoreHandle_t BinarySemaphore; //二值信号量句柄#define START_TASK_PRIO 1#define START_STK_SIZE 128 TaskHandle_t St...原创 2020-08-14 23:56:10 · 275 阅读 · 0 评论 -
FreeRTOS在STM32F407上从头开始移植
到https://www.freertos.org/下载FreeRTOS源码。1. 在裸机工程中新建ReeRTOS文件夹2. 复制源码portable 是不同单片机移植用的,这里只用到Keil、MemMang、RVDS,可以把其他删除3. 在keil工程中添加分组heap_4.c 在MemMang中,port.c 在RVDS\ARM_CM4F(STM32F407有FPU)4....原创 2020-04-11 16:31:24 · 1800 阅读 · 0 评论