ARM开发流程LDS相关解惑

2023-10-22 11:20
文章标签 流程 开发 相关 解惑 arm lds

本文主要是介绍ARM开发流程LDS相关解惑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在学习ARM CPU软硬件开发,对于软件代码执行的入口地址以及软件代码在SRAM中的位置分布有些疑惑,特将学习过程记录一下。

1. 程序入口地址

对于ARM CPU,异常向量表的地址是固定的,通常位于 0x00000000 或 0xFFFF0000。在这种情况下,无法在软件中随意更改异常向量表的入口地址。但是可以在链接脚本中设置代码和数据的位置,以便与固定的异常向量表地址兼容。此处不讨论个别CPU可以通过内部寄存器配置exception vector table起始地址的情况。
例如,软件可能需要将代码和数据放置在内存中的特定位置,以避免与异常向量表的地址冲突。

MEMORY
{VECTOR_ROM (rx) : ORIGIN = 0xFFFF0000, LENGTH = 0x100/* Other memory regions */
}SECTIONS
{.vectors :{. = ORIGIN(VECTOR_ROM);KEEP(*(.vectors)). = ALIGN(4);} > VECTOR_ROM/* Other sections */
}

在这个例子中,.vectors段被指定到地址0xFFFF0000。需要根据项目的具体需求和处理器的内存布局来调整这些值。

2. 代码位置分布

软件编译时,某些关键的程序想放在ITCM,其他不太关键的程序放在外部总线上SRAM,如何实现呢?
可以通过链接脚本和属性/修饰符在 C 或 C++ 代码中实现这一目标。链接脚本用于控制特定代码段和数据段的放置位置,而属性/修饰符可以标记特定的函数或数据,指示编译器和链接器将它们放置在特定的内存区域。
以下是一个例子,展示了如何执行这些操作。

  • 链接脚本
    可以使用链接脚本来分配内存区域并将特定的代码和数据段放置在那里。例如:
MEMORY
{ITCM (rwx)      : ORIGIN = 0x00000000, LENGTH = 64KEXTERNAL_MEMORY (rwx) : ORIGIN = 0x60000000, LENGTH = 1M
}SECTIONS
{.itcm_code :{. = ALIGN(4);*(.itcm_code). = ALIGN(4);} > ITCM.text :{. = ALIGN(4);*(.text). = ALIGN(4);} > EXTERNAL_MEMORY/* Other sections */
}

在这个例子中,我们定义了两个内存区域:ITCM 和 EXTERNAL_MEMORY,并在 SECTIONS 部分中使用它们。

  • 属性/修饰符
    可以使用属性/修饰符在 C 或 C++ 代码中标记函数,告诉编译器和链接器将它们放置在特定的段和内存区域。
__attribute__((section(".itcm_code"))) void criticalFunction(void)
{// Critical code here
}void normalFunction(void)
{// Non-critical code here
}

在这个例子中,criticalFunction 函数被标记为位于 .itcm_code 段,该段在链接脚本中被分配到 ITCM 区域。normalFunction 没有特定的标记,因此将默认放置在 .text 段和 EXTERNAL_MEMORY 区域。

通过组合使用链接脚本和属性/修饰符,可以控制特定代码和数据的放置位置,满足在 ITCM 和外部内存之间分配代码的需求。

这篇关于ARM开发流程LDS相关解惑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/261093

相关文章

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字