公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

如果一个优先级较高的任务被阻塞,一个优先级较低的任务正在运行,而在时间片结束之前,优先级较高的任务已准备就绪,那么如何在不等待 stm 启动中断的情况下在它们之间切换?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/preemptive-scheduling-on-tc275/td-p/690483

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

你好@Yasminkhaled22

这是正确的,正如文档中所描述的那样(假设 ) 您使用的是 FreeRTOS

A periodic interrupt, called the 'tick interrupt', is used for this purpose.

关于您的问题

"如果出现这样的情况,即在系统定时器触发中断之前,一个优先级更高的任务已经准备就绪,那么如何在两个任务之间进行切换,而无需等待系统定时器,因为我的应用程序需要采用 RTOS? "

FreeRTOS 提供了不同的调度算法,这取决于您的应用程序将使用哪种算法,否则您将需要对其进行修改才能实现您的目标。

David_R_0-1707749833769.png

在我看来,合作社正是你们所需要的、

David_R_2-1707751063907.png

最后,您还可以使用邮件箱,这样就不必等到系统定时器中断。

请参阅 FreeRTOS 提供的官方指南,进一步了解调度器算法的工作原理,其中解释了两种调度器方案之间的差异以及如何控制流的执行。

时间测量和点击中断

调度算法

问候!:1

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/preemptive-scheduling-on-tc275/m-p/693156

在原帖中查看解决方案

0 点赞
4 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

你好@Yasminkhaled22

如果您能提供代码,将非常有用,所以我们假设您使用的是 FreeRTOS,如果您启用了时间切片功能

#define configUSE_TIME_SLICING                  1

每项任务都有相同的 CPU 时间,当然,优先级较高的任务会最先完成、

关于您的问题,您举了一个例子,CPU 的时间被一个优先级较低的任务占用,然后发生了中断,因为中断的优先级较高,CPU 必须离开优先级较低的任务去处理中断,所以一旦处理完中断,CPU 就会回到优先级较低的任务、

据我所知,您是想在不中断的情况下切换任务? 如果是这样,调度程序会自动完成这项工作,你不需要做任何事情,你能控制的只是哪个任务的优先级更高、

或者,您也可以将计划从抢占式改为合作式,这样您就可以控制任务何时必须释放(让出)CPU。

问候!:1

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/preemptive-scheduling-on-tc275/m-p/691183

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

所以我认为这是个误解,根据我最新的知识,要在两个任务之间切换,系统定时器必须先触发中断,然后再在任务之间切换。 因此,我的问题是,如果在系统定时器触发中断之前,一个优先级更高的任务已经准备就绪,如何在两个任务之间进行切换,而无需等待系统定时器,因为我的应用程序需要采用 RTOS?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/preemptive-scheduling-on-tc275/m-p/692664

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

所以我认为这是个误解,根据我最新的知识,要在两个任务之间切换,系统定时器必须先触发中断,然后再在任务之间切换。 因此,我的问题是,如果在系统定时器触发中断之前,一个优先级更高的任务已经准备就绪,如何在两个任务之间进行切换,而无需等待系统定时器,因为我的应用程序需要采用 RTOS?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/preemptive-scheduling-on-tc275/m-p/692660

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好@Yasminkhaled22

这是正确的,正如文档中所描述的那样(假设 ) 您使用的是 FreeRTOS

A periodic interrupt, called the 'tick interrupt', is used for this purpose.

关于您的问题

"如果出现这样的情况,即在系统定时器触发中断之前,一个优先级更高的任务已经准备就绪,那么如何在两个任务之间进行切换,而无需等待系统定时器,因为我的应用程序需要采用 RTOS? "

FreeRTOS 提供了不同的调度算法,这取决于您的应用程序将使用哪种算法,否则您将需要对其进行修改才能实现您的目标。

David_R_0-1707749833769.png

在我看来,合作社正是你们所需要的、

David_R_2-1707751063907.png

最后,您还可以使用邮件箱,这样就不必等到系统定时器中断。

请参阅 FreeRTOS 提供的官方指南,进一步了解调度器算法的工作原理,其中解释了两种调度器方案之间的差异以及如何控制流的执行。

时间测量和点击中断

调度算法

问候!:1

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/preemptive-scheduling-on-tc275/m-p/693156

0 点赞