rtos定时器不起作用原因之逻辑问题

在使用RTOS过程中突然发现定时器不起作用。

先分析原因,因为定时器也是一个任务,所以也有自己的任务优先级。如果当有高级任务由于自己代码逻辑BUG卡在某个循环里,那么按任务调度规则来看,那么定时器就永远得不到CPU所以导致定时器看起来,不起作用。

复制代码
/* Software timer definitions. */
#define configUSE_TIMERS				1
#define configTIMER_TASK_PRIORITY		4
#define configTIMER_QUEUE_LENGTH		16

#define configUSE_TIMERS 1

这个宏定义用于启用FreeRTOS中的软件定时器功能。当你设置configUSE_TIMERS为1时,FreeRTOS会在其任务调度和中断处理中包括软件定时器的支持。软件定时器允许你在没有硬件定时器可用或需要更灵活定时功能的情况下,使用软件来模拟定时器。

2. #define configTIMER_TASK_PRIORITY 4

这个宏定义设置了软件定时器任务的优先级。在FreeRTOS中,软件定时器是通过一个特殊的任务来管理的,该任务会定期检查所有软件定时器的状态,并执行任何已经到期的定时器回调函数。configTIMER_TASK_PRIORITY定义了这个任务的优先级。在这个例子中,它被设置为4,但实际的优先级值取决于你的RTOS配置和调度策略。较高的优先级意味着该任务将比其他具有较低优先级的任务更频繁地运行。

3. #define configTIMER_QUEUE_LENGTH 16

这个宏定义设置了用于软件定时器消息传递的队列长度。在FreeRTOS中,软件定时器任务使用一个队列来与其他任务或中断服务程序进行通信。当定时器到期时,它可能会向该队列发送一条消息,以便通知其他任务或中断服务程序。configTIMER_QUEUE_LENGTH定义了该队列的最大长度。在这个例子中,它被设置为16,这意味着队列最多可以存储16条消息。如果队列已满并且又有新的消息要发送,那么新的消息可能会被丢弃或根据队列的溢出策略进行处理。

相关推荐
聊询QQ:276998851 小时前
基于MATLAB与CarSim/PreScan联合仿真的自动驾驶路径规划与动态避障模型研究
stm32
某林2128 小时前
SLAM 建图系统配置与启动架构
人工智能·stm32·单片机·嵌入式硬件·算法
p66666666689 小时前
STM32跑飞,进入HardFault_Handler如何精准的确定问题
stm32·单片机·嵌入式硬件
影阴10 小时前
stm32 HAL库实现 ADC 多通道采集
stm32·单片机·嵌入式硬件
小李做物联网11 小时前
【物联网毕业设计】113.1基于单片机物联网图书馆监测系统嵌入式
stm32·单片机·嵌入式硬件·物联网
猫猫的小茶馆11 小时前
【ARM】内核移植(编译)
linux·arm开发·stm32·单片机·嵌入式硬件·mcu·pcb工艺
某林21211 小时前
STM32 底层固件架构与驱动设计
stm32·单片机·嵌入式硬件
某林21211 小时前
集成式人机交互与底层驱动系统设计说明书
人工智能·stm32·嵌入式硬件·算法·机器学习·人机交互
顾安r12 小时前
12.8 脚本网页 井字棋
前端·stm32·django·html
金色光环12 小时前
基于STM32F407+dp83848实现ModbusTCP从站移植
驱动开发·stm32·嵌入式硬件