Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1273656
  • 博文数量: 160
  • 博客积分: 4132
  • 博客等级: 中校
  • 技术积分: 2086
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-06 21:56
文章分类

全部博文(160)

文章存档

2012年(25)

2011年(120)

2010年(15)

分类: 嵌入式

2011-01-16 19:26:29

《Linux设备驱动可开发技术及应用》这本书看了得有一个礼拜了,今天看完第十章 程序一般同时包含head dev app,越来越综合 也更容易看书我不懂的地方,怕查过之后又忘 在博客记录一下

主要问题还是在Linux C上,有些函数或者宏还看不出细节。以后第一眼看不出细节的就记下来 今天只记了不懂的关键字,日后加上宏可能条理会清晰些。



一、void指针:
  1. (Void *)&XXXX 和 (const void *XXXX
  查了半天貌似不是什么高端语句 就是:指针地址指向XXXX地址,括号的只是作用是确定结合顺序。用来说明是是空类型的指针 目的是数据类型更广 易于赋值。



二、break语句:
  1. while(1)
  2. {
  3.     if() break;
  4. }
  以前一直以为break“跳出当前语句”的意思是跳出上述的if,今天查了下谭浩强的书;
  改正为:if为真时执行break跳出while,为假时执行if语句下的仍在while中的语句
(原来认为的错误理解:××此时的if如果是真 顺序进行到下一条,如果if为假 则执行break、break的结果是去执行whlie的下一条语句。××)



三、__attribute__语句

  1. typedef struct
  2. {
  3.  ... ...
  4. }__attribute__ ((packed)) XXXX;

语法格式为:__attribute__ ((attribute-list))   其位置约束为:放于声明的尾部“;”之前。

packed

使用该属性对struct或者union类型进行定义,设定其类型的每一个变量的内存约束。当用在enum类型定义时,暗示了应该使用最小完整的类型(it indicates that the smallest integral type should be used)。

下面的例子中,my-packed-struct类型的变量数组中的值将会紧紧的靠在一起,但内部的成员变量s不会被“pack”,如果希望内部的成员变量也被packed的话,my-unpacked-struct也需要使用packed进行相应的约束。

  1. struct my_unpacked_struct
  2. {
  3.    char c;
  4.    int i;
  5. };

  6.          
  7. struct my_packed_struct
  8. {
  9.    char c;
  10.    int i;
  11.    struct my_unpacked_struct s;

  12. }__attribute__ ((__packed__));



还有个用法类似packed

使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是一字节对齐,对域(field)是位对齐。下面的例子中,x成员变量使用了该属性,则其值将紧放置在a的后面:

  1. struct test
  2. {
  3.    char a;
  4.    int x[2] __attribute__ ((packed));
  5. };

其它可选的属性值还可以是:cleanupcommonnocommondeprecatedmodesectionsharedtls_modeltransparent_unionunusedvector_sizeweakdllimportdlexport等,

详细信息可参考:


__attribute__的博客简介:






阅读(9702) | 评论(12) | 转发(4) |
给主人留下些什么吧!~~

sillyboytao2011-01-16 22:08:27

diytvgy: 以前一直没留意__attribute__的用处。。。.....
居然有非广告的回复了 哇哈哈 很爽~  看过你写的那个驱动学习总结 好些细节我现在还看不懂 等过几天我好好拜读拜读 然后留言请教啊~哈哈

diytvgy2011-01-16 21:48:45

以前一直没留意__attribute__的用处。。。