ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
realview mdk arm realview mdk realview mdk 下载 realview mdk介绍 realview mdk 破解
Keil是业界最受欢迎的51单片机开拓东西之一,它拥有流利的用户界面与强盛的仿真结果。而ARM微把持器的开拓东西RealView Microcontroller Development Kit (简称为RealView MDK 大概 MDK)将ARM开拓东西RealView Development Suite(简称为 RVDS)的编译器RVCT与Keil的工程办理、调试仿真东西集成在一起。
很多嵌入式系统开拓工程师对ARM的老版本开拓东西ADS非常熟悉,而RealView
MDK与ADS相比拟,从表面、仿真流程以及内部二进制编译链接东西上都有了不少改革,用法稍有差异。本主的宗旨是先容通用的流程,以及一些过细事变,赞助ADS用户将老的、遗留的ADS工程转化成在RealView
MDK中举办开拓调试的工程。
东西布局的改革
作为ARM的新一代微把持器开拓东西,RealView MDK不但包含ARM的最新版本编译链接东西,即RVDS3.0的编译链接东西,并且依据微把持器调试开拓的特色采用了与ADS、RVDS完整差异的调试、仿真环境,μVision debugger与simulator。因此,MDK与ADS在东西架构构成上有一些差异,包含了差异的工程办理器,差异版本的ARM编译器(compiler),差异的调试器(debugger),差异的仿真器(simulator),以及差异的硬件调试单位(见表1)。
1编译东西例化形式
在ADS中,当用户必要将高等语言代码编译成目的文件时,必要依据目的死板码的差异(16位的Thumb代码大概32位的ARM代码),以及高等语言的差异(C代码大概C++代码)选择差异的编译器可履行文件。RVCT3.0编译器则将它们全体同一为armcc,仅仅通过差异的编译选项举办区分。表2较为过细的列出了此中的差异(表2中“默认的编译选项”是指在没有其他编译选项时编译器的缺省选项)。
2 POSIX格式
MDK集成了RVDS的编译东西RVCT,与ADS相比,撤除编译、链接东西的可履行二进制文件差异之外,两个差异版本编译器的很多编译链接选项也有所差异。有关编译链接选项的变更用户可以参考ARM东西文档“RVCT Compiler and Libraries Guide中Table E-2 Mapping of compiler options。
RVCT采用了POSIX格式的编译链接选项,全体的多字符选项前必需应用双下划线。比喻:ADS的编译选项-cpu,在MDK中必要改写成--cpu,不然用户在MDK中直接应用ADS的makefile时,东西会孕育发生一个如下告诫:
Warning: L3910W: Old syntax, please use ‘--cpu’
3 ARM ABI的变更
ARM ABI是Application Binary Interface for the ARM Architecture的简称,是一系列ARM系统架构尺度的凑集,席卷了ARM二进制代码交互、开拓东西以及把持系统等方面。
对目的文件举办链接之前,MDK东西的链接器会严厉查抄各个目的文件(objects),武断它们是否复合ARM系统布局的ABI尺度。而MDK与ADS编译链接东西所按照的ARM ABI是差异版本的,以是将ADS的遗留工程直接移植到MDK并举办链接时,用户大概会遇到如下的过错大概告诫:
Error: L6238E: foo.o(.text) contains invalid call
from‘~PRES8’function to ‘REQ8’ function
Warning: L6306W: ‘~PRES8’section
foo.o(.text) should not use the address of ‘REQ8’ function foobar
这是由于新东西的ABI恳求在函数调用时,系统必需包管堆栈指针8byte对齐,即每次进栈大概出栈的存放器数量必需为偶数。这是为了可以或许越发高效的应用STM与LDR指令对“double”大概“long long”典范的数据举办拜访。而老的ARM开拓东西ADS并没有思量到新的ARM内核架构,其ABI对付堆栈的把持仅仅恳求4byte对齐。以是当用户将在ADS中编译链接告成的工程代码移植到MDK上,大概将老的、ADS遗留的目的文件、库文件在新东西MDK中举办链接时,MDK的链接器就会报出以上的过错。
对付以上环境,用户可以通过大略修正代码并重新编译链接,大概应用特殊的编译选项来办理。
● 重新编译全体代码
当用户拥有该ADS遗留工程的全体源代码时,应用MDK重新编译链接全体代码是最好的办理要领。MDK中的新版本编译东西会重新天生餍足堆栈8byte对齐恳求的目的文件,抑制由于堆栈不同过错齐引起的链接过错。
当工程中包含汇编代码时,用户大概还必要做少量的代码修正。这些修正包含:
① 查抄汇编源码中的指令,确保堆栈把持指令是8byte对齐的。
如例1中,ADS的遗留代码一次性将5个存放器压栈,由于ARM的指令存放器宽度为32位,即4byte,显然5个存放器入栈之后,堆栈指针不克不及够餍足64位,8byte对齐。为了办理这种环境,我们可以将别的一个并不必要压栈的存放器、R12,同时压栈,如许当6个32位存放器进栈之后,堆栈就能餍足64位对齐了。
例1
STMFD sp!,{r0-r3, lr} ; 将R0,R1,R2,R3,LR(奇数)存放器入栈
……
STMFD sp!, {r0-r3, r12, lr}; 将偶数个存放器入栈
② 在每个汇编文件的开头,添加“PRESERVE8”指令(见Ex2)。
例2
AREA Init, CODE, READONLY
……
PRESERVE8
AREA
Init, CODE, READONLY
● 应用--apcs /adsabi编译选项
当用户没有该ADS遗留工程的全体源码,只拥有库文件大概目的文件时,可以通过--apcs/adsabi编译选项强迫MDK的编译器孕育发生复合ADS ABI恳求的目的文件,以达到与遗留的ADS库文件、目的文件兼容的目的(ARM新东西将不会持续支撑--apcs/adsabi选项。发起用户及时更新东西到最新版本)。
4 分散加载过细事变
MDK同样支撑ADS的分散加载文件,但是当分散加载文件中涉及到必需被部署ROOT Region中的C库函数时,偶然用户必要作少量修正。
ROOT Region的load address与execution address相同,以是这部分代码在系统初始化时无须举办搬移把持,很多库函数,如__scatter*.o大概__dc*.o,必需被部署在Root Region中。
例3 分散加载文件的修正;ADS 中的分散加载文件
ROM_LOAD 0x0
{
ROM_EXEC 0x0
{ vectors.o (Vect,
+First)
__main.o (+RO)
* (Region$$Table)
*
(ZISection$$Table)
}
RAM_EXEC 0x100000
{ *.o (+RO,+RW,+ZI)
}
}……;
MDK中的分散加载文件1; MDK中的分散加载文件2
ROM_LOAD 0x0
ROM_LOAD 0x0
{ {
ROM_EXEC
0x0 ROM_EXEC 0x0
{ {
vectors.o (Vect, +First) vectors.o (Vect, +First)
*
(InRoot$$Sections) __main.o(*)
} *
(Region$$Table)
RAM_EXEC 0x100000
__scatter*.o(*)
{ __dc*.o(*)
*.o (+RO,+RW,+ZI) }
} RAM_EXEC 0x100000
}
{ *.o
(+RO,+RW,+ZI)}
}
在ADS中,用户必需在分散加载文件中清楚的将特定section代码部署在Root Region中。而MDK为了支撑新的RW紧缩机制,采用了新的region table格式,这种新的格式并不包含ZISection$$Table,并且新的scatter-loading (__scatter*.o) 与 decompressor (__dc*.o)必需被部署在root region中。以是EX3中ADS的分散加载文件应当被修正成新的形式。例3中供给了两种修正分散加载文件的要领,分散加载文件1通过InRoot$$Sections自动将全体必需的库目的放至在root region中,而分散加载文件2则过细的注清楚__scatter*.o与 __dc*.o的地位。
5 C库函数的差异
为了与新的ABI同等,MDK中的库函数名称与ADS大概会有差异。ADS中的__rt_*库函数被调换为__aeabi_*。要是用户的ADS工程中曾经重定义(retarget)过这些库函数,那么在移植到MDK时,必要重新实现这些函数,以餍足新ABI的恳求。表3列出了部分函数的映射干系。
移植实例
连合以上对MDK与ADS差异的形貌,本节将以实例的形式叙述怎样将ADS1.2上的遗留代码移植到MDK上。
以Philip的LPC2294(ARM7TDMI)为处置处分器,将一个在ADS1.2上开拓的由LPC2294把持LED闪耀的工程移植到MDK上来。该工程(Legacy_ADS.mcp)共有4个源文件(Startμp.s、tartget.c、IRQ.s、main.c),以及一个分散加载文件(Scatterload)。
应用ADS1.2编译器,编译选项为:-O1 -g+;链接选项为:-info totals -entry 0x00000000 -scatter .\src\Scatterload.scf -info sizes,我们得到终极代码尺寸信息如下:
Total RO Size(Code + RO Data) 1640
(1.60kB)
Total RW Size(RW Data + ZI Data) 1128
(1.10kB)
Total ROM Size(Code + RO Data + RW Data) 1640
(1.60kB)
为了可以或许应用ARM新东西MDK的一系列特征,我们必要把ADS中的遗留工程移植到MDK上来。其详细步调如下。
1 在MDK中新建工程
打开MDK,在主菜单中选择Project-->New…-->μVision Project,并给新工程定名为New_MDK.uv2并生存。
在MDK自转动出的器件选择窗口(Select Device for Target)中选择该工程所映射的处置处分器型号,“LPC2294”。当MDK提醒用户是否自动添加启动代码时,选择“否”。
2 添加源文件,并设置工程属性
将Legacy_ADS.mcp工程中全体的源文件都添加到新的New_MDK.uv2工程中来。单击工程属性快捷键,打开工程属性设置窗口,并选择C/C++标记页,设置编译器属性。用户可以依据过去ADS工程的编译属性设置,也可以依据当前详细需求重新设置编译属性。在本例中,我们将ADS遗留工程的编译属性,“-O1 -g+”修正为“-O1 -g -W”后,复制到“Misc Controls”栏中来。这是由于由于编译器版本的变更,其映射的编译选项也有所变更的缘故。过细:-W选项可以抑止全体的warning。
对ADS工程中的链接选项作得当修正如下,使其复合POSIX格式。
--info totals --entry 0x00000000 --scatter .\src\Scatterload.scf --info sizes
选择Linker标记,将修自新的链接选项复制至MDK工程属性的Linker属性中,并单击“断定”按钮。
3 Build工程并得当修正代码
当全体的工程属性都设置好之后,单击“Build all target file”快捷键,对全部工程举办编译链接。在MDK窗口的build输出一栏中,我们会发现系统呈现了一个链接过错L6238E,这是由于MDK中新版本编译链接东西与ADS的老版本build东西采用差异的ABI导致的。
4 重新编译链接该工程
代码修正完毕之后,单击“Build all target
file”快捷键,对该工程举办二次编译链接。MDK将告成天生New_MDK.axf文件,并表示其代码尺寸信息为:
Program Size:
Code=1576 RO-data=64 RW-data=0
ZI-data=1128
这些信息同样可以从链接天生的New_MDK.map文件中得到。
5 代码调试与固化
与其他ARM开拓东西相比拟,MDK拥有非常风雅的仿真结果,可以赞助用户在纯软件的平台上举办较为准确的调试。用户可以在工程属性设置窗口选择simulator调试大概通过硬件调试东西(uLink)举办调试。
当选择simμlator调试时,单击debμg快捷键,打开simulator调试窗口。为了验证该步伐在LPC2294硬件平台上是否可以或许准确切行,通过GPIO口驱动LED举办循环闪耀,用户可以单击Peripherals->GPIO->Port2,将GPIO端口2的仿真界面打开。
单击运行快捷键,可以看到在GPIO端口2的仿真调试窗口中,IO口的输出在不绝的循环变更。
当步伐通过了仿真调试之后,用户就可以通过MDK的硬件调试东西,uLink,将终极代码固化在非易失性的存储器中了。
realview mdk4 realview mdk 4.20 realview mdk 3.5 realview mdk 4.12 arm ads realview mdk
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号