欢迎来到天天文库
浏览记录
ID:59211187
大小:355.00 KB
页数:58页
时间:2020-09-26
《第8讲 ARM汇编语言与嵌入式C混合编程ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章ARM汇编语言与嵌入式C混合编程简要的介绍了:嵌入式C语言的编写风格;在嵌入式C程序设计中要注意的问题;ARM汇编语言与嵌入式C语言进行相互调用。模块化程序设计嵌入式C程序设计主要采用模块化设计方法,将系统内的任务进行合理的划分,将具有同一属性或相同类别的代码归为一类组成模块,每个模块的功能相对独立。将整个软件系统分为多个模块,编程思路就会很清晰。嵌入式系统软件模块划分嵌入式C语言代码的编写风格1、工程文件的管理通常按照功能模块,将函数分门别类放在多个源文件中,为了便于管理,更好的方法是使用:.h和.c文件对c文件中是
2、函数的实现代码,h文件则是这些函数的声明,以及函数可能会用到的一些宏在工程中,往往有一个公共头文件,一般为config.h,在其中有#include所有模块的h文件,可方便的实现模块之间的相互调用没有对应h文件的一般只有两个,main.c和interrput.c嵌入式C语言代码的编写风格2、程序的层次化一般简单的程序分成驱动程序和应用程序两层,对于复杂的程序,往往有一些“中间件”驱动程序:针对于特定的片内或片外模块编写,封装具体操作的细节,向上层提供接口函数,强调其通用性、移植性应用程序:根据具体的功能需求而编写的功能代码,
3、调用驱动程序,实现具体的功能项中间件:完成某个较负责的功能块,将驱动程序更进一步的封装,提供更完善的接口给应用程序。如:GUI、TCP/IP等嵌入式C语言代码的命名与书写风格命名、书写风格命名,推荐匈牙利命名法,充分利用下划线和大小写:标识符的名称要简明,能够表达出确切的含义,可以使用完整的单词或通常可以理解的缩写;如果在命名中使用特殊约定或缩写,则要进行注释说明。宏、变量名、函数名规则应当有所区别:对于变量命名,一般不取单个字符,例如i、j、k...;函数名一般以大写字母开头;所有常量名字母统一用大写。书写风格上,多利用缩
4、进、空格、空行。好的代码风格,比多写注释更有意义完善的程序,每个文件开头,每个函数开头都应该功能介绍、编写及修改时间、作者、修改人、版本等信书写风格示例:嵌入式C程序设计中的几点说明关于const、static、extern、volatile关键字的使用const表示“只读”,可以称其为“不能改变的变量“,合理地使用const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改,可以减少bug的出现。嵌入式中,用const定义大型只读数组,编译器会将其放入ROM中。在函数的形参前添加const关键字意味着这
5、个参数在函数体内不会被修改,属于“输入参数”。在有多个形参的时候,函数的调用者可以凭借参数前是否有const关键字,清晰的辨别哪些是输入参数,哪些是可能的输出参数。关于const、static、extern、volatile关键字的使用static表示“静态、局部”,可修饰函数内的静态局部变量,也可修饰函数或模块内的全局变量,用于限定作用范围。extern表示“外部”,当在某个模块内需要使用其他模块的变量或函数时,需要用这个词修饰。关于const、static、extern、volatile关键字的使用volatile表示“
6、易变”,抑制编译器优化的作用,从而提供特殊地址的稳定访问,即每次都会从实际内存中读取最新的数据而不是使用暂存的数据。volatile变量可能用于如下几种情况:(1)并行设备的硬件寄存器;(2)一个中断服务子程序中会访问到的非自动变量(也就是全局变量);(3)多线程应用中被几个任务共享的变量应用举例:193页例8.41)硬件端口寄存器读取的问题charx=0,y=0,z=0;x=ReadChar(0x5400000);/*读取I/O空间0x5400000端口内容*/y=x;x=ReadChar(0x5400000);/*再次读
7、取I/O空间0x5400000端口内容*/z=x;很可能被编译器优化为:x=ReadChar(0x5400000);/*读取I/O空间0x5400000端口内容*/y=x;z=x;优化后可能会带来不确定因素,在y=x之后,z=x之前,端口寄存器的内容可能会发生改变因此声明时应改为:volatilecharx;chary=0,z=0;地址强制转换与多级指针地址强制转换在C程序中,绝对地址值只是被当成一个整型数,如果要把它当成一个地址来使用就需要进行地址强制转换。例如:定义一个整形指针,然后把绝对地址0x0FA00转换成一个整形
8、的地址值赋给这个整形指针,则:int*p;p=(int*)0x0FA00;因此在嵌入式程序设计中,经常看到寄存器用如下方式定义:#definerPCONA(*(volatileunsigned*)0x1D20000)#definerPDATA(*(volatileunsigned*)0x1
此文档下载收益归作者所有