ARM链接地址和烧写地址

ARM汇编概念(1): 什么是链接地址、运行地址、存储地址? 什么是位置无关码、位置有关码? ldr和adr的理解? ARM汇编概念(1): 什么是链接地址、运行地址、存储地址? 什么是位置无关码、位置有关码? ldr和adr的理解? 参考来源:http://blog.sina.com.cn/s/blog_93339c560102wjqm.html 链接地址: 在链接脚本里指定内存地址,编译时指定的代码运行时应该所处的内存地址。它是绝对地址(编译后的定值)。 运行地址: 当前代码运行时实际所处的地址。它是相对地址(相对于当前程序开始运行时的内存地址)。 存储地址: 代码烧写到ROM中的地址,比如NANDFLASH。 链接地 阅读详情

在ARM设计中,一般会涉及到链接地址和烧写地址,这两个地址概念很容易混淆,会认为链接地址就是烧写地址,这种理解是不全对的,下面就说一下自己的理解。

首先链接地址和烧写地址是两个范畴的东西,几乎没有关系,烧写地址,可以认为是物理地址,而链接地址则是虚拟地址,对于程序员而言,看到的大多是虚拟地址,一般虚拟地址经过MMU映射成具体的物理地址,今儿再去访问实际的外围。

链接地址可以理解成一个符号,因为一个可执行程序,一般需要经过预编译,编译,汇编,连接这几个过程,最后一个过程就是链接,就是把前三部分产生的所有.o文件,串起来,形成一个整体的程序,所以每个.o文件上都有一些的函数或者子程序,通过给定的链接地址,相当于从全局出发,给所有文件中的函数,统一编号,起了一个“名字”,名字的范围是0x0000 0000---0xFFFF FFFF,那么这个“名字”其实就是连接地址,如果MMU未打开,则连接地址就是物理地址,反之,链接地址是虚拟地址。

那么就有一个问题了,当程序开始执行时,CPU是通过链接地址进行访问具体的函数的,如果函数没有存到链接地址所映射的物理地址会出现什么结果呢? 答案很简单,那就是程序会跑飞,打个比方,CPU要访问38号房间的客人,但是客人没有“移驾”到38号,CPU又很呆,它就该懵了,也就乱了,那么这里“38号房间”就是链接地址,客人就是具体的函数名,所以在使用链接地址时,如果未打开MMU,那么需要将程序赋值到对应的物理地址处,若使用了MMU,则需要将程序复制到映射对应的物理地址处。

烧写地址就是实际的物理地址,这个是通过存储控制器进行访问的,而且一般的烧写软件是可以实现制定地址处烧写。

综上,烧写地址与链接地址有关系,但是关系并不是特别明显,对于程序员来说,用的是连接地址,但是需要设置缕清好链接地址与烧写地址的区别关系。

STM32F429-Discovery 使用stlink-1.2.0 在Linux下烧写调试RTEMS STM32F429-Discovery默认带有STLink,可以在Linux环境下使用。我用的是VM CenOS 6.6。 编译:stlink-1.2.0 下载最新的或是stlink-1.2.0 release https://github.com/texane/stlink 解压缩。 在配置安装前,需要安装环境需要的工具软件: libusb-1.0或更高  与 pkgco 阅读详情

相关推荐

arm链接文件规则

介绍了arm架构中使用的链接脚本的使用规则,比如代码段放置在存储单元的什么地方,数据段放在存储单元的什么地方等,以及语法规则。

链接地址

位置无关码:CPU取指时,总是相对于本条执行指令的相对地址去取指。比如指行一个ADD指令时,PC要取下一指令的地址,就在原来的基础上+4。这就不管你代码放在存储器的任何位置,只要他们的相对地址没有改变,就能正常执行程序。一般上电复位那几条语句就必须是位置无关码指令。位置相关码:可以这样来说,就是CPU每次取指都从绝对位置去取,而不是上面的相对位置。这个绝对地址就是相对起始地址0来说的。这样,就要求

tangg555的博客 757

ARM LD链接文件说明

对于ARM LD链接文件,有很详细的解释。

ARM的几个地址概念以及adr,ldr寻址

一.首先熟悉几个arm地址相关的概念: 首先arm地址有三个地址概念:编译地址、 期望运行物理地址、实际运行物理地址、相对地址、绝对地址、位置无关 编译地址 :编译阶段的生成地址,其是相对地址 ,有些地址还没确定,如调用其他.O文件中的函数或库函数 期望运行物理地址 :链接阶段生成的地址(期望绝对地址 ),会确定编译阶段没有确定的地址,并会根据链接器假设期望的程序烧录

记录点滴,静心学习 1044

STM32CUBEMX 使用教程5 — DMA配置 & 串口结合DMA实现数据搬运

DMA(Direct Memory Access),直接存储器访问(或数据搬运),是STM32中很实用的一个外设。DMA 传输数据方式不需要 CPU 参与控制传输,也不用中断处理的方式进行数据搬运处理,纯粹通过硬件为 RAM 与 I/O 设备之间开辟一条直接传送数据的通路,使 CPU 的效率大大提高。

weixin_43866583的博客 1500

SPSS&Mplus—共同方法偏差(Common Method Bias)控制与检验

共同方法偏差(Common Method Bias)的控制方法:程序控制(Procedural)和统计控制(Statistical)。

m0_54401011的博客 1万+

ARM链接器(一):链接的一般概念

ARM链接器可以把编译(或汇编)生成的多个目标文件和所需要的多个库文件链接在一起,生成可执行的ELF格式的输出文件。在链接过程中,如果在链接器的输入文件中同时包含ARM代码和Thumb代码,链接器可以自动为实现不同代码之间的链接生成一个veneer文件。该文件用来帮助目标处理器实现两种不同状态之间的转换,并可以实现长跳转。链接器还可以为指令代码段和或数据段指定在目标存储器中的位置。1

昔日之的专栏 4611

H3C设备VRF配置实战:5步搞定多业务网络隔离(附排错技巧)

本文详细介绍了在H3C设备上配置VRF(虚拟路由转发)实现多业务网络隔离的实战方法。通过五步配置流程,从创建VPN-instance、绑定接口到配置独立路由表,帮助网络工程师在单台设备上构建逻辑隔离的企业级网络,并分享了高级路由配置与常见排错技巧。

gold8的专栏 937

ARM中的链接地址(为什么ARM要重定位)?

在考虑为什么要重定位的问题之前,我们首先要明白一下几点:          1. 链接地址的定义:我自己理解是,程序被定义的开始执行的内存地址。          2. 当ARM从nandflash启动的时候,CPU所做的工作是将nandflash中的前8K代码自动的复制到6410的0地址(即Stepping Stone)中去,然后从0地址开始执行程序。          3. 程序在

luomuxiaoxiao98的专栏 4450

Unity3D实战:5分钟搞定RTSP监控视频播放(附完整代码)

本文提供了一套在Unity3D中快速集成RTSP监控视频播放的实战方案。通过采用LibVLCSharp for Unity这一成熟稳定的跨平台中间件,开发者可以轻松实现RTSP流的解码与渲染,并附有完整的C#代码示例,帮助用户在5分钟内完成集成,适用于智慧园区、安防监控等3D可视化场景。

weixin_29001655的博客 191

飞腾Ubantu22.04.3安装OpenNebula测试

因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包,借此用源码编译进行测试。

坚持就是胜利的博客 1010

ARM 链接地址和烧写地址

在ARM设计中,一般会涉及都一个链接地址,这个链接地址和烧写地址很容易混淆,会认为链接地址就是烧写地址,这个是错的,下面说的是个人的一些认识,可能会有一些错误,说的也可能不专业,但是对于初学者,可以帮助理解。     首先链接地址和烧写地址是两个范畴的东西,几乎是没有关系的,烧写地址,可以认为是物理地址,而链接地址可以认为是虚拟地址,对于程序员来说,看到的是虚拟地址,一般虚拟地址经过MMU映射成

猪哥的专栏 1380

VS2019中C++动态链接库(DLL)的创建与调用

VS2019中C++动态链接库(DLL)的创建与调用,及一些进阶技巧。

qq_42232522的博客 7563

arm里面的链接地址和烧写地址

在考虑为什么要重定位的问题之前,我们首先要明白一下几点: 1. 链接地址的定义:我自己理解是,程序被定义的开始执行的内存地址 在ARM设计中,一般会涉及都一个链接地址,这个链接地址和烧写地址很容易混淆,会认为链接地址就是烧写地址,这个是错的,下面说的是个人的一些认识,可能会有一些错误,说的也可能不专业,但是对于初学者,可以帮助理解。     首先链接地址和烧写地址是两个范畴的东西,几乎是没有关...

明天你好 1256

Unity热更实战:用YooAsset+HybridCLR实现小游戏资源与代码双更新(含避坑清单)

本文详细介绍了Unity小游戏开发中如何通过YooAsset与HybridCLR实现资源与代码双热更新方案。内容涵盖环境配置、架构设计、微信小游戏专项优化、热更代码工程化实践及真机调试技巧,帮助开发者解决审核周期长、紧急修复等痛点,提升更新效率与稳定性。

weixin_42520025的博客 502

YOLOv13涨点改进 | 全网独家创新、HyperACE改进、注意力改进篇 | CVPR 2025| 引入LRSA局部区域自注意力模块,能提升其在细节捕捉、小目标检测和长距离依赖建模方面的能力

本文提出将LRSA(局部区域自注意力)模块集成到YOLOv13中,通过局部特征交互增强细节捕捉能力、小物体检测精度和长距离依赖建模。LRSA模块采用重叠图像块处理策略,在保持计算效率的同时提升复杂背景下的检测性能。文章详细介绍了模块结构、原理优势,并提供了三种改进方案:1)在主干网络添加LRSA层;2)将关键模块替换为DSC3k2_LRSA;3)采用HyperACE_LRSA结构。配套提供了完整的PyTorch实现代码和YAML配置文件,展示了该模块如何通过局部注意力机制平衡检测精度与推理速度。

Ai缝合怪、助力小伙伴高效发论文 345

ARM(IMX6U)裸机汇编LED灯实验——驱动编写、编译链接起始地址、烧写bin文件到SD卡中并运行

1. I.MX6ULL的初始化 ①、使能时钟 ②、配置 GPIO_I003 PIN的复用为GPIO ③、配置 IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03的电器属性 ④、配置GPIO功能,设置输入输出 ⑤、设置GPIO_DR寄存器的bit3,1表示输出高电平,0表示输出低电平 整个汇编代码(.s文件) 2. 编译驱动 交叉编译器的准备 代码编译 1.把 .s 文件编译成 .o文件 2.把 .o文件链接成.elf格式的可执行文件 3.arm-linux-gnueabihf-objcopy

zhuguanlin121的博客 1439

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ARM开发板代码编译与烧写实战:从源码到SD卡部署的完整指南

本文详细介绍了ARM开发板代码编译与烧写的完整流程,从环境准备、交叉编译工具链安装到SD卡烧写与系统部署。通过实战案例和Makefile自动化,帮助开发者掌握从源代码到可执行文件的编译技巧,以及高效的烧写方法,提升ARM开发效率。

silver的专栏 781

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

x86_64编译ARM交叉编译LED汇编程序

x86_64编译ARM交叉编译LED汇编程序

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 1378

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

嵌入式Linux Makefile 遇到的问题

arm-linux-ld -Ttext 0 -Tdata 0xee0 此处 -Tdata 0xee0是将数据段开始存放地址指定在0xee0,因为程序编译出来数据段和代码段中间有空余部分,导致最终的bin文件很大,烧写要很长时间。 使用这个要注意指定的存放地址,防止数据段将代码段覆盖 ...

雪夜的博客 249

Linux之ARM(MX6U)裸机篇----2.汇编LED驱动实验

汇编基础,编译执行汇编程序

weixin_60444711的博客 623

I.MX6U从SD卡启动程序过程

启动流程

qq_42745986的博客 582

【嵌入式开发】ARM 代码搬移 ( ARM 启动流程 | 代码搬移 起点 终点 | 链接地址 | 汇编代码 )

一. ARM 启动流程 1. 各种类型开发板启动流程 ( 1 ) 2440 开发板启动流程简介 ( ① Nand Flash 拷贝 4 KB -> SRAM 垫脚石 | ② PC 指向 0 地址 即 SRAM 起始地址执行 | ③ 初始化内存 拷贝 后续指令到内存执行 ) ( 2 ) 6410 开发板启动流程简介 ( ① 上电 运行 SROM 的 BL0 程序 | ② NandFlash -> SRAM 拷贝 8KB 指令 | ③ 执行 SRAM 指令 拷贝其余 BL 指令到内存中执行 ) ( 3

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2588

S32K144 指定烧写文件某个地址的数据

在S32K144_64_FLASH中定义如下段是一个链接器脚本指令,用于确保指定的段(这里是)在链接过程中不会被丢弃。即使该段中的内容没有被其他部分引用,使用KEEP可以强制保留它,确保其在最终的输出文件中存在。

weixin_46388080的博客 577

【2018-09-26】嵌入式软件开发中文件格式

介绍嵌入式开发中常见的文件格式,包括.bin、.elf、.hex、.s19等格式的特点和用途。了解这些格式对于正确烧录固件和调试嵌入式系统至关重要。

cstriker1407的专栏 226

嵌入式Linux系统开发笔记(五)

嵌入式Linux汇编 LED 灯实验

SudekiMing的博客 3167
上一篇: ARM 汇编指
下一篇: 通俗理解内存和硬盘的区别
ARM_Tutor
博客等级 码龄12年 12粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值