首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AUTOSAR支持的最大任务数

问AUTOSAR支持的最大任务数
EN

Stack Overflow用户
提问于 2017-07-03 20:31:23
回答 3查看 1.5K关注 0票数 2

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

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

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

非常感谢您的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-12 13:55:37

似乎各不相同。我发现ETAS RTA提供1024项任务*,而向量的MICROSAR有65535。

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

代码语言:javascript
复制
StatusType ActivateTask (TaskType TaskID)
StatusType TerminateTask (void)
StatusType Schedule (void)
StatusType GetTaskID (TaskRefType TaskID)
StatusType GetTaskState (TaskType TaskID, TaskStateRefType State)

*链接今后可能会发生变化,但很容易直接搜索ETAS页面,以获取手册等:center.php

票数 5
EN

Stack Overflow用户

发布于 2017-07-18 00:20:54

嗯,我们还在一个嵌入式汽车世界,而不是在个人电脑上。通常在任务的数量和调度所需的时间,以及配置所使用的RAM/ROM和运行时资源之间存在权衡。

如前所述,如果您只需要一个简单的定时循环,其间有一些中断,那么有一个任务可能是可以的。这也可能是足够的,有3个任务运行在5ms,10 5ms和20 5ms周期。但是,您也可以在像这样简单的情况下用单个5ms任务来调度这个任务:

代码语言:javascript
复制
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或20 be运行一次,则将这些可运行项放入相应的任务中。

旧的OSEK也有一个基本任务和扩展任务的概念,其中只有能够在OsEvents上做出反应的扩展任务。此任务可能不会循环运行,但仅在配置的OsEvents上运行。您将有一个,在那里,任务或多或少已经停止,只有在事件到达时OS才会唤醒它。还有OSALARM,它可以直接触发OsTask的激活,也可以通过事件间接触发,因此,您可以在来自OsAlarm的循环事件或由其他任务或ISR设置的OsEvent上等待相同的等待点。

代码语言:javascript
复制
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中完成/生成的,其基础是为SWCs配置的事件和事件到任务映射等。

任务主要是由他们的优先级来安排的,这就是为什么他们可以在任何时候被一个更高优先级的人打断。这里的例外是,如果您将您的操作系统和任务配置为不是抢占性而是协作性的。然后,可能还需要在代码中使用Schedule()点,以放弃CPU。

在更大的系统上,以及在带有MultiCore操作系统的MultiCore系统上,都会出现更多的任务,因为任务被绑定到内核上,尽管不同内核上的任务独立运行,除了内核间的同步。这也会对性能产生负面影响(自旋锁可以阻止整个系统)

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

另一方面,对于所有循环任务,还应确保在此类任务中运行的函数不超过任务周期,否则由于同一任务多次激活而导致OS关闭,因为您的任务在实际完成之前再次启动。您可能有一些约束,需要在应用程序预期的度量周期中完成一些任务。

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

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

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

Stack Overflow用户

发布于 2017-07-04 07:56:51

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44893512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档