
FreeRTOS
FreeRTOS相关知识整理
JavonPeng
提得起,放得下,提放自如,方是自在人
展开
-
【FreeRTOS】调用vTaskStartScheduler立即进入HardFault_Handler问题解决
环境:STM32F103VCT6问题:先初始化了外设,然后到调用vTaskStartScheduler启动调度器时就直接跳转到HardFault_Handler启动调试,然后找到HardFault_Handler,Show Caller Code 跳转到 post.c 该函数:__asm void prvStartFirstTask( void ){ PRESERVE8 /* Use the NVIC offset register to locate the stack...原创 2020-12-17 20:12:37 · 7905 阅读 · 14 评论 -
FreeRTOS任务切换导致SPI(FLASH)读写错误问题解决记录
问题:FreeRTOS系统重启(看门狗),调试发现在 任务切换函数和SPI读写函数循环。 { if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) ) { /* Add the task to the suspended task list instead of a delayed task list to ensure it is not woken by a原创 2020-11-17 14:28:58 · 5467 阅读 · 1 评论 -
FreeRTOS死在了 vListInsert 函数里面
void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ){ListItem_t *pxIterator;const TickType_t xValueOfInsertion = pxNewListItem->xItemValue; /* Only effective when configASSERT() is also defined, these tests may catch the li.原创 2020-09-27 19:10:11 · 2710 阅读 · 0 评论 -
浅析FreeRTOS_v4.5.0的任务切换原理和栈结构
FreeRTOS的更新速度很快,基本2、3个月就会出现一个新版本,看来一直在完善和各种功能增加中,截止2007/09/27日为止,FreeRTOS_v4.5.0是最新版本,下面研究一下FreeRTOS_v4.5.0在at91sam7s64处理器上的任务切换代码。 当有更高优先级的task任务就绪或者当前task任务因为vTaskDelay()延时或者消息事件等待而主动让出cpu时,FreeRTOS_v4.5.0会在适当的位置执行taskYIELD();进行task进程调度,让更应该持有cpu的tas...转载 2020-08-07 09:38:15 · 675 阅读 · 0 评论 -
RTOS中的可重入函数与不可重入函数
主要体现在实时操作系统(RTOS)中,即多任务环境中,经常会出现多个任务调用同一个函数的情况。一、不可重入函数1、概念不可重入函数,即不能重复进入的函数,不能被中断的函数。在多个任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。不可重入函数在实时系统设计中被视为不安全函数。2、特点有以下条件都属于不可重入函数:函数体内使用了静态的数据结构;(static) 函数体内调用了malloc()或者free()函数; 函数体内调用了标准I/O函数。 函数体原创 2020-07-28 16:33:54 · 1771 阅读 · 0 评论 -
FreeRTOS的调度锁,任务锁、中断锁
一、调度锁 1、概念:调度锁即禁止任务调度,调度锁开和调度锁关之间的代码在执行期间不会被高优先级的任务抢占。2、API: vTaskSuspendAll 开启调度锁 xTaskResumeAll () 关闭调度锁 3、注意:1. 调度锁函数只是禁止了任务调度,并没有关闭任何中断。(临界段进行了开关中断操作) 2. 调度锁开启函数 vTaskSuspendAll 和调度锁关闭函数 xTaskResumeAll 一定要成对使用..原创 2020-07-28 16:05:17 · 2776 阅读 · 0 评论 -
FreeRTOS应用场景
单片机也要用操作系统?如果以日常用的Windows, Linux, BSD这些,甚至是DOS,来代表操作系统的话,在单片机上运行操作系统时候个很荒诞的想法——因为对大多数单片机,RAM实在太少了。而 FreeRTOS 并不是要提供一个在单片机上运行软件的平台,把软件一个个安装到它上面,供用户选择运行什么,它没有用户界面;它不是一个管家,也不带任何硬件驱动程序,也没有文件系统服务提供。FreeRTOS只是一个操作系统内核,它首先提供了操作系统最重要的特性:任务调度。 也就是说,有了FreeRTOS,在单片机转载 2020-07-21 22:22:18 · 3416 阅读 · 0 评论 -
FreeRTOSConfig.h 文件宏定义分析
/* FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. All rights reserved VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. This file is part of the FreeRTOS distribution. FreeRTOS is free software.原创 2020-06-10 16:36:04 · 776 阅读 · 0 评论 -
FreeRTOS消息队列、信号量、事件标志组、任务通知
功能及区别列表 消息队列 (需要传递消息时使用)在任务与任务间、 中断和任务间传递信息,可以数据传输 事件标志组 (多个事件同步,不需要传递消息时使用)实现任务与任务间、 中断和任务间的同步,无数据传输。 可实现一对多、多对多的同步,可选择是“逻辑或”触发还是“逻辑与”触发。即一个任务可以等待多个事件的发生。 信号量 (单个事件同...原创 2019-12-10 11:48:11 · 4717 阅读 · 3 评论 -
FreeRTOS中使用全局变量的问题
在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消息就会涉及到“资源管理”的问题。多任务访问全局变量会带来共享资源管理问题,消息队列最终是用的全局变量!但是消息队列对这个全局变量做了保护,重点就是资源管理的保护!假如你直接使用全局变量,那么在代码中任何任务都可以随时随地的访问、修改这个全局变量!例如:A任务正在使用全局...原创 2019-12-10 10:28:44 · 16010 阅读 · 4 评论 -
FreeRTOS优先级配置说明
中断优先级和任务优先级:1、中断优先级和任务优先级没有任何关系,中断的优先级高于任何任务的优先级,即任务在执行的过程中,中断来了就开始执行中断服务程序。2、中断优先级数值越小,优先级就越高。FreeRTOS的任务优先级是,任务优先级数值越小,优先级越低。 中断优先级: 1、NVIC的全称是Nested vectoredinterrupt controller,即嵌套向量中断控...原创 2019-11-19 16:48:15 · 7185 阅读 · 0 评论 -
FreeRTOS打印浮点数卡死问题
问题:在任务里使用printf("%.1f")打印浮点数时出现卡死的现象原因:printf("%.1f")打印浮点数时消耗了很多栈空间,堆栈空间太小.解决:增加任务堆栈大小,或者使用FreeRTOS优化改进的printf函数.//任务优先级#define STORAGE_TASK_PRIO 2//任务堆栈大小 #define STORAGE_STK_SIZE 128 ...原创 2019-10-10 10:51:29 · 1898 阅读 · 0 评论