问题描述
您好,我刚刚开始将FreeRTOS与STM32一起使用。我了解使用信号量的任务或线程之间的同步概念。但是我真正没有得到的是在中断服务程序Semaphores
中使用Mutexes
/ ISR
。我为什么要使用xSemaphoreGiveFromISR()
而不是仅仅使用xSemaphoreGive()
,而这两者都主要用于同步而不中断。
软件计时器和中断之间有什么区别?我知道何时以及如何使用中断,但何时需要使用软件计时器?@H_404_13@
解决方法
如果您深入研究资源,您将看到普通与* FromISR API之间的区别。还有更多。这主要是为了使ISR(如果使用的MCU支持)的执行时间最短而进行的优化,因为ISR应该保持尽可能短。
此外,ISR(调用)上下文与常规任务上下文不同,并且* FromISR API负责此任务。
这是一个实施细节-只需遵循记录的规则,就可以了:)
基本上,软件计时器用于支持使用单个硬件计时器的一对/许多计时器。通常,软件需要多个同时运行的计时器,例如触发多个具有不同周期的周期性作业/动作,但是硬件资源(计时器)有限。 这也适用于使用FreeRTOS操纵杆的FreeRTOS计时器功能,该操纵杆通常会一直运行。
通常,中断是另一回事。它们是外围硬件如何与运行应用程序的连接处理器进行交互的一种方式。 好吧,例如,相应配置的硬件计时器会触发一个(HW)中断,以通过ISR触发软件对该事件进行处理。
另请参阅推荐的综合性FreeRTOS documentation。