嵌入式Linux驱动模板精讲与项目实践 练习题及解答.pdfVIP

嵌入式Linux驱动模板精讲与项目实践 练习题及解答.pdf

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

附录练习题及解答

一、编程类:

1.写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

#defineMIN(A,B)((A)=(B)?(A):(B))

这个测试是为下面的目的而设的:

(1)标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符

变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能

达到要求的性能,嵌入代码经常是必须的方法。

(2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生

比if-then-else更优化的代码。

(3)懂得在宏中小心地把参数用括号括起来

2.预处理器标识#error的目的是什么?

#error是C/C++语言预处理命令之一,当预处理器预处理到#error命令时,将停止编译

并输出用户自定义的错误消息。其中如果是C语言编辑器则执行#error命令,如果是C++

命令则跳过该命令。用来主动的检测不合规范的情况并提示报错。

#error停止编译并显示错误信息

例如,使用C编译器:

#ifndef__cplusplus

#error

#endif

#includestdio.h

intmain()

{{

return0;

}

3.内核有很多do……while(0);有何作用?

do……while(0)用于避免在C中宏定义被展开时导致出错的问题。

例如:#defineexch(x,y){inttmp;tmp=x;x=y;y=tmp;}

if(xy)

Exch(x,y);

else

do_something();

展开:

if(xy){

inttmp;tmp=x;x=y;y=tmp;

}

;//此处多了个分号,使用时会出错。

else

do_something();

#defineexch(x,y)do{inttmp;tmp=x;x=y;y=tmp;}while(0)//最后没有分号

所以宏定义中涉及到函数的处理,最好使用do…while(0)封装。

4.谈谈Volatile与Register修饰符的作用?

volatile是纯程序与在硬件上运行的程序的最大区别,在linux系统中编译时必须进行优

化的,加上volatile关键词的变量是让编译器不对其优化。

register是建议编译器使用寄存器来优化对变量的存取。

5.关键字volatile有什么含意并给出三个不同的例子。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会

去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读

取这个变量的值,而不是使用保存在寄存器里的备份。

下面是volatile变量的几个例子:

(1)并行设备的硬件寄存器(如:状态寄存器)

(2)一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables)

(3)多线程应用中被几个任务共享的变量

回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序

员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都

要求volatile变量。不懂得volatile内容将会带来灾难。

6.一个参数既可以是const还可以是volatile吗?解释为什么。

答案:是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。

它是const因为程序不应该试图去修改它。

7.一个指针可以是volatile吗

可以,因为指针和普通变量一样,有时也有变化程序的不可控性。常见例:子中断服务子程

序修改一个指向一个buffer的指针时,必须用volatile来修饰这个指针。

说明:指针是一种普通的变量,从访问上没有什么不同于其他变量的特性。其保存的数值是

个整型数据,和整型变量不同的是,这个整型数据指向的是一段内存地址。

8.

文档评论(0)

177****5884 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档