嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > [Classic AUTOSAR学习] SWC设计与应用(五)-- Internal Behavior

[Classic AUTOSAR学习] SWC设计与应用(五)-- Internal Behavior

SwcInternalBehavior被用来给AtomicSwComponentType定义行为,也即可以进行哪些操作,以何种方式进行操作等等。

从设计角度来说,在VFB阶段不用引入SwcInternalBehavior,相关开发人员可以在整个系统的应用层设计结束之后再来为每个SWC创建SwcInternalBehavior。

Runnable Entity

可运行实体(后文也称作RE),是SWC能提供的最小代码块,往往代表某一项具体功能,同时RE也是OS操作系统调度时使用的主体(实际代码中往往是OS和RTE共同完成调度,在RTE代码中调用相应的RE)。但是呢,CompositionSwCType自身是不能定义Internal Behavior的。

最上面的框代表了这个RE有什么功能:

  • IRV Access: 对哪些inter runnable variable有读操作权限,或者写操作权限,或者读写操作权限都有

  • Data Access: 对哪些S/R接口中的数据有读写需求,如果接口连接的是跨ECU的应用,代表着最终的读写操作需要在总线上传输数据

  • Server Call Point: 有哪些C/S操作(operation)需要完成

  • Mode Switch Point: 需要进行哪些模式转换操作

  • Mode Access Point: 读取某个模式状态

  • Parameter Access: 有哪些NvM量需要处理

至于Events,则代表着何时或者何种情况下需要进行一次RE的执行。

Minimum Start Interval代表RTE连续调用RE的最小间隔。

RE的symbol在一个EcuInstance范围内,名字应当保持唯一性。

Can Be Invoked Concurrently代表RE是否可以被并发调用。默认设置为False值。

当canBeInvokedConcurrently设置为False时

基于RTEEvent的概念,SwcInternalBehavior为每一个RE定义了从suspended迁移到to be started状态的条件。

当RE在to be started状态时,RTE可以决定去开始运行这个RE,从to be started到running状态之间的延迟时间,取决于RTE的调度策略,也即RE在OS task中的映射情况。

当RE返回(return)时,控制交还给OS,会从running状态迁移到suspended状态。如果是catgory 2的RE,当进入running状态后则不会再回到suspended状态。

被抢占时,他们也会进入preempted状态。

如果一个RE的canBeInvokedConcurrently设置为False,那么RTE会保证它不会被并发执行,也即这个RE无法被映射到两个不同的OS任务当中,RE内部的具体实现也无需考虑并发执行的情况。当RE在running状态,同时又因为收到其他请求导致希望并发执行时,RTE一般需要等待前一次执行结束,或者将当前请求置入队列。

当canBeInvokedConcurrently设置为True时

当设置为True时,是允许在不同的OS任务当中并发执行同一个RE的。

SWC自身的描述文件不会定义并发调用的限制次数,仅仅说明是否允许并发执行。

典型的应用场景是AUTOSAR service的RE实现,不同的SWC可以同时使用相同的AUTOSAR service。

集成人员可以决定,在这种情况下,AUTOSAR service的RE直接运行在调用这个服务的SWC的context内。对于Client/Server方式调用,这样的直接耦合关系是非常高效的,client和server端的连接可以直接将过程简化为函数的本地调用。

Runnable Entity的种类

RE可以被划分为如下种类:

Category 1: RE不能设置waitpoint,需要在有限时间内执行完毕。Category 1还被细分为1A和1B两个子类,1A的RE只能使用隐性(implicit) API,而1B除此之外可以调用server以及使用显性(explicit) API。

Category 2: 不同于Category 1,Category 2至少有一个wait point,一般这个类型的RE会存在loop循环,当wait point触发时会执行一次。

Runnable Entity的参数

只有由C/S操作调用的RE才能配置这个参数,这里截图为DLT service的例子,也即RE需要提供的参数。

Runnable Entity的激活原因

一个RE是可能被多个RTEEvent激活的,很多情况下也需要能在RE当中获取激活自己的RTEEvent的信息。例如,一个RE既可以周期触发执行,也可以在收到某个数据时被触发调用。

在一个RE中,这个bitPosition的范围为0~31,同时Symbol名也需要保持唯一性。

如果RTEEvent设置了Trigger角色的Wait Point,那么不应当设置Activation Reason, 因为对于有Wait Point的RE来说,它是已经被激活了的,只是会在Wait Point触发时继续执行,无需上文提及的激活原因。

RTE Event

RTE Event定义包含两部分:定义RTE Event;定义Event发生时RTE如何处理。

为RE设置Event时一般有下列种类:

  • AsynchronousServerCallRetrunsEvent: 异步调用结束时

  • DataSendCompletedEvent: 相关数据元素被发送后或错误发生时

  • DataWriteCompletedEvent: Implicit写操作成功,或者错误发生时

  • DataReceivedEvent: 相关数据收到时

  • DataReceiveErrorEvent: Com模块检测并提醒数据收到时有错误发生,并由RTE触发

  • OperationInvokedEvent: 客户端调用ClientServerOperation时

  • TimingEvent: 需要周期调用时

  • BackgroundEvent: 需要RE在后台执行时

  • SwcModeSwitchEvent: 状态变化时

  • ModeSwitchedAckEvent: 转换到某个状态或者发生错误时

  • ExternalTriggerOccuredEvent: external trigger发生时

  • InternalTriggerOccurredEvent: internal trigger发生时

  • InitEvent: partition开始运行或者重启时,作初始化用

  • TransformerHardErrorEvent: 收到数据应当触发C/S操作或者外部trigger并作transformation时,发生错误

Runnable Entity之间的通信

在一个SWC中,RE也能够互相通信,进行数据交换。

RTE需要提供同步机制,为RE保证数据交换的安全性,这个时候PortPrototype是不需要的。

如果时同一SWC的不同实例,RE相互通信时只能借由PortPrototype完成。

Port API Options

一般用于RTE生成接口时加入额外的参数,典型应用是配置DLT功能时,RTE生成代码时的第一个参数是对应APP的session id。

Service Needs

ApplicationSwComponentType与实际ECU硬件无关,但这些SWC可能需要用到由底层软件提供AUTOSAR Service给到自己,这个时候就需要用到ServiceNeeds。

只有AtomicSwComponentType和NvBlockSwComponentType可以连接到AUTOSAR service。

当SWC集成到某一具体ECU上时,需要为ServiceNeeds选择实际的ECU 配置选项。