admin 管理员组文章数量: 1184232
今天我们将探讨FreeRTOS中的两个非常重要的函数:任务挂起和恢复函数。在实际的嵌入式系统开发中,我们常常需要在特定条件下暂停某些任务的执行,而在满足某些条件后再恢复这些任务的执行。这就像我们日常生活中的“暂停”和“继续”按钮。无论是为了节省资源,还是为了确保系统的稳定性,这两个操作都是至关重要的。通过理解和掌握任务的挂起与恢复,我们可以更灵活和高效地管理系统中的任务,确保各个任务能够协调运作,从而实现更稳定、更高效的系统表现。接下来,我们将深入了解如何使用这两个函数,以及它们在实际应用中的场景和注意事项。
目录
一、任务挂起与恢复函数
二、任务挂起函数
三、任务恢复函数(任务中恢复)
四、FreeRTOS 中断优先级概述
五、任务恢复函数(中断中恢复)
六、任务挂起与恢复API函数解析(选学)
6.1 任务挂起函数vTaskSuspend( )
6.2 (任务中调用)任务恢复函数vTaskResume( )
6.3(中断中调用)任务恢复函数xTaskResumeFromISR( )
七、任务挂起与恢复实验
八、任务挂起与任务恢复函数的使用场景
8.1 .临界区保护
8.2 资源管理
8.3 任务间同步
一、任务挂起与恢复函数
二、任务挂起函数
使用前先使能API函数
三、任务恢复函数(任务中恢复)
使用前先使能API函数
四、FreeRTOS 中断优先级概述
FreeRTOS 的配置文件 FreeRTOSConfig.h 中有两个关键宏定义:
configMAX_SYSCALL_INTERRUPT_PRIORITY //定义了可以使用 FreeRTOS API 的最高中断优先级。
configKERNEL_INTERRUPT_PRIORITY //定义了 FreeRTOS 内核的优先级
我们知道,Stm32一共有10个系统中断(内核中断),FreeRTOS便可以对这些系统中断进行管理;
第一个宏其实代表的是FreeRTOS可以管理的中断的最高的优先级;在 ARM Cortex-M 微控制器上,优先级数值越低,优先级越高。
configMAX_SYSCALL_INTERRUPT_PRIORITY通常设置为一个中等优先级数值。例如,如果 FreeRTOS 管理的最高优先级为 5,则configMAX_SYSCALL_INTERRUPT_PRIORITY可以设置为 5。
解释:中断优先级与 FreeRTOS API
如果在中断服务程序(ISR)中调用 FreeRTOS 的 API 函数,该 ISR 的优先级必须小于或者等于
configMAX_SYSCALL_INTERRUPT_PRIORITY。这意味着中断优先级数值必须大于等于configMAX_SYSCALL_INTERRUPT_PRIORITY的值。如果 ISR 的优先级高于
configMAX_SYSCALL_INTERRUPT_PRIORITY(即数值低于configMAX_SYSCALL_INTERRUPT_PRIORITY),在该 ISR 中调用 FreeRTOS API 函数可能会导致不可预期的行为,例如任务切换不正确或系统崩溃。这是因为 FreeRTOS 的调度器和其他 API 函数不是为在高优先级中断上下文中执行而设计的,即该中断不受FreeRTOS的管理。
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 5
// 假设这是一个中断服务程序,优先级为6
void MyISR(void) {
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
// 恢复任务,只有优先级为6或更低的中断才能调用该函数
vTaskResumeFromISR(xTaskHandle);
// 如果恢复的任务优先级较高,可以请求上下文切换
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
五、任务恢复函数(中断中恢复)
使用前先使能API函数
版权声明:本文标题:FreeRTOS基础(五):任务挂起与恢复 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1766237064a3446827.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论