第四讲 基于ARM的嵌入式程序设计.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.3.4 嵌入式程序设计中C语言的变量、 数组、结构、联合 变量 [存储类型] 类型说明符 [修饰符] 标识符 [=初值] [,标识符[=初值]]…; 数组 一维数组: 类型说明符 标识符 [常量表达式][={初值,初值,…}]; char 标识符[ ] =“字符串”; 二维数组: 类型说明符 标识符[m][n] [={{初值表},{初值表}…}]; 指针数组和数组指针 类型说明符 *标志符 [常量表达式] [={地址,地址,…}]; 类型说明符 (*标志符)[ ][=数组标识符]; 结构说明 [存储类说明符] struct [结构原型名] { 类型说明标识符[,标识符…]; 类型说明标识符[,标识符…]; … }标识符[={初值表} [,标识符[={初值表}]…]; 联合说明 [存储类说明符] union[联合原型名] {类型说明符 标识符[,标识符…]; 类型说明符 标识符[,标识符…]; … }标识符 ={初值表}[,标识符[={初值表}]…]; 4.4 嵌入式C语言程序设计实例 5.4.1 嵌入式C语言程序编写的简单构架 5.4.2 Flash测试代码介绍 程序源代码介绍 整个测试程序主文件main.c的代码构成图如下图所示,由BootLoader启动程序进入C语言主函数main()入口。 4.4.2嵌入式C语言程序编写的简单构架 #include预编译指令 个C语言代码,一般要用#include编译指令将所需要的头文件加到该程序中,这是很有必要的,尤其是对编写较大的程序代码时。随后是定义一些外部变量,并对程序中的函数进行声明。 主函数main()的编写; 在每一个C语言代码中,一定要有一个main()函数,在该函数中完成该程序文件所要完成的各个功能,一般是通过调用各个子函数来完成。当然,它也可以调用其他文件中的函数。 完成相应功能的各个功能函数的编写。 各个函数之间可以相互调用。 4.4.3 Flash测试代码介绍 下面给出功能测试程序中Flash测试程序的代码结构图: 4.5.1变量定义 在变量声明的时候,最好把所有相同类型的变量放在一起定义,这样可以优化存储器布局。由下例可以看出: 对于局部变量类型的定义,使用short或char来定义变量并不是总能节省存储空间。有时使用32位int或unsinged int局部变量更有效率一些,如下图所示: 变量定义中,为了精简程序,程序员总是竭力避免使用冗余变量。但有时使用冗余变量可以减少存储器访问的次数这可以提高系统性能。 4.5.2参数传递 为了使单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器,如果参数数目超过四个,则使用堆栈进行传递。 内部寄存器的访问速度是远远大于存储器的,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在四个以下。 4.6.1ATPCS介绍 ATPCS(ARM-Thumb Produce Call Standard)是ARM程序和Thumb程序中子程序调用的基本规则,目的是为了使单独编译的C语言程序和汇编程序之间能够相互调用。这些基本规则包括子程序调用过程中寄存器的使用规则、数据栈的使用规则和参数的传递规则。 寄存器的使用规则: 寄存器 别名 特殊名 使用规则 R0 a1 ? 参数/结果/scratch寄存器1 R1 a2 ? 参数/结果/scratch寄存器2 R2 a3 ? 参数/结果/scratch寄存器3 R3 a4 ? 参数/结果/scratch寄存器4 R4 v1 ? ARM状态局部变量寄存器1 R5 v2 ? ARM状态局部变量寄存器2 R6 v3 ? ARM状态局部变量寄存器3 R7 v4 wr ARM状态局部变量寄存器4 Thumb状态工作寄存器 R8 v5 ? ARM状态局部变量寄存器5 R9 v6 sb ARM状态局部变量寄存器6, 在支持RWPI的ATPCS中为静态基址寄存器 R10 v7 sl ARM状态局部变量寄存器7, 在支持数据栈检查的ATPCS中为数据栈限制指针 R11 v8 fp ARM状态局部变量寄存器8/帧指针 R12 ? ip 子程序内部调用的scratch寄存器 R13 ? sp 数据栈指针 R14 ? lr 连接寄存器 R15 ? pc 程序计数器 数据栈的使用规则 根据堆栈指针指向位置的不同 和增长方向的不同可以分为以下4种数据栈 : FD (Full Desc

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档