嵌入式系统C语言编程基础.ppt
《嵌入式系统C语言编程基础.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统C语言编程基础.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式系统C语言编程基础杨高波SNBCPage2目录关于本课程C语言复习编程规范开发高效程序的技巧Page3为什么学习本课程会C语法与会用C语言写程序是两个概念C的灵活性以及由此而产生的陷阱非常多TheMostBeautifulLanguageandMostDangerousLanguageintheProgrammingWorld!本课程将嵌入式系统中最基本的(最经常用到的)概念与技巧介绍给大家Page4小测验?Page5Quiz1所有嵌入式系统的主流程最后都进入一个死循环,怎样用C语言实现一个死循环?Page6Quiz2while().和do.while()有什么区别?Page7Quiz3
2、用变量a给出下列定义:a)一个整型数b)一个指向整型数的指针c)一个有10个整型数的的数组d)一个有10个指针的数组,该指针是指向一个整型数的Page8Quiz4关键字static的作用是什么?Page9Quiz5关键字const的作用是什么?Page10Quiz6定义一个标准宏MIN,这个宏输入两个参数并返回较小的一个。Page11Quiz7嵌入式系统中经常要对变量或寄存器进行位操作。给定一个int型变量a,写两段代码,第一个将a的bit3置为1,第二个将a的bit3置为0。以上两个操作中,要保持其它位不变。Page12Quiz8嵌入式系统具有经常去直接访问物理地址的特点。在某工程中,要求设
3、置一绝对地址为0 x5a00的整型变量的值为0 xaa55。写代码去完成这一任务。Page13Quiz9下面这段代码的输出是什么?voidfoo(void)unsignedinta=6;intb=-20;(a+b6)?puts(6):puts(6);Page14Quiz10请评论下面一段程序代码:voidtest()charstring10;char*str=“0123456789”;strcpy(string,str);Page15Quiz11请评论下面一段程序代码:voidGetMemory(char*p)p=(char*)malloc(0 x20);voidTest(void)char*
4、str=NULL;GetMemory(str);strcpy(str,”HelloWorld!”);printf(str);Page16Quiz12中断是嵌入式系统的重要组成部分。请评论下面一段中断服务子程序代码:_interruptdoublecompute_area(doubleradius)doublearea=PI*radius*radius;printf(nArea=%f,area);returnarea;Page17Answer!Page18Quiz1Answerwhile(1).Page19Quiz2Answerwhile().为入口条件循环,即在每次执行循环之前先检查判断条件;
5、do.while()为退出条件循环,即在执行循环之后再检查判断条件。Page20Quiz3Answera)inta;b)int*a;c)inta10;d)int*a10;Page21Quiz4Answer在C语言中,关键字static有三个明显的作用:1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。Page22Quiz5
6、Answerconst是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。const常量与#define常量:前者有数据类型,后者只是字符替换(而且可能产生意料不到的错误),所以编译器可以对前者进行安全性检查。Page23Quiz6Answer#defineMIN(A,B)(A)=(B)?(A):(B)#define宏的副作用,下面的代码执行后会发生什么事:least=MIN(*p+,b);Page24Quiz7AnswerconstintBIT3=0 x016”,原因是当表达式中存在有符号类型和无符号类型时所有的操作数都
7、自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。Page27Quiz10Answer字符串str需要11个字节才能存放下(包括末尾的0),而string只有10个字节的空间,所以strcpy会导致数组越界。Page28Quiz11Answer编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是_p,编译器使_p=p。本例中,_p申请了新的内存,但只是_p的值改变了,p的值却丝毫未变,仍然为NULL。事实上,每执行一次GetMemory就会泄漏一块内存。Page29Quiz12Answ
8、er1)ISR不能返回值;2)不能向ISR传递参数;3)ISR应该是短而有效率的,因而在ISR中做浮点运算、使用printf等是不明智的,会经常有重入和性能上的问题。Page30还是先复习一下C吧!Page31C语言复习1)循环与分支2)作用域与存储类3)内存与指针4)位操作5)预编译处理Page32循环与分支1)几种循环语句:for(initialize;test;update)body;while(test)body;dobody;while(test);2)循环辅助手段:break语句用于跳出循环,continue语句用于结束本次循环。Page33循环与分支3)三种形式的if语句:if(
9、expression).if(expression).else.if(expression1).elseif(expression).else.Page34循环与分支4)条件运算符?:expression1?expression2:expression3如果expression1为真,整个表达式的值为expression2的值,否则为expression3的值;是if.else.的简写形式,但是编译器可以产生比if.else.更优化的代码。Page35循环与分支5)多重选择:switchswitch(expression)caseconstant1:statements;break;casec
10、onstant2:statements;break;.default:statements;break;switch判断表达式必须具有整数值,case标签必须是整数常量或整数常量表达式。Page36C语言复习1)循环与分支2)作用域与存储类)作用域与存储类3)内存与指针4)位操作5)预编译处理Page37作用域与存储类1)作用域代码块作用域(局部变量)代码块:包含在开始花括号和对应结束花括号之内的一段代码。作用域:从定义变量位置到该代码块的末尾。文件作用域(全局变量)在所有函数之外定义的变量具有文件作用域。作用域:从定义变量位置到包含该定义的文件的结尾处。在其它位置使用该变量应用extern来
11、声明该变量。Page38作用域与存储类2)存储时期静态存储时期:程序运行期间一直存在,给变量分配固定的存储空间;所有全局变量具有静态存储时期(具有静态存储时期的并不都是全局变量),但是修饰全局变量的关键词static表明的是链接类型,并非存储时期。动态(自动)存储时期:运行期间根据需要动态的给变量分配存储空间。Page39作用域与存储类3)5种存储类存储类存储时期作用域链接声明方式自动自动代码块空代码块内寄存器自动代码块空代码块内,使用关键字register外部静态静态文件外部所有函数之外内部静态静态文件内部所有函数之外,使用关键字static代码块静态静态代码块空代码块内,使用关键字stat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 语言 编程 基础
限制150内