ADS下的分散加载文件应用实例
ARM中的RO、RW和ZI DATA说明
;
}
Prog2:
#include <stdio.h>
const char a = 5;
void main(void)
Prog3:
#include <stdio.h>
void main(void)
{
;
}
Prog4:
#include <stdio.h>
3; ZI
再看两个程序,他们之间的差别是一个未初始化的变量“a”,从之前的了解中,应该可以推测,这两个程序之间应该只有ZI大小有差别。
Prog3:
#include <stdio.h>
void main(void)
实际上,RO中的指令至少应该有这样的功能:
1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。
2.
将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中
Total RO Size(Code + RO Data) 1008 ( 0.98kB)
Total RW Size(RW Data + ZI Data) 97 ( 0.09kB)
Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB)
Code RO Data RW Data ZI Data Debug
948 60 1 96 0 Grand Totals
================================================================================
从ADS到RealViewMDK_上_
ARM ABI 是 Application Binary Interface for t he ARM Architect ure 的简称 ,是一系列 ARM 体系架构标准 的集合 ,囊括了 ARM 二进制代码交互 、开发工具以及操 作系统等方面 。
对目标文件进行链接之前 , MD K 工具的链接器会严 格检查各个目标文件 (object s) ,判断它们是否复合 ARM 体系结构的 ABI 标准 。而 MD K 与 ADS 编译 、链接工具 所遵循的 ARM ABI 是不同版本的 ,所以将 ADS 的遗留 工程直接移植到 MD K 并进行链接时 ,用户可能会遇到如 下的错误或者警告 : Error : L6238 E : foo. o ( . text ) contains invalid call f rom ’ ~
2. 4 分散加载注意事项
MD K 同样支持 ADS 的分散加载文件 ,但是当分散加 载文件中涉及到必须被放置 ROO T Region 中的 C 库函数 时 ,有时用户需要做少量修改 。
ROO T Region 的 load address 与 execution address 相 同 ,所以这部分代码在系统初始化时无需进行搬移操作 , 很多库函数 (如__scatter 3 . o 或者__ dc 3 . o) 必须被放置 在 Root Region 中 。
从 ADS 到 Re alVi e w MD K(上)
■ A RM 中国 姜宁
1 ARM 微控制器开发的新工具
Keil 是颇受业界欢迎的 51 单片机开发工具 ,它拥有 流畅的用户界面与强大的仿真功能 。ARM 将 Keil 公司 收购之后 ,正式推出了针对 ARM 微控制器的开发工具 RealView Microcont roller Develop ment Kit ( 简 称 Real2 View MD K 或者 MD K) ,它将 ARM 开发工具 RealView Develop ment Suite ( 简称 RVDS) 的编译器 RVCT 与 Keil 的工程管理 、调试仿真工具集成在一起 ,是一款非常强大 的 ARM 微控制器开发工具 。
分散加载文件浅释
销售:
电话:(020)22644249 22644399 22644372 22644261 28872524 28872342 28872349 28872569 28872573 38601786
维修:
电话:(020)22644245
产品应用笔记
在 Keil/ADS/IAR 等编译工具中,可通过分散加载机制实现。分散加载通过配置文件实 现,这样的文件称为分散加载文件。本文重点介绍 Keil 的分散加载文件配置。
工程技术笔记
©2008 Guangzhou ZHIYUAN Electronics CO., LTD. 1
广州周立功单片机发展有限公司
2.2
变量完成初始化的地方........................................................................................... 2
2.3
ZI-Data 变量初始化方式......................................................................................... 3
日期 2011/10/24
分散加载文件浅释
ARM 嵌入式开发
原因 创建文档
产品应用笔记
©2008 Guangzhou ZLGMCU Development Co., LTD. i
广州周立功单片机发展有限公司
分散加载文件浅释
ARM 嵌入式开发
销售与服务网络(一)
广州周立功单片机发展有限公司
地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630 电话:(020)38730916 38730917 38730972 38730976 38730977 传真:(020)38730925 网址:
Keil分散文件加载
Keil分散文件加载分散加载能够将加载和运行时存储器中的代码和数据描述在被称为分散加载描述文件的一个文本描述文件中,以供连接时使用。
(1)分散加载区分散加载区域分为两类:? 加载区,包含应用程序复位和加载时的代码和数据。
? 执行区,包含应用程序执行时的代码和数据。
应用程序启动过程中,从每个加载区可创建一个或多个执行区。
映象中所有的代码和数据准确地分为一个加载区和一个执行区。
(2)分散加载文件示例ROM_LOAD 0x0000 0x4000{ROM_EXEC 0x0000 0x4000; Root region{* (+RO); All code and constant data}RAM 0x10000 0x8000{* (+RW, +ZI); All non-constant data}}(3)分散加载文件语法load_region_name start_address | "+"offset [attributes] [max_size]{execution_region_name start_address | "+"offset [attributes][max_size] {module_select_pattern ["("("+" input_section_attr | input_section_pattern)([","] "+" input_section_attr | "," input_section_pattern)) *")"]}}load_region:加载区,用来保存永久性数据(程序和只读变量)的区域;execution_region:执行区,程序执行时,从加载区域将数据复制到相应执行区后才能被正确执行;load_region_name:加载区域名,用于“Linker”区别不同的加载区域,最多31个字符;start_address:起始地址,指示区域的首地址;+offset:前一个加载区域尾地址+offset 做为当前的起始地址,且“offset”应为“0”或“4”的倍数;attributes:区域属性,可设置如下属性:PI 与地址无关方式存放;RELOC 重新部署,保留定位信息,以便重新定位该段到新的执行区;OVERLAY 覆盖,允许多个可执行区域在同一个地址,ADS不支持;ABSOLUTE 绝对地址(默认);max_size:该区域的大小;execution_region_name:执行区域名;start_address:该执行区的首地址,必须字对齐;+offset:同上;attributes:同上;PI 与地址无关,该区域的代码可任意移动后执行;OVERLAY 覆盖;ABSOLUTE 绝对地址(默认);FIXED 固定地址;UNINIT 不用初始化该区域的ZI段;module_select_pattern:目标文件滤波器,支持通配符“*”和“?”;*.o匹配所有目标,* (或“.ANY”)匹配所有目标文件和库。
MTK的Scatter file
MTK的Scatter file因为我的图片文件较大,容量超过了14M,所以改用32MRom+8M Ram,scatter文件我只改了3个地方:1.ROM总大小,即把ROM 0x00000000 0x00e00000改成了ROM 0x00000000 0x01e00000(由14M->30M);2.把ROM的4个分区都改成了8M,即:分区1:ROM0x00000000 0x00400000改成了ROM 0x00000000 0x00800000(4M->8M);分区2:ROM2+0x00x00400000改成了ROM2+0x00x00800000(4M->8M);分区3:ROM3+0x00x00400000改成了ROM3+0x00x00800000(4M->8M);分区4:ROM4+0x00x00400000改成了ROM4+0x00x00800000(4M->8M);3.把内存总大小改成了8M,原来才4M:我把DUMMY_END 0x08400000 0x04改成了DUMMY_END 0x08800000 0x04这样改后,我的16M bin档烧进去后,还是开不了机。
超过14M原因是图片较大。
请教各位高手,我这样改Satter 文件有错没有?要怎样改呀,请指点!请按以下我说的去分析这个问题.1.首先,使用大的FLASH,改scatter文件只改结束地址就OK,所以只要做你所说的第一步。
后面的是按照偏移量自动去算的,除非是加特殊的第三方软件,一般是不用修改的,dummy end也不用去改,不影响。
你用的FLASH一般是由NOR+SDRAM组成。
我们这里只讨论NOR的部分。
NOR里确定code region是最优先的。
你的情况是需要腾出一个大于14M的空间。
那么我们假如用20M。
那结束地址就是00001400000.2.然后再说为什么开不了机的问题。
因为你的FAT和NVRAM及Z盘的配置有问题。
你用去30M给BIN,那就余下2M给NVRAM+Z+FAT.你认为够么。
ADS软件的使用手册编写及应用_1_
ADS软件的使⽤⼿册编写及应⽤_1_ADS软件的使⽤⼿册编写及应⽤⼀.关于ADS软件⼀)ADS中的projects当⽤户对ADS中的designs进⾏建⽴,模拟和分析以完成设计任务时,将会产⽣⼀定量的数据,⽽projects正是对这些数据进⾏⾃动的组织和存储。
⼀个project包括:电路(circuit),版⾯(layout),模拟(simulation),分析(analysis)以及由于⽤户建⽴的designs和projects之间的连结⽽产⽣的designs的输出信息。
使⽤ADS的主窗⼝可以建⽴或打开projects。
当⽤户登陆ADS时,主窗⼝将被打开。
⼆)ADS中的designsADS中的designs是⽤来存储⽤户为完成设计任务⽽⽣成的原理图及版⾯设计信息。
⼀个designs包括:⼀个单独的原理图或电路图,或者包括若⼲原理图或电路图嵌⼊式的包含于⼀个单独的design中。
所有的designs都可以直接从主窗⼝打开或者从design窗⼝打开。
在⼀个design窗⼝中,⽤户可以做以下事情:建⽴或修改电路图和布线图增加变量和等式配置电路元件和模拟控制器制定版⾯,选择参数添加注释以及例证从电路中产⽣版⾯(版⾯中产⽣电路图)三)ADS中的模拟ADS软件提供模拟控制器功能,以便⽤户可以添加或配置模拟来测试⽤户的设计。
对于DSP设计来说,当⼀个模拟/射频设计仿真需要⼀个或多个不同的控制器时,就需要⼀个数据流控制器。
⽤户可以⾃⼰添加合适的控制器,也可以插⼊⼀个包含合适控制器的模板(template)。
模拟控制器的分类:1.数据流控制器:在使⽤Agilent Ptolemy模拟器时,⽤来控制混合同步数字信号来进⾏数字信号处理。
适⽤于所有的DSP设计。
2.DC :是射频/模拟电路设计模拟的基本控制器,提供拓扑检测和直流分析的功能。
适⽤于所有的射频/模拟设计。
3.AC:获得⼩信号转换参数,如电压增益,电流增益,线性电压或电流噪声。
ADS中zap文件的使用
檔案就匯進去了.接下來請看後面圖示
接下來
接下來新開一各new design(一定要開一各新設計檔,不能在bfg425w的檔案自己拉自己)
一開始先將我給你的bfg425wzap存到你放ads模擬的user資料夾裡面像我是灌在d槽的話就會在d槽下面有一各user資料夾在users裡面還有一各default資料夾裡面存的都是ads模擬的各個project的資料夾接下來打開ads的主視窗做以下動作
ADS中zቤተ መጻሕፍቲ ባይዱp文件的使用
一開始先將我給你的bfg425w.zap存到你放ADS模擬的USER資料夾裡面,像我是灌在D槽的話,就會在D槽下面有一各USER資料夾,在users裡面還有一各default資料夾,裡面存的都是ADS模擬的各個Project的資料夾,接下來打開ads 的主視窗,做以下動作.(假設你灌ads在c槽,你就要在c槽裡面進行這些動作)
ADS1.2错误解决办法
ADS1.2错误、警告解决1. Warning : L6305W: Image does not have an entry point.(Not specified or not set due to multiple choices)使用分散加载文件的时候,会提示这样的警告。
在ARM Linker的Equivalent Command Line的框里加入: -entry 0x02. Error : C3028E: <argument 1 to 'sprintf'>: implicit cast of pointer to non-equal pointer调用ADS内部函数sprintf时,参数类型错误。
因为sprintf里面的参数是char类型的指针,所以可以在参数前加上(char*)强制转换。
3.ARM7+UCOS+ZLG/GUI的时候,如果画窗口的函数放在第一个任务的时候就没法画窗口。
把任务堆栈改大小为64就可以了.4.自己写的输出字符串函数里面的字符串参数不可以用 " " 括起来,会提示implicit cast of pointer to non-equal pointer。
原因是因为我写的输出字符串函数的参数是unsigned char 类型,而用" "括起来的字符是char类型的,所以类型不对。
修改一下就可以了。
问题5:用RealView mdk3.70编译完,两个软件联机调试,显示正常,但是直接将生成的hex文件,加载到lpc2106里就没有显示了?(MDK3.20正常)解决: 在STARTUP.S里:;未定义指令UndefinedB Undefined ;死在这里了,我将Undefined换成ResetInit后,执行正常------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------问题6:移植了UC/GUI到ARM7上,在PROTEUS上仿真,使用UC/GUI自带的例子,不能动态显示。
ADS1.2_map文件说明
首先声明,本文 MAP 文件是指包括了映像文件信息图和其他信息(更多信息可以 通过增加其他参数获得)的一个映射文件,为叙述方便笔者称为 MAP 文件,读者不必 较真。
在引入 MAP 文件以前对几个概念做一下说明。
段(section):描述映像文件的代码或数据块。 输入段(input section):它包含着代码,初始化数据或描述了在应用程序运 行之前必须要初始化为 0 的一段内存。 输出段(output section):它包含了一系列具有相同的 RO,RW 或 ZI 属性 的输入段。 RO:是 Read-only 的简写形式,包括 RO-DATA 和 RO-CODE。 RW:是 Read-write.的简写形式,包括 RW-DATA 和 RW-CODE,RWDATA 由程序初始化初值。 ZI:是 Zero-initialized 的简写形式,由编译器初始化为零。 加载域(load view):保留应用程序的代码和数据(典型应用为 ROM) 执行域(executive view):在程序执行的同时保留了程序的代码和数据。在 应用程序启动 期间,每个加载域都可创建一个或多个可执行域。
这里首先把前面提到的一些概念做一下对应,即对号入座
CODE 是 RO-CODE 同义词,也是.text 同义词,反之亦然; CONST 是 RO-DATA 同义词,也是. constdata 同义词,反之亦然; DATA 是 RW-DATA 同义词,也是.data 同义词,反之亦然; ZI 是.bss 的同义词,反之亦然
(2)totals--为输入对象文件和库,列出代码和数据(这里的数据包括,RO 数 据,RW 数据,ZI 数据和 Debug 数据) 总的大小;
(3)unused--列出由于使用-remove 选项而从映像文件中被删除的所有未使用段
ADS开发环境及AXD调试工具的使用
ADS开发工具及AXD调试工具的使用一、ADS开发工具的使用1、ADS1.2的安装:ADS1.2 /SET UP,之后选择CRACK/LICENSE.DAT2、将LPC2300的工程模板《ARM Executable Image for LPC2300》拷到ADS1.2的安装目录下,即:C:/Program File/ARM/ADSv1_2/Stationery3、建立工程文件1)打开CodeWarrior for ARM Developer Suite v1.22)点击File New…1)ARM Executable Image:用于由ARM指令的代码生成一个ELF格式的可执行映像文件2)ARM Executable Image for LPC2300:LPC230的工程模板3)ARM Object Library:用于由ARM指令代码生成的一个armar格式的目标文件库4)Empty Project:用于创建一个不包含任何库和源文件的工程5)Makefile Importer Wizard:用于将Visual C的nmake或GNU make文件转入到CodeWarrior IDE工程文件6)Thumb ARM Interworking Image:用于由ARM指令和Thumb指令的混合代码生成的一个可执行的ELF格式的映像文件7)Thumb Executable Image:用于由Thumb指令创建一个可执行的ELF格式的映像文件8)Thumb Object Library:用于由Thumb指令代码生成的一个armar格式的目标文件库3)如上图所示,选择ARM Executable Image for LPC2300的工程模板,在Project name下填写要建立的工程名称,如LPC2388,在Location下选择保存的路径,点击确定,即可生成LPC2388.mcp的工程,如下图所示4)生成的工程有三个生成目标,如上图所示,各部分应用说明如下注意:选用RelInFlash目标时,将会对LPC2388芯片进行加密,加密的芯片只能使用ISP进行芯片全局擦除后,才能恢复JTAG调试及ISP读/写操作.模板是针对LPC2366/68/78设计的,如果使用LPO2388芯片,使用DebugInFlash 目标时,需将mem_c.scf中将STACKS 0x40008000 UNINIT ;for LPC2366/68/78更改为STACKS 0x40010000 UNINIT(FLASH空间不同)。
ADS中几种常用的数据文件及其引用仿真
ADS中几种常用的数据文件及其引用仿真ADS中几种常用的数据文件及其引用仿真1、.SnP文件:线性S参数文件(也可以是G-, H-, Y-, and Z-参数),n可以是1~99之间的数。
当n=2时,即两端口器件时,可以包含噪声参数。
生成.SnP文件有两种方式,一种是自己手动编辑文本文件,一种是从现有数据(可以是ADS仿真得到的数据,也可以是网络分析仪等仪器测试得到的数据)导出生成。
(1)手动编辑用记事本把厂家提供的datasheet中的S参数按照规定的格式写入,保存为.SnP 文件,然后用Data Items中的SnP模块引用该文件,即可把该模块作为一个S 参数模型进行电路级、系统级的仿真。
格式的规定如下:!开头的语句作为注释语句的前缀,这些语句仔程序运行时将被忽略文件的开头要说明语句的定义格式,内容包括频率单位、参数类型、数据格式和归一化电阻值,用#号做前导:For .s1p files: # [HZ/KHZ/MHZ/GHZ] [S/Y/Z] [MA/DB/RI] [R n] For .s2p files: # [HZ/KHZ/MHZ/GHZ] [S/Y/Z/G/H] [MA/DB/RI] [R n]For .s3p/.s4p files: # [HZ/KHZ/MHZ/GHZ] [S] [MA/DB/RI] [R n]例如:# GHZ S MA R 501-port Component,Magnitude-Angle format:(Columns: f Mag Ang)f |S11| <s11< p="">2-port Component,Magnitude-Angle format:f |S11| <s22<="" p="" |s12|="" |s21|="" |s22|="">加入噪声参数的格式是:x1 x2 x3 x4 x5x1 = 频率单位x2 = 最小噪声系数(dB)x3 = 实现最小噪声系数的源反射系数(MA)x4 = 反射系数的相位(角度)(MA)x5 = 归一化噪声电阻例如:! NOISE PARAMETERS4 .7 .64 69 .3818 2.7 .46 -33 .40(2)导出数据生成:用HP-IB控件的“write”命令。
[M3_SN] ARM分散加载原理
ARM分散加载原理摘要从ARM ELF目标文件主要构成出发,详细介绍了分散加载的基本原理、分散加载文件的语法、分散加载时连接器生成的预定义符号及要重新实现的函数等;以定位目标外设和定义超大型结构体数组两项应用案例加以说明,并给出完整的工程实例和Bootloader代码。
这些都已经在实际工程中多次应用和验证,是笔者实际工程的萃取。
关键词分散加载嵌入式系统Scatter Loading Bootloader ARM ELF引言在当今的嵌入式系统设计中,ARM处理器以价格便宜、功耗低、集成度高、外设资源丰富和易于使用的特点而得到广泛的应用;在速度和性能方面已达到或超过了部分PC104嵌入式计算机的性能,而成本却比相应的PC104计算机低很多,广泛应用于手机、GPS接收机、地图导航、路由器、以太网交换机及其他民用和工业电子设备。
在一个采用ARM处理器的实时嵌入式系统中,目标硬件常常由Flash、SRAM、SDRAM 和NVRAM(非易失性RAM)等存储器组成,并定位于不同的物理地址范围,那么,怎样通过软件更好地访问和利用这些不同的存储器并让系统高效地运行?分散加载(Scatter loading)就提供了这样一种机制。
它可以将内存变量定位于不同的物理地址上的存储器或端口,通过访问内存变量即可达到访问外部存储器或外设的目的;同时通过分撒加载,让大多数程序代码在高速的内部RAM中运行,从而使得系统的实时性大大增强。
1.ARM ELF目标文件的主要构成ARM ELF(Executable and Linking Format)目标文件主要由.Text段、.Data段、.BSS段构成,其他段如.debug段、.comment段等与本文关系部大,不作介绍。
.Text 段由可执行代码组成,段类型为Code,属性为RO;.Data 段由已初始化数据组成,段类型为Data, 属性为RO;.BSS 段由未初始化数据组成,段类型为Zero, 属性为RW,在应用个程序启动时对该段的数据初始化为零。
ADS教程应用详解
ADS教程应用详解ADS(Advanced Design System)是由美国Keysight Technologies 公司开发的一款电磁仿真软件,广泛应用于射频和微波电路设计以及高速数字信号传输系统设计中。
ADS软件具有强大的仿真功能,可以帮助工程师进行电路性能分析、参数优化和系统级设计。
下面,将详细介绍ADS的应用和使用方法。
首先,ADS的界面非常直观和友好,可以通过拖拽组件的方式搭建电路,并通过连接器进行组件之间的连接。
同时,ADS提供了多种不同的元器件模型和参数设置,可以精确模拟真实电路的行为。
用户只需要在界面上选择合适的元器件,并设置其参数,即可进行仿真分析。
其次,ADS支持多种不同的仿真模式,包括频域仿真、时域仿真、蒙特卡洛仿真等,可以根据不同的设计需求选择合适的仿真模式。
例如,对于射频电路设计,可以使用频域仿真来分析电路的增益、带宽和稳定性等性能指标;对于高速数字信号传输系统设计,可以使用时域仿真来分析信号的波形和时钟抖动等。
除了仿真功能外,ADS还提供了丰富的分析工具,可以对仿真结果进行后处理和分析。
例如,可以通过频谱分析工具对电路的频谱特性进行分析,查看功率谱密度和谐波失真等信息;还可以使用网络分析工具对电路的S参数进行分析,查看传输损耗和反射系数等参数。
此外,ADS还具有强大的优化功能,可以对电路进行参数优化,实现设计指标的最佳化。
例如,可以使用优化器对电路的增益进行优化,以满足特定的设计要求。
通过不断调整元器件参数并进行仿真分析,优化器会自动最佳方案,并给出最优的设计结果。
最后,ADS还提供了多种数据可视化工具,可以直观地展示仿真结果并与设计要求进行对比。
例如,可以使用波形分析工具查看电路的时域波形,并与设计目标进行比较;还可以使用曲线拟合工具对仿真结果进行拟合和统计分析。
总结来说,ADS是一款功能强大的电磁仿真软件,可以帮助工程师进行电路性能分析、参数优化和系统级设计。
scf(分散加载描述文件)程序说明
LPC2294-.SCF文件[ 2007-4-14 3:33:00 | By: CANopen ]分散加载描述文件供ARM-ADS链接器使用,用来决定各个代码段和数据段的存储位置,下面为一个添加注释后的.scf文件例子:;YL-LPC2294片内FLASH分散加载文件;Internal Flash 256kBytes, Address range:0x00000000~0x0003ffff;Internal SRAM 16KBytes, Address range:0x40000000~0x40003fff;External Flash 2MBytes,SST39VF1601, Address range:0x80000000~0x401fffff;External SRAM 512KBytes,IS61LV25616,Address range:0x81000000~0x81080000ROM_LOAD 0x0 ;ROM_LOAD:Name of the load region.;0x0:Start address for ROM_LOAD region.{ROM_EXEC 0x00000000 ;ROM_EXEC:Name for the first execute region.;0x00000000:Start address for the execture region.{Startup.o (vectors, +First)* (+RO) ;Place all code and RO data into this exec region,;and make sure the "vectors" section from "Startup.o";be placed first.}IRAM 0x40000000 ;The second execute region;start address is 0x40000000. {Startup.o (+RW,+ZI) ;Place all RW and ZI data from Startup.o here.}ERAM 0x81068000 ;The third execute region;Start address:0x81068000.{* (+RW,+ZI) ;All reset RW/ZI data to be placed here.}HEAP +0 UNINIT ;The fourth execute region;Start address:Follow the;end of ERAM region.{heap.o (+ZI) ;All ZI data from heap.o to be placed here.}STACKS 0x40004000 UNINIT ;The fifth execute region.{stack.o (+ZI) ;All ZI data from stack.o to be placed here.}}一般一个简单的分散加载描述文件包含三部分:Loader region、Execute region、Input section。
ADS1.2操作步骤
ADS1.2操作1.ADS1.2简介ADS开发环境是ARM公司较早推出的ARM核微控制器集成开发工具,英文全程为ARM Developer Suite,成熟版本为ADS1.2。
ADS1.2支持ARM10之前的所有ARM 系列微控制器,支持软件调试以及JTAG硬件仿真调试,支持汇编、C和C++源程序,具有编译效率高、系统库功能强等特点,可以在Windows98、WindowsXP、Windows2000以及RedHat Linux上运行。
2.ADS1.2集成开发环境的组成简介ADS1.2由6个部分组成,如下表所示。
表4.3-1 ADS1.2的组成部分名称描述使用方式代码生成工具ARM汇编器,ARM的C、C++编译器,Thumb的C、C++编译器,ARM连接器由Code Warrior IDE调用集成开发环境Code Warrior IDE 工程管理,编译连接调试器AXD,armsd 仿真调试指令模拟器ARMulator 由AXD调用ARM开发包一些底层的例程,实用程序(如fromELF)实用程序由Code WarriorIDE调用ARM应用库C、C++函数库等由用户程序调用3.操作步骤选择Windows操作系统的“开始”->“程序”->ARM Develop Suite v1.2->CodeWarrior for ARM Develop Suite命令启动Metrowerks CodeWarrior,或者双击CodeWarrior for ARM Develop Suite快捷方式启动。
启动ADS1.2 IDE如图1所示。
图 1 启动ADS1.2 IDE单击菜单File,选择New菜单项即弹出New对话框,如图2所示。
图2 New对话框选择工程模板为ARM可执行映像(ARM Executable Image),Thumb可执行映像(Thumb Executable Image),或者Thumb和ARM交织映像(Thumb ARM Interworking Image),然后在Location项选择工程存放路径,并在Project Name项输入工程名称,单击“确定”按钮即可建立相应工程,工程文件后缀为.mcp,具体如图3.图3 新建工程会弹出test1.cmp工程管理对话框,,此时没有文件,管理文档的对话框时空的,点击File 下的New,选择File新建文件,,里面可选的只有Text File,c语言的加.C后缀,ARM汇编或是Thumb汇编用.s后缀,如图4图4 新建文件在回看工程管理文件,里面多了新建的test.s文件,图5图5在test1.s中输入汇编代码,具体如下图 64.编译连接工程如图7所示为工程窗口中的图标按钮,通过这些图标按钮,用户可以快速的进行工程设置、编译连接、启动调试等等(在不同的菜单项上可以分别找到对应的菜单命令)。
4个范例教你一天熟练使用ADS1
元享电子科技有限公司
图 8 在工程窗口中添加源文件 选择“Add Files”命令后即可弹出 Select files to add 对话框,选择相应的源文件 (可按着 Ctrl 键一次选择多个文件),然后点“打开”按钮即可,如图 9 所示。
图 9 口中的图标按钮,通过这些图标按钮,您可以快速的进行工程 设置、编译链接、启动调试等等(在不同的菜单项上可以分别找到对应的菜单命令)。
int main(void)
{ int i,N,sum;
scanf("%d",&N);
sum = 0; for(i=1; i<N+1; i ++ )
// 1+2+3+...+N 的值。
sum=sum + i; printf("结果=%d\n",sum);
项目ADS开发环境入门指南
在汇编语言里,这三个变量名为|Load$$IRAM_DATA$$Base|、|Image$$IRAM_DATA$$ Base|和|Image$$IRAM_DATA$$Limit|,可以用以下方法加以引用:
五、链接脚本
ADS的链接脚本是scf后缀的文本文件,名字叫scatter,意思是分散加载描述文件。一个简单的scf的例子如下:
ROM_LOAD 0xE0000004
{
ROM_EXEC 0xE0000004
{
init.o (STARTUP, +FIRST)
* (+RO)
}
IRAM_DATA 0x08000000
CODE32
GLOBAL _start
AREA vectors,CODE,READONLY
ENTRY
3.代码标志,在gcc中是类似
_armboot_start:
这样的代码,但是在ARM汇编中变成了
_ARMBOOT
这样的,去掉了冒号,注意没有缩进。一般代码是有缩进的。
4.一些伪代码,比如变量定义,gcc中是.word,而ARM汇编里是DCD ,宏定义在gcc中是#define,而ARM汇编中则用EQU代替,声明外部变量,gcc是.globle,ARM汇编中使用GLOBAL,或者IMPORT关键字。。
4.1 Target Settings
一般不需要修改,如果需要生成bin文件或者elf文件时,将Post-linker下拉列表选为ARM fromELF。
4.2 ARM fromELF
ADS 使用例程 说明书
ADS使用例程前言:ADS是一个开发ARM很好的环境,同样周立功单片机()推出的EasyARM2104实验套件也是学习ARM相当超值的入门工具。
由于配套实验书上对于如何做第一个实验方面给出的指导具体步骤不够清晰,新手一般都要摸索一阵子,所以本人写了如下一个ADS的使用例程,演示一个最简单的程序的运行范例。
另外,ADS是一个功能很强大的ARM开发软件,本人的水平也依然停留在初学的层次上,很多深层次的使用问题,设置参数问题需要大家一起仔细阅读英文的pdf使用说明,这里只是希望这篇文档能起到抛砖引玉的作用,把大家领进门。
花了3天时间写出的本文,肯定存在不少错误,加上本人也是新手,所以如果发现文中有错误希望大家指出。
我的e-mail:masashinakayama@注意:本例程要用程序控制周立功EasyARM2104上的LED1,完成该LED1亮暗闪烁。
首先我们假设ADS已经安装完毕(因为涉及版权问题,周公的配套光盘不含ADS软件。
请初学者各显神通,获得该软件)。
本例程使用的是ADS1.2 。
EesyJTAG驱动已经安装。
没安装的请仔细阅读周公配套光盘easyarm_drive\readme.txt安装过程。
EasyARM实验板上JP8 LED1跳线已经短接。
其余跳线设置正确。
(1)建立一个新的项目运行ADS的CodeWarrior IDE,点击File->New,弹出New对话框(如图1)图1 ADS新建工程对话框选择要建立的项目模板,初学者建议选择ARM Executable Image,建立一个ARM指令的项目。
ARM Executable Image 由ARM指令代码生成ELF格式的映像文件Thumb ARM Interworking Image 由ARM指令和Thumb指令混合代码生成ELF格式的映像文件Thumb Execuable Image 由Thumb指令代码生成的ELF格式的映像文件其余选项请参考ADS使用手册在Location项中设置项目的存放目录,并在Project name 项中输入新建项目的名称(本例取名ex_led),然后确定。
周立功单片机:分散加载文件浅释
分散加载文件浅释ARM嵌入式开发广州周立功单片机科技有限公司目录1. 适用范围 (1)2. 基础知识 (2)2.1 基本概念 (2)3. 分散加载文件概述 (3)4. 分散加载文件语法 (4)4.14.24.35.15.25.35.45.55.6 加载时域的描述 (4)运行时域的描述 ....................................................................................................... 5 输入段描述 ............................................................................................................... 6 一个普通的分散加载配置 ....................................................................................... 8 多块RAM的分散加载文件配置 ............................................................................ 8 多块Flash的分散加载文件配置 .......................................................................... 10 Flash特殊要求应用 ............................................................................................... 13 段在分散加载文件中的应用 ................................................................................. 13 程序拷贝到RAM中执行应用 .............................................................................. 14 5. 分散加载应用实例 ................................................................................................... 8 工程技术笔记©2008 Guangzhou ZHIYUAN Electronics CO., LTD.11. 适用范围有时候用户希望将不同代码放在不同存储空间,也就是通过编译器生成的映像文件需要包含多个域,每个域在加载和运行时可以有不同的地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ADS下的分散加载文件应用实例
load_region_name start_address | "+"offset [attributes] [max_size]
{
execution_region_name start_address | "+"offset [attributes][max_size]
Image: 执行区,即运行地址;
Base: 区首地址;
Limit: 区尾地址;
Length: 区长度;
region_name: RO、RW、ZI、load_region_name、execution_region_name;
#pragma arm section // 恢复所有段名为默认设置。
应用:
#pragma arm section rwdata = "SRAM",zidata = "SRAM"
static OS_STK SecondTaskStk[256]; // “rwdata”“zidata”将定位在“sram”段中。
RELOC 重新部署,保留定位信息,以便重新定位该段到新的执行区;
OVERLAY 覆盖,允许多个可执行区域在同一个地址,ADS不支持;
ABSOLUTE 绝对地址(默认);
RW-CODE
RW 或 DATA, selects both RW-CODE and RW-DATA
ZI 或 BSS
ENTRY, that is a section containing an ENTRY point.
")"]
}
}
load_region: 加载区,用来保存永久性数据(程序和只读变量)的区域;
execution_region: 执行区,程序执行时,从加载区域将数据复制到相应执行区后才能被正确执行;
load_region_name: 加载区域名,用于“Linker”区别不同的加载区域,最多31个字符;
}
ER_ZI +0 ; ER_ZI region placed after ER_RW region.
{
*(+ZI) ; All the ZI sections are placed consecutively here.
}
}
LR_1 0x010000 ; The first load region is at 0x010000.
{
ER_RO +0 ; Default ABSOLUTE attribute is inherited from parent. The execution address
FIRST,用于指定存放在一个执行区域的第一个或最后一个区域;
LAST,同上;
input_section_pattern: 段名;
汇编中指定段:
AREA vectors, CODE, READONLY
; The default execution address is 0x010000, but the code can be moved.
{
*(+RO) ; All the RO sections go here.
例如:
“RAM1”区域的首地址: Image$$RAM1$$Base
上例中“sram”段首地址: sram$$Base
}
}
程序中对某区域地址等的引用方法:
Load$$region_name$$Base Load address of the region.
Image$$region_name$$Base Execution address of the region.
OVERLAY 覆盖;
ABSOLUTE 绝对地址(默认);
FIXED 固定地址;
UNINIT 不用初始化该区域的ZI段;
}
ER_RW 0x018000 PI ; PI attribute overrides Ae RW sections are placed at 0x018000 and they can be moved.
C中指定段:
#pragma arm section [sort_type[[=]"name"]] [,sort_type="name"]*
sort_type: code、rwdata、rodata、zidata
如果“sort_type”指定了但没有指定“name”,那么之前的修改的段名将被恢复成默认值。
module_select_pattern: 目标文件滤波器,支持通配符“*”和“?”;
*.o匹配所有目标,* (或“.ANY”)匹配所有目标文件和库。
input_section_attr: 每个input_section_attr必须跟随在“+”后;且大小写不敏感;
#pragma arm section // 恢复默认设置
分散加载文件中定义如下:
Exec_Sram 0x80000000 0x40000
{
* (sram)
}
“PI” 属性使用示例:
LR_1 0x010000 PI ; The first load region is at 0x010000.
{
ER_RO +0 ; The PI attribute is inherited from parent.
Image$$region_name$$ZI$$Limit Address of the byte beyond the end of the ZI output sectionin the execution region.
SectionName$$Base Input Address of the start of the consolidated section called SectionName.
}
ER_ZI +0 ; ER_ZI region placed after ER_RW region.
{
*(+ZI) ; All the ZI sections are placed consecutively here.
SectionName$$Limit Input Address of the byte beyond the end of the consolidated section called SectionName.
Load: 加载区,即存放地址;
}
ER_RW +0 ABSOLUTE ; PI attribute is overridden by ABSOLUTE.
{
*(+RW) ; The RW sections are placed next. They cannot be moved.
RO-CODE 或 CODE
RO-DATA 或 CONST
RO或TEXT, selects both RO-CODE and RO-DATA
RW-DATA
max_size: 该区域的大小;
execution_region_name:执行区域名;
start_address: 该执行区的首地址,必须字对齐;
+offset: 同上;
attributes: 同上;
PI 与地址无关,该区域的代码可任意移动后执行;
{
module_select_pattern ["("
("+" input_section_attr | input_section_pattern)
([","] "+" input_section_attr | "," input_section_pattern)) *
Image$$region_name$$Length Execution region length in bytes (multiple of 4).
Image$$region_name$$Limit Address of the byte beyond the end of the execution region.
; is 0x010000. The code and ro data cannot be moved.
{
*(+RO) ; All the RO sections go here.
Image$$region_name$$ZI$$Base Execution address of the ZI output section in this region.
Image$$region_name$$ZI$$Length Length of the ZI output section in bytes (multiple of 4).
start_address: 起始地址,指示区域的首地址;
+offset: 前一个加载区域尾地址+offset 做为当前的起始地址,且“offset”应为“0”或“4”的倍数;
attributes: 区域属性,可设置如下属性:
PI 与地址无关方式存放;