FreeRTOS知识随笔

FreeRTOS知识随笔

1. 中断函数SysTick_Handler,用于产生FreeRTOS的tick

port.c中
portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;为设置SysTick_Handler的中断周期
其中portNVIC_SYSTICK_LOAD_REG 是一个寄存器,值为( *( ( volatile uint32_t * ) 0xe000e014 ) ),决定计数器从该值递减到 0 的计数周期长度。
configSYSTICK_CLOCK_HZ和configTICK_RATE_HZ 都可以在FreeRTOSConfig中配置
例:configSYSTICK_CLOCK_HZ 为72MHZ(72000000HZ),configTICK_RATE_HZ 设置为1000的话,下面的计算方法比较繁琐,但是便于理解。
1/72000000 = 每个时钟周期的频率,以秒为单位;72000000/1000 = 72000表示产生一次SysTick_Handler中断的时钟周期,也就是72000*(1/72000000)= 0.001s,也就是1ms。最终得到1ms得到一个tick。
注:vTaskDelay()的参数也是以tick为单位的。

2. 为什么设置flash延时

Flash 延时周期 是指 CPU 从内部 Flash 读取指令或数据时,为了配合高频率主频运行,需要插入的一定数量的延迟周期(Wait States),确保读取数据的正确性。(这个需要再看一下)

3. FreeRTOS 确实以 Tick 为周期性心跳来驱动调度,但任务切换(上下文切换)的最小触发单位可以比 Tick 更小,因为它可以在任何需要的时候被其他事件(如中断、任务阻塞等)立即触发。

4. 在不同的系统中,一个字WORD占据的空间不同。

1、在32位嵌入式系统中,一个字WORD占32bit,即4个字节;
2、半字Half-word占16bit;
3、字节Byte占8位。

5. FreeRTOS 任务优先级越大越高,stm32中断优先级越大越低

6. 与lvlg同时使用的时候,一定要配置好合适的configTOTAL_HEAP_SIZE(在FreeRTOSConfig里)

posted @ 2025-05-30 14:59  绿树荫下跑猫猫  阅读(28)  评论(0)    收藏  举报