目录
一、Init_RunnableEntity与Init_OsTask
一、Init_RunnableEntity与Init_OsTask
按照AUTOSAR规范在Matlab/Simulink中搭建ASW层功能模型后,生成的ASW代码里至少会有两种运行实体(Runnable Entity),一类是功能运行的主体函数,另一类是Init_RunnableEntity()。后者常用于应用功能的初始化。对于这类Init_RunnableEntity(),通常会在OsTask中专门创建一个Init_OsTask类型的任务,并将Init_RunnableEntity()映射至该类任务中。
初始化函数的特性,只需要在重上电后运行一次。如无特殊配置,细心的朋友会发现其实该类Init_OsTask并不会被执行,进而影响应用功能的正常运行。
二、如何实现Init_OsTask的自动运行
本文以ETAS工具ISOLAR A/B为例:
1. 进入模块Os->OsTasks->Init_OsTask,为该task添加OsTaskAutostart,并在其中引用OSDEFAULTAPPMODE。
2. 打开Open RTA Code Generator dialog...选项 -> RTA-OS -> Configure Commandline Arguements -> Options -> Additional -> 勾选Keep source files -> Apply。
3. Generate OS,为OS层的变动重新生成代码。
4. 验证Init_OsTask会自动执行:
1)打开Os_Cfg.c,搜索函数
FUNC(void, OS_CODE) Os_StartOS_StartAuto(const Os_CoreConfiguration *os_current_core_const, Os_ControlledCoreType *os_current_controlled_core)
里面会看到所有会自动执行的OsTask,若将Init_OsTask放在Core 0,则会看到
if (0U == os_current_core_const->core_id) {
Os_ActivateTaskKL(&Os_const_tasks0[n], os_current_core_const, os_current_controlled_core);
}
其中,n代指编号,索引Os_const_tasks0[n],即为对应的Init_OsTask。说明该任务会在重上电时自动执行。