全部学习汇总: https://github.com/GreyZhang/hack_autosar
继续学习AUTOSAR的文档,看一下《AUTOSAR_TPS_BSWModuleDescriptionTemplate》。
声明的内存部分的范围
更重要的是要注意,BSW 模块或 SWC 应仅声明那些实际上是其实现代码的一部分的内容。
备注:从这个要求,其实很容易推广现在的一些编码的要求。尽量引用别人的声明而不是直接自己做声明,这样可以避免很多问题的发生。
这尤其意味着,如果 SWC 需要 RTE 分配一些数据,例如共享校准参数或用于通过端口通信的缓冲区,则必须通过 RTE 生成的 BswImplementation 声明这些数据的内存部分,并且 代表模块 RTE 的实现。
MemorySection 的几个不同实例(也跨越模块或组件边界)可以引用同一个 SwAddrMethod,这表明这些抽象部分共享一个共同的处理方式,该方式进一步由 SwAddrMethod.sectionType 表征。
SwAddrMethod 的属性(即 sectionType、memoryAllocationKeywordPolicy、option 和 sectionInitializationPolicy)以及 MemorySection.alignment 对适当分配关键字的选择施加了限制。 它们的配置值。 这在[23]中进一步解释。
需要注意,SwAddrMethod 的 shortName 也与分配关键字有一些关系,因此与 MemorySection 定义的节名称也有一些关系,这是一个预期的冗余。SwAddrMethod 也由属于这些段的数据或可执行实体的“上游”规范引用,以便可以在流程的早期预定义段类型。
MemorySection 和 SwAddrMethod 的属性如下所示:
提供在代码或数据的实现中使用的抽象内存部分的描述。它应该由模块或组件的实现描述声明,它在其代码中实际分配内存。 这意味着在 RTE 分配的数据原型的情况下,生成的 RTE 实现描述应包含相应的 MemorySections。
属性“symbol”(如果缺少符号:“shortName”)定义了代码中使用的模块或组件特定的部分名称。 有关详细信息,请参阅文档“内存映射规范”。 通常,部分名称是根据以下模式构建的:<SwAddrMethod shortName>[_<further specialization nominator>][_<alignment>] 其中
• [<SwAddrMethod shortName>] 是引用的 SwAddrMethod 的 shortName
• [_<further specialization nominator >] 是一个可选的中缀,表示在同一实现描述的不同目的的多个 MemorySections 引用相同或相同命名的 SwAddrMethods 的情况下的特殊化。
• [_<alignment>] 是对齐属性值,仅适用于引用的 SwAddrMethod 的 memoryAllocationKeywordPolicy 值设置为 addrMethodShortNameAndAlignment MemorySection 的情况,用于实现 RunnableEntitys 和 BswSchedulableEntitys 的代码应具有符号(如果缺少:shortName ) 与引用的 SwAddrMethod 相同,以符合生成的 RTE 头文件。
除了上面描述的部分名称之外,在相应的宏代码中还使用了前缀以定义名称空间。默认情况下,此前缀由 BswModuleDescription 的 shortName 给出。SwComponentType。 它可以被前缀属性取代。
该原语表示内存部分内对象的对齐方式。该值以位数或 UNKNOWN(不推荐使用)、8、16、32 UNSPECIFIED 或 BOOLEAN 为单位。 数字的典型值为 8、16、32。
标签: xml.xsd.customType=ALIGNMENT-TYPE;
xml.xsd.pattern=[1-9][0-9]*|0x[0-9a-f]*|0[0-7]*|0b[0-1]*|UNSPECIFIED|UNKNOWN|BOOLEAN ; xml.xsd.type=字符串
疑问:从描述看,这个更像是存储的分配方式而不是对齐方式。对齐方式不是就是大端或者小端吗?
用于分配通用寻址方法,例如,公共内存部分,用于数据或代码对象。这些对象实际上可以存在于不同的模块或组件中。
标签: atp.recommendedPackage=SwAddrMethods
用于指定内存分配关键字的名称模式的枚举。
SectionInitializationPolicyType 描述了 MemorySections 的预期初始化。 以下值在 AUTOSAR 方法中标准化:
• NO-INIT:不执行初始化和清除。在向其中写入值之前,不应读取此类数据元素。
• INIT:用于每次重置为指定值(initValue) 时初始化的数据。
• POWER-ON-INIT:用于通过“Power On”初始化为指定值(initValue) 的数据。 注意:上电复位之间可能有几次复位。
• CLEARED:用于每次复位为零时初始化的数据。
• POWER-ON-CLEARED:用于通过“Power On”初始化为零的数据。 注意:上电复位之间可能有几次复位。
需要注意,这些值的定义类似于 XML 架构中枚举类型的表示形式,以确保向后兼容。
标签: xml.xsd.customType=SECTION-INITIALIZATION-POLICY-TYPE; xml.xsd.type=NMTOKEN。
小结:上电期间可能的几次复位,我理解可能会是涉及到BootLoader的一些处理。除此之外,还会有其他的吗?从描述的信息看,应该绝对不仅仅是这一种。
枚举以指定可以通过 AUTOSAR 内存映射在公共内存类中分配的数据的基本性质。
疑问:这里降了枚举,但是其实这个标题本身并不是完全跟枚举相关的。从表格的每一条信息看,应该这些名称是一个枚举的数值?
用于在正在使用的模块的源代码中定义内存部分名称的生成代码工件的前缀。
定义在生成代码工件时用作(取决于具体情况)完全替换或前缀的符号。
这部分主要是描述了为了支持分区描述的实现,工具应该支持的一些功能。从这里看,其实这里做了很大程度上的抽象处理以便在处理的时候能够跟硬件层面的信息进行解耦。