FreeRTOS
Rookie on the road
这个作者很懒,什么都没留下…
展开
-
FreeRTOS移植到MCU上进入HardFault_Handler的原因
可能是在FreeRTOSConfig.h中给系统所分配的总的堆的大小超过了要移植的MCU的所能提供给用户使用的内存大小,即 #define configTOTAL_HEAP_SIZE ((size_t)(4*1024)) 分配过大 可能是在FreeRTOSConfig.h中给系统所分配的空闲任务的堆栈太小, #define configMINIMAL_STACK_SIZE ((uns...原创 2020-01-16 11:12:45 · 3669 阅读 · 0 评论 -
FreeRTOS任务通知、事件、信号量的对比
使用任务通知将事件或数据发送到任务比使用队列,信号量或事件组执行等效操作要快得多。同样,与使用队列,信号量或事件组执行等效操作相比,使用任务通知将事件或数据发送到任务所需的RAM要少得多。这是因为必须先创建每个通信对象(队列,信号灯或事件组),然后才能使用它,而启用任务通知功能具有固定的开销,镶嵌在任务控制块TCB中,如下:#if( configUSE_TASK_NOTIFICATIONS ...原创 2020-01-06 08:24:46 · 2507 阅读 · 0 评论 -
FreeRTOS事件组----任务同步
有时,应用程序的设计需要两个或多个任务才能彼此同步。例如,考虑一个设计,其中任务A接收一个事件,然后将事件所需的一些处理提供给其他三个任务:任务B,任务C和任务D。如果任务A在任务B,C和D已经全部完成了对上一个事件的处理,那么所有这四个任务将需要彼此同步。每个任务的同步点将在该任务完成其处理之后,并且无法继续进行,直到其他每个任务都完成了相同的任务。在所有四个任务都达到其同步点之后,任务A才能接...原创 2020-01-03 14:05:13 · 2788 阅读 · 0 评论 -
FreeRTOS事件组
事件组、事件标志和事件位事件“标志”是布尔值(1或0),用于指示事件是否发生。事件“组”是一组事件标志。事件标志只能为1或0,从而允许将事件标志的状态存储在单个位中,而将事件组中所有事件标志的状态存储在单个变量中;事件组中每个事件标志的状态由EventBits_t类型的变量中的一位表示。因此,事件标志也称为事件“位”。如果将EventBits_t变量中的某个位设置为1,则发生了该位表示的事...原创 2020-01-03 10:11:30 · 675 阅读 · 0 评论 -
FreeRTOS中断管理--计数信号量
计数信号量正如可以将二进制信号量视为长度为1的队列一样,将计数信号量视为长度大于1的队列。任务对队列中存储的数据不感兴趣,仅对队列中的项目数感兴趣。必须在FreeRTOSConfig.h中将configUSE_COUNTING_SEMAPHORES设置为1,才使能计数信号量。每次“给出”计数信号量时,都会使用其队列中的另一个空间。队列中的项目数是信号量的“计数”值。计数信号量通常用于两件事:...原创 2020-01-03 09:16:49 · 683 阅读 · 0 评论 -
FreeRTOS中断管理--二值信号量
二值信号量同步二值信号量(binary semaphroe api)的中断安全版本可用于在每次发生特定中断时取消阻止任务,从而有效地将任务与中断同步。这允许大多数中断事件处理在同步任务中实现,而只有非常快和非常短的部分直接保留在ISR中。如前一部分所述,二进制信号量用于将延迟处理“推迟”到任务。如上图 所示,如果中断处理的时间特别紧迫,则可以设置延迟处理任务的优先级,以确保该任务始终抢占系统中...原创 2020-01-03 08:24:48 · 2524 阅读 · 1 评论 -
FreeRTOS中断嵌套问题
任务优先级和中断优先级之间经常会出现混淆。中断优先级,即中断服务程序(ISR)相对于彼此执行的优先级。分配给任务的优先级与分配给中断的优先级没有任何关系。硬件决定ISR何时执行,而软件决定任务何时执行。响应硬件中断而执行的ISR将中断任务,但是任务无法抢占ISR。 支持中断嵌套的端口需要在FreeRTOSConfig.h中定义下表中详细说明的一个或两个常量,configMAX...原创 2020-01-02 15:40:08 · 2593 阅读 · 1 评论 -
FreeRTOS软件定时器
软件定时器用于在将来的设定时间或以固定频率定期计划功能的执行。软件定时器执行的功能称为软件定时器的回调函数。软件定时器由FreeRTOS内核实现并受其控制。它们不需要硬件支持,并且与硬件计时器或硬件计数器无关。软件计时器功能是可选的。包括软件计时器功能:1. 作为项目的一部分,构建FreeRTOS源文件FreeRTOS / Source / timers.c。2. 在FreeRTOSC...原创 2019-12-18 17:44:44 · 3583 阅读 · 0 评论 -
FreeRTOS中断管理--概述
概述嵌入式实时系统必须采取措施以响应源自环境的事件。例如,到达以太网外围设备的数据包(事件)可能需要传递到TCP / IP堆栈进行处理(操作)。非平凡的系统将不得不处理源自多个来源的事件,所有这些事件都将具有不同的处理开销和响应时间要求。在每种情况下,都必须对最佳事件处理实施策略做出判断:应该如何检测事件?通常使用中断,但也可以查询输入。使用中断时,应在中断服务程序(ISR)内执行多少处理...原创 2019-12-06 10:20:11 · 3135 阅读 · 0 评论 -
FreeRTOS堆内存管理
动态内存分配相关选项从FreeRTOS V9.0.0起,可以在编译时静态分配内核对象,或者在运行时动态分配内核对象。为了使FreeRTOS尽可能易于使用,这些内核对象不是在编译时静态分配的,而是在运行时动态分配的。FreeRTOS每次创建内核对象时都会分配RAM,并且每次删除内核对象时都会释放RAM。该策略减少了设计和规划工作,简化了API,并最大程度地减少了RAM占用空间。动态内存分配。动态...原创 2019-11-25 15:09:21 · 507 阅读 · 0 评论