随笔分类 - FreeRTOS
摘要:任务切换实现 xPortPendSVHandler: mrs r0, psp // 获取进入异常时的进程栈 isb ldr r3, =pxCurrentTCB // 加载线程控制块地址到r3 ldr r2, [r3] // 将线程控制块栈顶指针加载到r2 stmdb r0!, {r4-r11} //
阅读全文
摘要:动态内存分配及其与FreeRTOS的相关性 为了使FreeRTOS更易用,内核对象(如任务、队列、信号量、事件组)不在编译期静态分配,而是在运行时动态分配,FreeRTOS在内核对象创建时分配RAM,删除内核对象时释放RAM。 这种策略降低了设计难度,更简单的API,最小化内存占用。动态内存分配时C
阅读全文
摘要:启动调度器接口,主要是创建空闲任务和定时器任务以及执行特定架构的启动调度器接口 // FreeRTOS\Source\tasks.c void vTaskStartScheduler( void ) { /* Add the idle task at the lowest priority. */
阅读全文
摘要:查找最高优先级就绪任务 FreeRTOS\Source\tasks.c #if ( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 ) /* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 0 then task
阅读全文
摘要:RTOS中降低功耗的策略 Saving Power with an RTOS 介绍 随着绿色节能产品需求的增加,快速增长的移动设备,其电池寿命最受关注,设计者必须要考虑在其设计中如何最大限度的降低功耗。这可以通过选择耗电更低的组件,以及更合理的软件架构去实现。 RTOS调度效率 一个普遍的常识,在嵌
阅读全文
摘要:【问题】 控制程序工作一段时间异常重启 【分析】 经定位分析重启原因为看门狗复位导致 【解决】 经排查发现在中断服务函数中使用了FreeRTOS的系统时延函数vTaskDelay,调试发现进入vTaskDelay函数后,会在函数xTaskResumeAll中进入临界段函数, 进而发现程序会卡死在下面
阅读全文
摘要:systick 属性配置 在文件 <port.c> 中函数 void vPortSetupTimerInterrupt( void ) 中配置计数周期、时钟源选择、异常请求使能、计数器使能 systick 中断配置 在文件 <port.c> 中函数 BaseType_t xPortStartSche
阅读全文
摘要:cpu会死在文件<port.c>中下边函数处 static void prvTaskExitError( void ){ /* A function that implements a task must not exit or attempt to return to its caller as
阅读全文
摘要:不同于rt-thread、ucos,freertos的时间片不支持设置,实际以os-tick为时间片去切换同优先级的任务,本质还是任务调度
阅读全文
摘要:举例 等待事件标志组的任务,要是在中断服务程序中设置事件标志组,但不知道当前有多少个任务在等待此事件标志,这个操作即为不确定性操作,为了不在中断服务程序中执行此不确定性操作,只在中断服务程序中给一确定任务发送消息,而在此确定任务中执行事件标志组置位操作,对于临界段的处理,则是将临界段改为调度锁来完成
阅读全文