AUTOSAR中支持的最大任务数

问题描述 投票:1回答:3

AUTOSAR兼容系统支持的最大任务数是多少?

在Linux中,我可以检查支持的最大进程ID,以获得支持的最大任务数。

但是,我找不到任何说明AUTOSAR支持的最大任务数的源。

非常感谢您的帮助!

autosar
3个回答
3
投票

它似乎有所不同。我发现ETAS RTA offers 1024 tasks *,而Vector的MICROSAR OS有65535。

对于任务处理,OSEK / ASR提供以下功能:

StatusType ActivateTask (TaskType TaskID)
StatusType TerminateTask (void)
StatusType Schedule (void)
StatusType GetTaskID (TaskRefType TaskID)
StatusType GetTaskState (TaskType TaskID, TaskStateRefType State)

*链接可能会在未来发生变化,但很容易直接搜索ETAS页面以获取手册等:https://www.etas.com/en/products/download_center.php


5
投票

好吧,我们仍处于嵌入式汽车世界,而不是PC。在您拥有的任务数量和安排它们所需的任务以及您的配置使用的RAM / ROM和运行时资源之间通常需要权衡。

如前所述,如果您只需要一个简单的定时循环,其间有一些中断,那么一个任务可能没问题。例如,也可能就足够了。 3个任务以5ms,10ms和20ms周期运行。但是你也可以通过一个5ms的任务在这样的简单情况下安排这个:

TASK(TASK_5ms)
{
    static uint8 cnt = 0;
    cnt++;
    // XXX and YYY Mainfunctions shall only be called every 10ms
    // but do a load balancing, that does not run 3 functions every 10ms
    // and 1 every 5ms, but only two every 5ms
    if (cnt & 1)  
    {
        XXX_Mainfunction_10ms();
    }
    else 
    {
        YYY_Mainfunction_10ms();
    }
    ZZZ_Mainfunction_5ms();
}

因此,如果您需要每隔5,10或20ms运行一次,您可以将这些runnable放入相应的任务中。

旧的OSEK也有BASIC vs EXTENDED Tasks的概念,只有扩展的任务才能对OsEvents做出反应。此任务可能不会循环运行,而只能在已配置的OsEvent上运行。你会在那里有一个操作系统等待点,其中任务或多或少地停止,并且只在事件到达时被操作系统唤醒。还有OSALARM,可以直接触发OsTask的激活,也可以间接触发事件,因此,您可以例如在来自OsAlarm的循环事件或由其他东西设置的OsEvent上等待同一个Waitpoint,例如通过另一项任务或从ISR。

TASK(TASK_EXT)
{
    EventMaskType evt;
    for(;;) 
    {
        WaitEvent(EVT_XXX_START | EVT_YYY_START | EVT_YYY_FINISHED);
        GetEvent(TASK_EXT, &evt);
        // Start XXX if triggered, but YYY has reported to be finished
        if ((evt & (EVT_XXX_START | EVT_YYY_FINISHED) == (EVT_XXX_START | EVT_YYY_FINISHED))
        {
            ClearEvent(EVT_XXX_START);
            XXX_Start();
        }
        // Start YYY if triggered, will report later to start XXX
        if (evt & EVT_YYY_START)
        {
             ClearEvent(EVT_YYY_START);
             YYY_Start();
        }
    }
}

这种直接处理调度现在主要是在RTE中根据您为SWC配置的事件和事件到任务映射等完成/生成的。

任务主要按其优先级进行安排,这就是为什么他们可以通过更高优先级的设施随时中断。例外情况是,如果您将操作系统和任务配置为不抢先但合作。然后可能还需要在代码中使用Schedule()点来放弃CPU。

在更大的系统以及具有MultiCore OS的MultiCore系统上,会有更高的任务数量,因为任务绑定到Core,尽管不同核心上的任务独立运行,但可能是内核同步。这也会对性能产生负面影响(Spinlocks可以阻止整个系统)

例如对于普通的BaseSW组件,可能存在一些循环任务,而一个仅针对通信组件(CAN Stack和Comm-Services)。我们通常将通信部分分开,因为它们需要一个特定的周期时间,如5..10ms,因为这个周期被Comm-Stack用于消息传输调度和接收超时监视。然后可能有一个任务来处理内存堆栈(Ea / Fls,Eep / Fee,NvM)。可能还存在某种基于事件的任务来触发某些HW控制和处理测量数据链,因为它们可能被放置在不同的核心上,并且可以通过彼此的开始或结束事件来调度。

另一方面,对于所有循环任务,您还应确保在此类任务中运行的函数运行时间不超过任务周期,否则由于多次激活同一任务而导致操作系统关闭,因为您的任务在实际完成之前再次启动。您可能会遇到一些限制,需要在应用程序预期的测量周期内完成一些任务。

在安全相关系统(ASIL-A .. ASIL-D)中,每个安全级别至少还有一个任务fpr,以便从干扰中获得自由。在AUTOSAR中,您已在OSApplication上指定了分配任务的内容,这也允许您配置MemoryProtection(例如,通过QM,ASIL-A,ASIL-B应用程序和任务对内存分区进行WrAccess)。那是OS的另一部分,操作系统必须在运行时根据OsApplications MemoryAccess设置重新配置MPU。

但同样,您创建的任务越多,RAM,ROM和运行时的使用率就越高。

  • RAM - 运行时调度结构和不同的任务堆栈
  • ROM - 实际的任务和事件配置
  • 运行时 - 任务的上下文切换以及调度本身

2
投票

正式地,您可以拥有无​​限数量的OsTasks。根据规格。 Os的配置可以有0 .. * OsTask。除此之外,(OS)软件使用任务索引变量的数据类型TaskType。因此,如果TaskType是uint16,则任务不能超过65535。除此之外,如果你有很多任务,你可能会重新考虑你的设计。

© www.soinside.com 2019 - 2024. All rights reserved.