打印
[STM32F1]

如何在STM32中实现多任务调度?

[复制链接]
210|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在STM32上使用RTOS时,如何进行多任务调度和任务优先级设置?

使用特权

评论回复
沙发
公羊子丹| | 2025-3-4 07:42 | 只看该作者
你是用 FreeRTOS 还是别的 RTOS?FreeRTOS 在 STM32F1 上挺常见的,任务调度和优先级管理也比较成熟。

使用特权

评论回复
板凳
周半梅| | 2025-3-4 07:44 | 只看该作者
任务调度可以分为 时间片轮转 和 优先级抢占,你的应用对实时性要求高吗?

使用特权

评论回复
地板
帛灿灿| | 2025-3-4 07:46 | 只看该作者
任务优先级的设置要合理,优先级太高的任务可能会让低优先级任务长时间得不到执行,导致 饥饿 问题。

使用特权

评论回复
5
童雨竹| | 2025-3-4 07:48 | 只看该作者
你有没有使用 vTaskDelay() 或 osDelay()?如果任务没有适当的 delay,可能会导致 CPU 被高优先级任务占满。

使用特权

评论回复
6
万图| | 2025-3-4 07:50 | 只看该作者
STM32F1 只有 SysTick 定时器用于 FreeRTOS 的心跳时钟,确保 configTICK_RATE_HZ 设得合理,否则调度可能会异常。

使用特权

评论回复
7
Wordsworth| | 2025-3-4 07:52 | 只看该作者
你是否有任务间通信需求?如果有,建议用 消息队列、信号量或者互斥锁,避免多个任务同时访问共享资源。

使用特权

评论回复
8
Bblythe| | 2025-3-4 07:54 | 只看该作者
configUSE_PREEMPTION 这个配置决定了是否使用 抢占式调度,如果是 0,那么所有任务都是时间片轮转的。

使用特权

评论回复
9
Pulitzer| | 2025-3-4 07:58 | 只看该作者
STM32F1 的 NVIC 只能支持 256 级中断优先级,但 FreeRTOS 只使用了其中的低 4 位,注意配置 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY。

使用特权

评论回复
10
Uriah| | 2025-3-4 08:01 | 只看该作者
任务堆栈分配要注意,默认任务栈可能不够用,可以在 uxTaskGetStackHighWaterMark() 里查看任务的实际剩余栈空间。

使用特权

评论回复
11
Clyde011| | 2025-3-4 08:03 | 只看该作者
你可以试试 STM32CubeMX 生成 FreeRTOS 代码,然后手动调整任务优先级和调度策略,这样能更直观地看到任务运行情况。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

691

帖子

0

粉丝