[工学]第8章 ARM汇编语言与嵌入式C混合编程1.pptVIP

[工学]第8章 ARM汇编语言与嵌入式C混合编程1.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]第8章 ARM汇编语言与嵌入式C混合编程1

(4)若函数或过程中参数较长,也要进行适当的划分。 (5)一般不要把多个短语句写在一行中 (6)程序块的分界符语句的大括号“{”与“}”一般独占一行并且在同一列 与没优化前的代码相比较,优化后省略了一句x = ReadChar (0x5400000);这可能会带来不确定因素,在y = x;之后,z = x;之前,0x5400000端口寄存器的内容可能要发生改变。 因此声明时应改为: volatile char x ; char y = 0, z = 0 ; 中断服务程序中修改的供其它程序检测的变量的问题 static char flg = 0; main(void) { ... ? while (1) ??? { ????? if (flg) { ... //程序代码A } else { ... //程序代码B } ? } } 这段代码很可能被编译器优化为: static char flg = 0; main(void) { ... ? while (1) ??? { ... //程序代码B ? } } 解决问题的方法: 将声明语句static char flg = 0;改为volatile static char flg = 0; 分析下列程序代码的执行结果。 #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.5 过程调用标准ATPCS与AAPCS 8.6 ARM汇编语言与嵌入式C混合编程 8.3.2 地址强制转换与多级指针 地址强制转换 在C程序设计中,绝对地址0x0FA00只是被当成一个整型数,如果要把它当成一个地址来使用就需要进行地址强制转换。 如定义一个整形指针int *p,然后把绝对地址0x0FA00转换成一个整形的地址值赋给这个整形指针,p = (int *)0x0FA00。 因此在嵌入式程序设计中,经常可以可以看到寄存器用如下方式进行定义: #define rPCONA (*(volatile unsigned *)0x1D20000) #define rPDATA (*(volatile unsigned *)0x1D20004) 多级指针 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 #

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档