当前位置: 首页 > news >正文

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 段顺序排。             


http://www.mrgr.cn/news/53117.html

相关文章:

  • pip3安装报error: externally-managed-environment,删除EXTERNALLY-MANAGED即可
  • 成语积累学习
  • PHP-laravel框架
  • 苍穹外卖学习笔记(二十六)
  • Null-text Inversion for Editing Real Images using Guided Diffusion Models
  • AI 自学 Lesson2 - 回归(Regression)
  • Doctype? 严格模式 、混杂模式?
  • 微信小程序用开发工具在本地真机调试可以正常访问摄像头,发布了授权后却无法访问摄像头,解决方案
  • 【热门】智慧果园管理系统解决方案
  • 如何高效规划千人大会?数字化会议管理的实战经验分享!建议收藏!
  • Python 工具库每日推荐【Jinja2 】
  • canvas鼠标点击特效
  • 软考中级科目怎么选?软考中级证书有什么用?
  • 八小时筹百万美金!智能指环届的黑马
  • 近屿智能荣登2024 CHINA AIGC 100榜单,助力AI产业高质量发展
  • 基于51单片机的数字电容表(程序+Protues仿真+报告)
  • 无人机载30倍三光跟踪吊舱-千里眼航空
  • LeetCode:3191. 使二进制数组全部等于 1 的 最小次数(贪心 java)
  • RabbitMQ队列
  • 在OLED屏上通过串口来显示视频的代码(python+C)