- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
因此在嵌入式程序设计中,经常可以可以看到寄存器用如下方式进行定义: #define rPCONA (*(volatile unsigned *)0x1D20000) #define rPDATA (*(volatile unsigned *)0x1D20004) 多级指针 分析下列程序代码的执行结果。 #includestdio.h main(){ int value=100; int *p1,**p2,***p3; p1 = value; p2 = p1; p3 = p2; printf(c=%d\n, value); printf(*p1=%d\n,*p1); printf(**p2=%d\n,**p2); printf(***p3=%d\n,***p3); } 8.3.3预处理的使用 在源流程序被编译器处理之前, 编译预处理器首先对源程序中的预处理命令进行展开或处理。 预处理命令书写格式为以“#”开头,占单独书写行,语句尾不加分号。 宏定义(#define) (1). 不带参数的宏 不带参数的宏定义的一般形式为: #define 宏名 [宏体] (2).带参数的宏定义 带参数的宏定义一般形式为: #define 宏名(参数表) 宏体 (3). 宏定义与函数 带参宏与函数的区别 文件包含(#include) 文件包含的功能是使得一个源文件可以将另一个源文件的内容全部包含进来,它的一般形式为: #include “文件名” //先有哪些信誉好的足球投注网站当前目录,再有哪些信誉好的足球投注网站标准目录,可以指定目录#include文件名 //直接按标准目录有哪些信誉好的足球投注网站 实例解析 /*头文件test.h */ #define SQR(x) ((x)*(x)) #define CUBE(x) ((x)*(x)*(x)) #define QUAD(x) ((x)*(x)*(x)*(x)) /*源文件 test.c*/ #include stdio.h #include e:\qiutie\test.h //指定目录,包含头文件 #define MAX_POWER 10 void main() { int n; printf(number\t exp2\t exp3\t exp4\n); printf(----\t----\t-----\t------\n); for(n=1;n=MAX_POWER;n++) printf(%2d\t %3d\t %4d\t %5d\n,n,SQR(n),CUBE(n),QUAD(n)); } 程序运行结果 条件编译 (1). 形式1: #ifdef 标识符 程序段1 #else 程序段2 #endif (2). 形式2 #ifndef 标识符 程序段1 #else 程序段2 #endif (3). 形式3 #ifdef 表达式1 程序段1 #elif 表达式2 程序段2 #else 程序段3 #endif 8.4嵌入式C程序设计格式 8.4.1 可重入函数 8.4.2 中断处理程序 8.4.3 模块化程序设计 8.4.1 可重入函数 如果某个函数可以被多个任务并发使用,而不会造成数据错误,我们就说这个函数具有可重入性(reentrant) 。 可重入函数可以使用局部变量,也可以使用全局变量。 如果使用全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护 示例解析: 分析下面的函数是否具有可重入性 static int tmp; void swap(int* a, int* b) { tmp=*a; *a=*b; *b=tmp; } void swap(int* a, int* b) { int tmp; tmp=*a; *a=*b; *b=tmp; } 在操作系统中,通过信号量机制使得函数具有可重入性: static int tmp; void swap(int* a, int* b) { [申请信号量操作] tmp=*a; *a=*b; *b=tmp; [释放信号量操作] } 8.4.2 中断处理程序 在编写中断服务程序时需要满足如下要求: (1)不能向中断服务程序传递参数; (2)中断服务程序没有返回值; (3)中断服务程序应要尽可能短,来减少中断服务程序的处理时间,保证实时系统的性能。 8.4.3 模块化程序设计 嵌入式C程序设计主要采用模块化设计方法,将系统内的任务进行合理的划分,将具有同一属性或相同类别的代码归为一类组成模块,每个模块的功能相对独立。 将整个软件系统分为多个模块,编程思路就会很清晰。 嵌入式系统软件模块划分 示例解析 现有模块modu
文档评论(0)