arm嵌入式系统C语言代码,arm嵌入式系统c语言编程

ARM嵌入式系统C语言编程

姜换新

(惠普中国软件研发中心 上海201206)

摘 要  无操作系统支持的嵌入式系统软件,包括系统引导(BOOT)、驱动程序、动态内存管理、IΠO、通信以及应用软件等方面。本文详细介绍了嵌入式平台上用C语言编写系统软件和应用软件的方法。虽然是针对ARM平台介绍的,但基本经验和算法也适合于其他嵌入式平台的软件设计。

关键词  嵌入式系统 软件 C语言 ARM

PROGRAMMINGCONARMEMBEDDEDPLATFORM

JiangHuanxin

(ChinaSoftwareSolutionsCenter,Hewlett-PackardCompany,Shanghai201206)

Abstract  ProgrammingConARMembeddedplatformisacomplicatedM,dynamicmemorymanage2ment,IΠOinterface,communicationsandapplicationsshouldbeonembeddedsystem,theau2thorgivesadetaileddescriptioninthispaperontheandThoughARMistheonlydiscusseditem,thispaperisusefulforprogrammingonKeywords  EmbeddedSCprogramminglanguage ARM

是没有意义的(如果返回,表明系统出现严重错误)。另外,为

1 引 言

无操作系统支持的嵌入式软件包括系统引导(BOOT)、外围驱动程序、存储管理、系统IΠO、通信、应用程序等方面,需要

1-118-png_6_0_0_45_1203_37_22_873_1243.5-200-0-394-200.jpg

结合采用汇编语言(约占10%)和C语言(约占90%)。本文结合作者实践,详细介绍ARM嵌入式平台的C编程方法。考虑到通信软件涉及范围较大,本文不进行讨论。

了避免产生混淆,我们还必须给main函数另外取一个名字,比如Main。否则,编译器将会给main函数生成一大堆初始化代码,导致C程序的主入口与系统引导模块的接口错误。

系统引导模块完成各种初始化工作后,用一条跳转指令进入C的主入口Main,控制权从此移交给了C应用程序。

3 存储管理

存储管理是一个复杂的课题。从广义的角度来说,磁盘文件系统、内存、片内高速Cache等都属于这个范畴。嵌入式系统中,较有意义的是内存的动态分配与释放及Flash存储器管理两方面。本文要介绍的是我们在嵌入式系统中实现的动态内存管理。

C语言中动态内存分配与释放主要由malloc和free两个标

2 系统引导与main函数

通常C语言是从main函数开始的。main函数的原型是:

intmain(intargc,char33argv)

其中argc是参数的个数,argv是指向各参数的指针的数组。

main函数由操作系统内核启动,操作系统内核完成函数所需的

变量初始化工作,并在调用结束后检查main函数的返回值,若0,表明程序运行正常,否则表明程序运行出错。在嵌入式系统中,由于没有操作系统内核存在,对main函数的初始化工作只能由系统引导(BOOT)模块完成。

系统引导(BOOT)部分完成系统初始化工作,用汇编语言实现。它的工作包括硬件初始化、栈寄存器的设置、全局变量的初始化或清0、RAM中运行的模块的加载、堆参数的初始化等。完成这些工作后,再把控制权交给C的main函数。显然,对嵌入式系统的main而言,argc和argv这两个参数及返回值都

准库函数实现。malloc从系统空闲内存中分配合适的内存块,

free函数完成内存块的回收。这两个函数一般需要操作系统内

核的支持,在ARM裸平台上,不能直接调用。为此,我们编写了malloc和mfree两个函数,实现动态存储管理的功能。

典型应用程序内存映象分成代码区、数据区和栈区,三个区从低地址到高地址依次分布。代码区从最低地址开始,栈区

收稿日期:2002-05-10。姜换新,硕士,主研领域:数字通信、嵌入式及网络编程。

15

随书源码包 /////////////////////////////////// 本书从ARM处理器技术和ADS 1.2开发环境讲起,讲解ARM嵌入式C编程的方方面面,包含S3C2410片上资源、中断系统、I/O口、串口通信、触摸屏控制、实时时钟、LCD显示、DMA控制、PWM控制、看门狗电路、I2C控制、I2S控制、SPI接口、A/D(D/A)转换控制等。   本书由浅入深、循序渐进、实例丰富、步骤详细,适合嵌入式开发人员参考,也可作为高校嵌入式相关专业教材使用。 目录 第1章 ARM技术简介  1.1 ARM处理器简介  1.2 ARM体系结构的发展  1.3 ARM体系结构的存储器格式  1.4 习题与练习  第2章 ADS 1.2开发环境创建与简介  2.1 ADS 1.2开发环境创建  2.2 ADS集成开发环境的使用  2.3 用AXD进行代码仿真、调试  2.4 ARM C语言程序的基本规则和系统初始化程序  2.5 习题与练习  第3章 ARM9芯片S3C2410的片上资源  3.1 S3C2410处理器介绍  3.2 S3C2410处理器片上资源的定义和使用  3.3 编程参考软件包2410TEST  3.4 习题与练习  第4章 S3C2410的中断系统  4.1 S3C2410的处理器中断  4.2 中断控制  4.3 S3C2410中断源  4.4 中断控制专用寄存器  4.5 中断控制程序编写步骤  4.6 本章实验例程  4.7 习题与练习 第5章 S3C2410的I/O口和I/O口操作  5.1 S3C2410 I/O口描述  5.2 I/O端口控制寄存器  5.3 I/O口操作步骤  5.4 本章实验例程  5.5 习题与练习  第6章 S3C2410的串口UART及编程  6.1 S3C2410的串口UART概述  6.2 UART的控制寄存器  6.3 UART通信程序编写  6.4 本章实验例程  6.5 实验参考程序  6.6 红外数据通信简介  6.7 习题与练习  第7章 ADC和触摸屏控制  7.1 触摸屏结构和工作原理  7.2 S3C2410的触摸屏控制  7.3 触摸屏控制程序编写  7.4 本章实验例程  7.5 习题与练习  第8章 S3C2410的实时时钟(RTC)  第9章 S3C2410的LCD显示  第10章 直接存储器存取(DMA)控制  第11章 脉宽调制(PWM)及S3C2410的PWM控制  第12章 看门狗(Watchdog)电路  第13章 双向二线制串行总线(I2C)及S3C2410的I2C控制  第14章 数字音频信号(I2S)介绍和S3C2410的I2S控制  第15章 串行外设接口(SPI)介绍 第16章 S3C2410的A/D、D/A转换控制 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值