FreeRTOS-中断相关坑 1. FreeRTOS中断的配置 LIBRARY_LOWEST_INTERRUPT_PRIORITY:配置FreeRTOS最低优先级,SysTick和PendSV默认在此优先级 LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY:高于该配置的优先级中断中都不能调用freertos的任何API,但是同时他也不会受freertos的内核影响而可以
以STM32平台为例,在STM32中数值优先级越低,逻辑优先级越高。 void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) { TCB_t * pxTCB; uint8_t ucOriginalNotifyState; UBaseType_t uxSavedInterruptStatus; configASSE
1、中断里调用 信号量、消息队列等API, 信号量的接收、消息队列的接收都需要等待中断结束后才能响应 2、中断回调函数只能使用中断级API (xxFromISR) 函数 3、比configMAX_SYSCALL_INTERRUPT_PRIORITY优先级高的中断函数中不能使用FreeRTOS的函数 4、临界代码保护后不可调用osDe
文章目录 1 前言2 遇到的问题3 问题分析3.1 初略分析3.2 深究源码3.3 代码验证3.4 进一步分析3.5 如何优化 4 经验总结5 更多分享 1 前言 最近博主在做一些适配freeRTOS的项目,简单来说就是从别的RTOS平台迁移到freeRTOS平台。 由于之前的代码都是可用的,凭经验我们认为只
从FreeRTOSv8.2.0版本开始,FreeRTOS新增了任务通知(Task Notifictions)这个功能,可以使用任务通知来代替信号量、消息队列、事件标志组等这些东西。使用任务通知的话效率会更高。 一、任务通知简介 任务通知在FreeRTOS中是一个可选的功能,要使用任务通知的话就需要将宏configUSE_
ID²和硬件主控的驱动移植 接下去部分实现ID² SE芯片移植 移植准备 SE安全芯片:FM1230 硬件电路:主控—iic—FM1230 原厂提供了STM32下的IIC下的驱动示例 根据自己主控来移植IIC驱动部分,这里是采用GPIO模拟IIC来实现 IIC驱动移植 模拟IIC驱动部分比较常见,我也是从网上找的,贴出
一、消息队列读取消息 有消息入队就有出队,出队就是从队列中获取队列项(消息),FreeRTOS中出队函数如下表所示: 1、函数xQueueReceive() 此函数用于在任务中从队列中读取一条(请求)消息,读取成功以后就会将队列中的这条数据删除,此函数的本质是一个宏,真正执行的函数是xQueueGenericRec
EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ); xClearOnExit: 是否需要清
函数功能 void vListInitialise( List_t * const pxList ); 链表初始化函数 /* 节点初始化 */ void vListInitialiseItem( ListItem_t * const pxItem ) { /* 初始化该节点所在的链表为空,表示节点还没有插入任何链表 */ pxItem->pvContainer =
列表项例子如下:(注意演示图片里的尖口方向指向,好好分析)
任务调度 任务调度实现在多个任务之间轮流使用CPU,他的主要工作分为三个阶段: 保存当前任务上下文到任务栈选择新任务恢复新任务的上下文 这三个步骤需要在中断服务函数中执行,所以要求执行的速度要快,所以任务选择策略需要满足快的要求,同时使用汇编代码编写。 任务调度器的具体
FreeRTOS消息队列 & ESP32实战 FreeRTOS消息队列 FreeRTOS的消息队列和操作系统课中讲的消息队列大差不差,都是为了有序的、安全的在多任务间在发送信息。下面是其一些特性。 多任务访问 队列不是属于某个特别指定的任务的,任何任务都可以向队列中发送消息,或者从队列中提取
上图: 今天试着在IDE上面配置FreeRTOS,因为之前都是直接在keil上面移植裁剪系统,第一次在IDE上图形化配置导致很多参数都看不懂,很多需要配置的重要参数也找不到位置,所有我把所有可以配置的参数都翻译了一遍。(注:只做翻译,不详细叙述作用) 翻译按照上图中1、2、3、4的顺序 第一部分
声明:本专栏参考韦东山,野火,正点原子以及其他博主的FreeRTOS教程,如若侵权请告知,马上删帖致歉,个人总结,如有不对,欢迎指正。 空闲任务钩子函数实验一:不断创建任务圈重点实验二:不断创建任务实验三:让优先级为0的任务也可以执行实验四:空闲任务钩子函数运行钩子函数前提条件:
1、中断管理上的区别 freertos进入临界区时,不响应优先级低于设定阈值的中断,此时若需要一个绝对的定时时间来做一些采样业务,那么采样周期就有可能被打断。 若把中断优先级设定高于设定阈值,就不能使用freertos的API,但是这个中断又需要用到队列来存储数据。使用全局变量就有悖使用
声明:本专栏参考韦东山,野火,正点原子以及其他博主的FreeRTOS教程,如若侵权请告知,马上删帖致歉,个人总结,如有不对,欢迎指正。 临界资源访问临界区资源保护实验实验一实验二 临界资源访问 转:临界资源访问1 转:临界资源访问2 阅读以上两篇文章大概就知道临界资源访问是个啥了,
Arduino FreeRTOS给任务传递参数 相关篇《Arduino上跑FreeRTOS多任务操作系统》 《Arduino FreeRTOS多任务优先级设置》 《Arduino FreeRTOS多任务执行和销毁》 实例代码 #include <Arduino_FreeRTOS.h> struct LED{ unsigned int time_on
一、信号量简介 信号量是操作系统中重要的一部分,信号量一般用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。不同的信号量其应用场景不同,但有些应用场景是可以互换着使用的。 二、二值信号量 简介 二值信号量其实就
二值信号量 vSemaphoreCreateBinary()//创建二值信号量,老版本,调用take会得到 xSemaphoreCreateBinary()//返回handle,需要的内存是自动分配,创建要先give xSemaphoreCreateBinaryStatic()//静态创建 队列长度为1, 用于任务同步,不用优先级继承机制 发送:Post an item on a qu
typedef TickType_t EventBits_t; xEventGroupCreate()//创建事件标志组 xEventGroupClearBits()//Clear bits within an event group 清除事件标志位 xEventGroupSetBits()//置位事件标志位将解除正在等待标志位任务的阻塞, xEventGroupGetBits()//返回事件标志位的值 xEvent
摘要:在裸机中我们使用全局变量来传递信息,在操作系统中,使用全局变量传递消息可能会不安全,容易被修改。于是就是用队列来传递消息。队列就是一个数据结构,用于任务间的数据的传递。 一、消息队列的基本概念 队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任
1、中断的管理 Freertos对系统中断的管理是通过操作 BASEPRI 寄存器来实现的,头文件FreeRTOSConfig.h中对管理的优先级进行了定义 #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 设置freertos可以管理的最大优先级,高于优先级5的不归freertos管,低于此优先级的中
串口数据处理比较频繁时,不用RTOS处理数据容易丢包。 串口数据处理可以用FreeRTOS进行管理,用于支持串口的CMD指令收发。 除了串口任务的创建,定时器创建外,单纯串口数据处理需要进行下面几个步骤。 1 串口初始化与参数初始化 定义串口数据机构体 #define SH _BUFSIZE
FreeRTOS-事件标志组 在前面我们已经学习了信号量,我们知道信号量可以用来做任务同步,但是这种任务同步有一个缺点,就是只能在两个任务之间进行同步,所以为了解决这个问题,FreeRTOS提供了事件标志组,使得多任务之间进行同步。 事件标志组表示方法 事件标志组由若干个事件标志位组成
一、学习环境 编译环境:keil 开发板:野火STM32F429开发板 二、遇到的问题 问题一: #error This port can only be used when the project options are configured to enable hardware floating point support. 解决方法:在keil的target中选浮点单元,因为我用的F429支持浮点运算。将