|
|
| | -文章搜索 - 最新文章 - | |
第1215篇:基于IAR集成开发平台的ARM程序设计方法 |
| 发布时间:2006年2月14日 点击次数:6345 |
| 来源: 作者: |
关键词:嵌入式系统;IAR;ARM;中断控制 引言 在项目开发,特别是中小型项目开发中,为了降低开发难度和开发成本,常选择不加载操作系统的方案。本文选择IAR嵌入式开发平台,在不加载操作系统的前提下,使用C语言(约95%)和汇编语言(约5%),对以ATMEL公司的AT91M40800芯片(ARM7TDMI内核)为主芯片的工业控制系统进行了软件开发。
图1 系统硬件结构
图2 系统软件框架 硬件构架 系统的整体硬件框架如图1所示,该系统基本包括了目前工业控制系统所需要的各种功能,其软件开发十分具有代表性。 IAR集成开发环境 IAR开发平台是瑞典IAR公司开发的基于最新C/C++编译和调试技术的综合开发平台。该平台是一套完整的集成开发环境,可以完成创建工程、编辑文件、编译、汇编、连接和调试应用程序的所有工作;同一个工作空间可放多个工程;可针对单个源文件,一组源文件或者全部源文件进行配置;提供工程模板,支持几乎所有ARM内核;提供ANSI标准C编译器、ISO/ANSI C 和嵌入式C++库;支持包括Wiggler JTAG接口等多种JTAG;提供了多种代码优化方式。 IAR生成的目标代码分为调试版本(Debug)和发行版本(Release)两种。其中Debug目标代码的地址定义在SRAM中,将被下载到SRAM中执行;Release目标代码的地址定义在Flash中,最终大部分在Flash中执行。在程序编译之前需要根据模板编写Debug.xcl和Release.xcl这两个内存分配文件。在IAR提供的工程模板基础上,需要修改的地方有: -DROMSTART=2000000 启动代码设计 通常C语言是从main函数开始执行的,在没有操作系统的情况下,对main函数的初始化工作由启动代码来完成,包括硬件初始化、堆栈初始化、各种寄存器的初始化等。 在完成所有的初始化工作以后,用一条跳转指令进入C程序的main函数,程序的控制权转移到C程序。 驱动程序设计 系统的软件框架如图2所示。驱动程序包括设备驱动程序、中断程序以及中断服务程序。首先以Flash驱动设计为例。根据Flash的Datasheet及硬件设计,有以下定义: #define FLASH_BASE ((volatile USHORT *)(0x01000000)) 然后编写FLASH功能函数。下面的函数用于验证FLASH的设备ID号: -ramfunc-farfunc BOOL FLASH_Test(void) 中断发生时,ARM内核运行状态会由一般模式(System & User)进入其它几种模式(包括FIQ、IRQ等),因此需要保护正在运行的现场(r0~r12通用寄存器),同时将ARM状态寄存器(CPSR和SPSR)入栈。中断程序使用汇编语言保护寄存器,而中断服务程序可以使用C语言编写。这里以控制步进电机运动的定时器中断为例: tc0_handler 值得注意的是,ARM的除法运算采用软件除法方式,会用到r14寄存器,所以也必须加以保护,在中断服务程序完毕后恢复现场,将寄存器依次出栈。 结语 在本系统的开发过程中有如下体会: 1、尽量少用占用大量存储空间的变量(如int buffer[4096]),系统开销太大,可能造成系统崩溃。 2、慎重使用malloc()这样的内存分配函数。如果使用,一定要在使用完毕后调用free()函数释放内存空间,否则容易造成内存泄漏,甚至系统崩溃。 3、要注意IAR编译器的所有警告信息,仔细查看警告信息的意义。 4、一些经常调用且需要快速处理的模块,考虑使用汇编完成。 5、生成 Release版本目标代码时,Release目录下的exe目录内即为目标文件,而List目录内的*.map文件包含了目标文件内存分配的具体情况,可以根据里面的信息判断内存分配是否存在问题。 按照以上开发方式开发出的某款工控产品,经过了严格测试后,已经推向市场,其可靠性和稳定性均得到了验证 |
|||||
|
|
|
[ARM设计] 相关文章: Atmel“固定式”ARM7微处理器 加密解密速度提高20倍简介: Atmel已经率先推出业界首两款基于 ARM7 的闪存微控制器 (Flash MCU),两者都具有嵌入式10/100以太网 (Ethernet) MAC、控制器局域网 (CAN)、全速 (12Mbps) USB 2.0 以及一个高速 AES/3DES 加密引擎 (encryption engine)。AT91SAM7X128 和 AT91SAM7X256 乃针对广泛的网络化实时嵌入式系统而设计,具备一个10位模数转换器 (ADC)、两个串行外围接口 (SPI)、同步串行接口 (SSC)、双线接口...... Atmel新款ARM7闪存微控制器密度达64KB ARM的开发步骤 华邦推出内置32位ARM7TDMI内核的通用型单芯片 周立功2005年11月5-6日广州第二期ARM免费培训班 |
|
|
|