【VECTOR】:MemMap代码实施过程分析

为何要谈MemMap?

MemMap模块会生成内存映射的头文件给BSW和SWCs使用,换言之;
MemMap目的是预先定义一些关键字(宏),进而来指定OsApplication里面相关Code和RAM怎么存放。

至于实际存放在单片机的那个位置,需要vLinkGen来指定了(链接器),其他章节来讲。

MemMap代码实施过程分析

参考文档

C:\vector\CBD2201338_D00\Doc\UserManuals\UserManual_MemoryMapping.pdf

CBD2201338_D00是基于Renesa U2A8 (R7F702301BEBBA-C#BC6)开发的APP-SIP包。

相关缩写

在这里插入图片描述

xxx_MemMap.h索引关系

在这里插入图片描述
请牢记这张图的索引关系
考虑Vector也在迭代更新,不同SIP包的MemMap.h相关的包含关系有所不同

搜索 "MemMap_Common.h"3个文件中匹配到13次,总计查找4次)
  C:\vector\CBD2000298_D00\Applications\SipAddon\StartApplication\Appl\Include\MemMap_Common.h (匹配9次)
  C:\vector\CBD2201337_D00\Demo\DemoHsm\Appl\GenData\MemMap_Common.h (匹配2次)
  C:\vector\CBD2201338_D00\Applications\SipAddon\StartApplication\Appl\GenData\MemMap_Common.h (匹配2次)
搜索 "MemMap_Compatibility.h"2个文件中匹配到4次,总计查找2次)
  C:\vector\CBD2201337_D00\Demo\DemoHsm\Appl\GenData\MemMap_Compatibility.h (匹配2次)
  C:\vector\CBD2201338_D00\Applications\SipAddon\StartApplication\Appl\GenData\MemMap_Compatibility.h (匹配2次)
搜索 "MemMap.h"3个文件中匹配到6次,总计查找4次)
  C:\vector\CBD2000298_D00\Applications\SipAddon\StartApplication\Appl\Include\MemMap.h (匹配2次)
  C:\vector\CBD2201337_D00\Demo\DemoHsm\Appl\Include\MemMap.h (匹配2次)
  C:\vector\CBD2201338_D00\Applications\SipAddon\StartApplication\Appl\Include\MemMap.h (匹配2次)

举例说明:SWC模块

因为除了SWC模块,其他l类似于BSW等模块也存在MemMap相关宏的声明,及引用MemMap_Common.h,所以我们先以SWC模块来举例。

1、在DavinciDeveloper中创建一个SWC模块,名称为IPC,且定义相关runnable,如下图:
在这里插入图片描述

2、到DacinciCfg中执行Generate SWC,它会生成对应的SWC文件,IPC.c文件就是是其中一个;
它位于:Driver\CDD\IPC\IPC.c,当然路径是用户指定的

接下来我们开始盘它!

3、IPC.c的实现过程:
首先它包含了一个Rte_IPC.h

#include "Rte_IPC.h"
#include "TSC_IPC.h"

而Rte_IPC.h写法如下:

# define IPC_START_SEC_CODE
# include "IPC_MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */

FUNC(Std_ReturnType, IPC_CODE) IPC_DataSend_If_Operation(P2VAR(uint8, AUTOMATIC, RTE_IPC_APPL_VAR) p_msg, uint16 len, uint8 priority); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(void, IPC_CODE) IPC_Init(void); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(void, IPC_CODE) IPC_MainFunction(void); /* PRQA S 3451, 0786, 3449 */ /* MD_Rte_3451, MD_Rte_0786, MD_Rte_3449 */
FUNC(void, IPC_CODE) IPC_STB_MainFunction(void); /* PRQA S 3451, 0786, 3449 */ /* MD_Rte_3451, MD_Rte_0786, MD_Rte_3449 */

# define IPC_STOP_SEC_CODE
# include "IPC_MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */

因此它的作用我们可以总结为:对我们创建的runnable声明,且runnable是位于,以IPC_START_SEC_CODE开始,IPC_STOP_SEC_CODE结束的区间内

接着,我们回到IPC.c文件,发现相关runnable确实是被定义到了上面提到的字段中,如下图:
在这里插入图片描述

那么问题来了,START / STOP区间是如何实现的呢?

此时我们就要看IPC_MemMap.h这个文件,
它位于Davinci\Gen\Appl\GenData\Components\IPC_MemMap.h,也属于DavinciCfg生成的文件

逼不得已,我们需要看IPC_MemMap.h它的写法,写法如下

#ifdef IPC_START_SEC_CODE
# undef IPC_START_SEC_CODE /* PRQA S 0841 */ 
  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Autosar️研究员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值