基于ETAS ISOLAR创建多核Bsw工程的流程

新建ETAS工程:

  1. 创建空工程

  2. 导入EBC

  3. 新建Component,并加入TopLevelComposition

  4. 创建System,设置System Category为SYSTEM_DESCRIPTION

  5. 在System下创建Mapping

  6. System用MappingEditor打开,设置Root Composition,新建Partition,将新建的Component加入Partition

  7. 做EcuadorExtract。如果想删除已有的EcuExtract,可以删除工程里的XXX_FlatMap.arxml / XXX_FlatView_SWCD.arxml / System_XX_EcuExtract.arxml

  8. Generate ECU Configuration

  9. EcuC中创建多个EcucPatition,OS中设置多核,然后生成Bsw的时候会给每个核生成一个EcuM模块。EcucPartition_0的BswModuleExcution设置为True,其余设置为False。

  10. OS 中创建多个OsApplication,OsApplication中引用EcucPartition。

  11. 生成Bsw.

  12. System中创建多个EcuPatition,然后把Component mapping到Partition上。

  13. Ecu抽取

  14. 创建OSTask并关联OsApplication

  15. Runable匹配给Task

  16. 生成RTE

新建多核工程跑不起来可能的原因:

  1. 有些多核共享的变量存放在某个核独享的RAM或Flash中,导致程序运行过程中数据访问失败。
  2. 链接脚本中Flash、RAM的地址和大小与芯片实际大小不一致,导致程序编译出来的地址有误。
  3. OS运行起来后,需要有一个自动运行的Init Task,用来执行初始化流程,启动RTE,启动OS调度表。

关于RTAOS的中断配置

Category1

Category1的中断不经OS,直接由MCU处理。该类型中断寄存器的初始化由OS执行,OS在中断向量表中不会为其生成中断向量,即中断向量表中该位置的中断向量是空的,需要在代码中手动定义中断处理函数,demo如下:

CAT1_ISR(ISR_Name)
{
	/* ISR handler */
}

CAT1_ISR的定义:

#define CAT1_ISR(x) void __interrupt(OS_ISRVEC_##x) \
  __vector_table(OS_TABLE_##x) \
  __bisr_(OS_CCPN_##x) x(void)  /* [$TargetTT 96] [$TgtCore 55] */

OS会为每个配置的Category1中断生成优先级宏定义,如下:

#define OS_ISRVEC_TOM0IrqGtmTOMSR1 (8U)
#define OS_CCPN_TOM0IrqGtmTOMSR1 (8U)
#define OS_TABLE_TOM0IrqGtmTOMSR1 (0U)
#define OS_ISRVEC_CanIrqCanSR4 (9U)
#define OS_CCPN_CanIrqCanSR4 (9U)
#define OS_TABLE_CanIrqCanSR4 (0U)
#define OS_ISRVEC_CanIrqCanSR5 (10U)
……

如果使用MCAL自带的中断处理代码,需要注意MCAL中配置的中断优先级要和OS 生成 的中断优先级一致,注意这里是生成而不是配置,因为在ETAS的RTAOS中,配置的中断优先级只是一个相对的中断优先级,只表征中断优先级的高低,生成代码时会自动对所有中断进行排序,按顺序重新生成中断优先级数值。

Category2

Category2的中断由OS统一处理,中断触发时会进入统一的OS中断处理函数,在该函数中根据OS中配置的中断名称调用相应的中断处理函数。OS会为该类型中断在中断向量表中生成中断向量,统一指向OS中断处理函数。如果使用MCAL的中断处理代码,这种情况下MCAL中配置的优先级是不起作用的,以OS中配置的为准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老孟的孟不是很老的孟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值