自学内容网 自学内容网

LSL常见应用场景及示例<三>

目录

往期推荐

场景10:有一个项目,由于其规模和复杂性,被分为多个逻辑块,每个逻辑块都有自己的一组工程师负责。所有的块在最终定位整个应用程序之前都会以库的形式交付给我们。我们希望避免一组工程师意外使用了分配给其他组的资源,因此需要一种机制,将每组工程师的内存使用限制在定义好的内存块内。没有人可以进入其他人的应用程序块,也不允许某个块本身超过一定的大小。每个应用程序块必须通过填充模式进行扩展以达到这个大小。如何实现?

场景11:在我们的应用程序的内存映射中,有一些特定的内存部分必须被保留。除了通过绝对地址定位的数据外,任何数据都不能位于此范围内。是否有办法在链接脚本语言中实现这一点?

场景12:我们有两个组,这些组中的部分需要连续排序。这些组本身必须是连续的,但不需要按顺序排列。你建议我们使用什么样的段布局定义?


LSL常见应用场景及示例培训笔记<一>

LSL常见应用场景及示例培训笔记<二>

往期推荐

  1. ETAS工具链自动化实战指南<一>
  2. ETAS工具链自动化实战指南<二>
  3. ETAS工具链自动化实战指南<三>
  4. AUTOSAR工程师必读:Artop的核心功能
  5. Vector工具链自动化实战指南<一>
  6. isolar高手秘籍| ECU Configuration三分钟速成!
  7. 掌握核心步骤:RTA-BSW以太网配置全解析

场景10:有一个项目,由于其规模和复杂性,被分为多个逻辑块,每个逻辑块都有自己的一组工程师负责。所有的块在最终定位整个应用程序之前都会以库的形式交付给我们。我们希望避免一组工程师意外使用了分配给其他组的资源,因此需要一种机制,将每组工程师的内存使用限制在定义好的内存块内。没有人可以进入其他人的应用程序块,也不允许某个块本身超过一定的大小。每个应用程序块必须通过填充模式进行扩展以达到这个大小。如何实现?

解决方案

由于必须有一种方法来区分来自不同工程师组的部分,因此每个组的模块名称必须遵循命名约定。这个命名约定也会反映在部分名称中,从而简化每个组的选择语句。假设我们虚构的公司有es、dk和GM的开发团队,因此使用前几个字符来标识团队代码,后面跟上一个短横线,最后是模块名称:TeamCode-moduleName.c

下面是一个简化的示例。es团队编写了库模块 es-module.c,如下所示:

图片

使用以下命令将 es-module.c模块编译并打包进libes.a库文件:

图片

另一方面,dk团队编写了 dk-module.c,如下所示:

图片

使用以下命令将dk-module.c模块编译并打包进libdk.a库文件:

图片

GM团队的任务是将es和dk子团队的库链接到整体应用程序中,程序为 test.c,如下所示:

图片

事先商定,每个团队的应用程序块大小不得超过1k。还事先决定,es团队交付的库应驻留在地址 0xa0000400,而dk团队的库应驻留在地址 0xa0000800。最后,使用用 0x55 填充空白以满足所需的块大小。GM团队可通过以下section layout定义实现:

图片

场景11:在我们的应用程序的内存映射中,有一些特定的内存部分必须被保留。除了通过绝对地址定位的数据外,任何数据都不能位于此范围内。是否有办法在链接脚本语言中实现这一点?

解决方案


假设以下名为 test.c 的 C 模块:

图片

假设内存范围 0xA0088000 到 0xA00880FF 是保留内存,不允许用于标准的可重定位应用数据。可通过以下section layout定义实现:

图片

注意使用了 alloc_allowed=absolute,这允许绝对段定位在保留的地址范围内。如果省略这些关键字,将会导致错误消息。

场景12:我们有两个组,这些组中的部分需要连续排序。这些组本身必须是连续的,但不需要按顺序排列。你建议我们使用什么样的段布局定义?

解决方案

假设有以下名为 test.c 的 C 模块:

图片

可通过以下section layout定义实现:

图片

父组 P 将子组 C1 和 C2 定位在一个连续的地址范围内,但不一定按照上面定义的顺序排列。子组 C1 将 .bss.test.d 和 .bss.test.c 段顺序排列,同样地,子组 C2 将 .bss.test.b 和 .bss.test.a 段顺序排。             


原文地址:https://blog.csdn.net/2201_75514516/article/details/143056227

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!