gpt4 book ai didi

c - 嵌入式应用中的最佳任务调度策略

转载 作者:行者123 更新时间:2023-11-30 19:26:14 27 4
gpt4 key购买 nike

我正在尝试寻找一种更好的方法来组织嵌入式应用程序的子任务。我对电力电子应用更感兴趣。我不是软件工程师,而是电力电子工程师。但是,大多数情况下我需要开发代码。

在这些应用程序中,主程序将处于无限循环中,控制算法将在 ISR(中断服务例程)中运行。然而,在某些应用中,额外的低优先级子任务是必要的(例如通信、警报处理)。由于时间限制,这些子任务无法在 ISR 例程中运行(控制算法具有更高的优先级)。我想知道处理嵌入式应用程序任务计划的最佳方法。

在下面的代码片段中,一种简单的方法是将所有子任务放入无限循环中(如果所有子任务具有相同的优先级)。应用程序将定期运行 ISR 例程(例如,每个切换周期),并使用剩余时间以循环方式运行子任务。然而,在这种方法中,所有子任务都将在未知的时间内运行。因此,我将无法在这些任务中添加计时器例程(递增和检查)。此外,如果软件因某些错误代码而陷入低优先级任务中,则其他任务将不会被执行(或者看门狗定时器将被激活)。

void main(void)
{
Init();

for(;;) /* There is a ISR routine with the control Algorithm*/
{
SubTask1();

SubTask2();

SubTask3();
}
}

可以使用其他 ISR 例程(例如,为定时器模块控制)并控制中断优先级来运行一项特定任务。然而,这种方法需要对设备进行更仔细的研究,以便正确设置所有中断优先级。

你知道更好的方法吗?对于嵌入式应用程序来说,哪些调度任务分配方法最有效?

最佳答案

这个问题涉及嵌入式软件的一些一般原理。

1) 将 ISR 中的操作限制在最低限度2) 使用 RTOS 协调不同的事件3) 通过将软件设计为事件驱动来提高性能

高效实现子任务的方法是将它们从轮询循环转移到事件驱动。如果它们是您想要定期检查的警报条件,请使用 RTOS 从计时器调用该代码。对于通信,让该代码执行阻塞等待事件,例如消息的到达。事件驱动的代码效率更高,因为它不必通过所有轮询来查找要处理的事件。

事件驱动设计的工具(线程、定时器、阻塞等)由 RTOS 提供,第 3) 点引出第 2) 点。如果还有非事件驱动的剩余任务,RTOS 还可以解决您的子任务在未知时间和未知持续时间运行的问题。

最后,有多种原因可以限制您在 ISR 中的操作量。调试 ISR 代码更加困难。很难将 ISR 的工作与其他任务同步。另一种方法是执行与等待 ISR 事件的高优先级任务相同的操作。

但最大的原因是 future 的灵 active 。在 ISR 中运行控制算法使得添加另一个高优先级任务变得困难。或者可能会对控制算法报告状态或写入磁盘有新的要求。将代码移出 ISR 可为您提供更多选择。

关于c - 嵌入式应用中的最佳任务调度策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807293/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com