网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文

ARM嵌入式系统C语言编程

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/04/07

【编者按】网学网C/C++频道为大家收集整理了“ ARM嵌入式系统C语言编程 “提供大家参考,希望对大家有所帮助!

     1 引 言无操作系统支持的嵌入式软件包括系统引导(BOOT)、外围驱动程序、存储管理、系统I/O、通信、应用程序等方面,需要结合采用汇编语言(约占10%)和C语言(约占90%)。本文结合作者实践,详细介绍ARM嵌入式平台的C编程方法。考虑到通信软件涉及范围较大,本文不进行讨论。

    2 系统引导与main函数通常C语言是从main函数开始的。main函数的原型是: int main(int argc,char ** argv) 其中argc是参数的个数,argv是指向各参数的指针的数组。 main函数由操作系统内核启动,操作系统内核完成函数所需的变量初始化工作,并在调用结束后检查main函数的返回值,若返回值为0,表明程序运行正常,否则表明程序运行出错。在嵌入式系统中,由于没有操作系统内核存在,对main函数的初始化工作只能由系统引导(BOOT)模块完成。系统引导(BOOT)部分完成系统初始化工作,用汇编语言实现。它的工作包括硬件初始化、栈寄存器的设置、全局变量的初始化或清0、RAM中运行的模块的加载、堆参数的初始化等。完成这些工作后,再把控制权交给C的main函数。显然, 对嵌入式系统的main而言,argc和argv这两个参数及返回值都是没有意义的(如果返回,表明系统出现严重错误)。另外,为了避免产生混淆,我们还必须给main函数另外取一个名字,比如Main。否则,编译器将会给main函数生成一大堆初始化代码,导致C程序的主入口与系统引导模块的接口错误。系统引导模块完成各种初始化工作后,用一条跳转指令进入C的主入口Main,控制权从此移交给了C应用程序。

    3 存储管理存储管理是一个复杂的课题。从广义的角度来说,磁盘文件系统、内存、片内高速Cache等都属于这个范畴。嵌入式系统中,较有意义的是内存的动态分配与释放及Flash存储器管理两方面。本文要介绍的是我们在嵌入式系统中实现的动态内存管理。 C语言中动态内存分配与释放主要由malloc和free两个标准库函数实现。malloc从系统空闲内存中分配合适的内存块, free函数完成内存块的回收。这两个函数一般需要操作系统内核的支持,在ARM裸平台上,不能直接调用。为此,我们编写了m alloc和m free两个函数,实现动态存储管理的功能。典型应用程序内存映象分成代码区、数据区和栈区,三个区从低地址到高地址依次分布。代码区从最低地址开始,栈区 ·15·则占据最高地址。代码区和数据区可以相连,也可以分开。嵌入式系统里,代码区位于只读存储器(如Flash)中,数据区和栈区则位于RAM中,因此代码区和数据区一般并不相连1)。

     数据区和栈区是分开的,它们之间的空隙称作堆。堆作为一个连续的可利用空间,是系统的初始可分配块。每次应用程序申请内存,m alloc便从堆中分割出一块(从低地址开始)给它。随着申请次数的增加,原来一个完整的内存块便被分割为多个独立的块分配给应用程序。由于内存释放的先后顺序是随机的,因此一定时间后,系统中将存在多个互不相连的内存块。这就使得整个内存区呈现出占用块和空闲块犬牙交错的状态,如图1所示。图中灰色部分表示内存被占用,白色部分表示未被占用。动态存储管理过程中的内存状态为了进行内存动态管理,需要维护两张全局表,一张是可利用空间表(avail list),管理空闲内存块的信息,另一张是已分配空间表(used list),管理占用内存块。这两张表都用双向循环链表实现。随着系统的运行,可利用空间表中往往会有多个空闲块存在,究竟分配哪一块呢?文[1]介绍了三种不同的分配策略,即首次拟合法、最佳拟合法和最差拟合法,各有优缺点。笔者实现的是首次拟合法。

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号