• [linux内核]linux内核编程规范


    1,__attrubte__关键字的作用

    点击打开链接

    __attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。
    struct str_struct{
            __u8    a;
            __u8    b;
            __u8    c;
            __u16   d;
    } __attribute__ ((packed));
    以上结构体的大小为5
    /*  当用到typedef时,要特别注意__attribute__ ((packed))放置的位置,相当于:
      *  typedef struct str_stuct str;
      *  而struct str_struct 就是上面的那个结构。
      */
    typedef struct {
            __u8    a;
            __u8    b;
            __u8    c;
            __u16   d;
    } __attribute__ ((packed)) str;
    以上结构体的大小为5

    /* 在下面这个typedef结构中,__attribute__ ((packed))放在结构名str_temp之后,其作用是被忽略的,注意与结构str的区别。*/
    typedef struct {
            __u8    a;
            __u8    b;
            __u8    c;
            __u16   d;
    }str_temp __attribute__ ((packed));
    以上结构体的大小为6

    attribute前后都有两个下划线,后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。
    语法格式为:__attribute__ ((attribute-list))
    属性 section 用于函数和变量,通常编译器将函数放在 .text 节,变量放在.data 或 .bss 节,使用 section 属性,可以让编译器将函数或变量放在指定的节中。

    2,驱动程序中IS_ERR()的含义

    所有的驱动程序都是运行在内核空间,内核空间虽然很大,但总是有限的,而在这有限的空间中,其最后一个page是专门保留的.
    所有在内核指针如果指在最后一个PAGE,那么这就是一个错误指针,内核空间是3G-4G,所以OXFFFFF000-0XFFFFFFFF是无效的指针。

    [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. /*static inline long IS_ERR(const void *ptr) 
    2.      return (unsigned long)ptr > (unsigned long)-1000L; 
    3. }*/   
    4. static inline void * __must_check ERR_PTR(long error)    
    5. {    
    6.     return (void *) error;      
    7. }    

    PTR_ERR()把指针转换成错误码。

    3,linux内核的likely()和unlikely函数

    点击打开链接

    likely和unlikely只是用来改变系统的性能,并不会改变以前已经有的值,
    不会经常发生用unlikely,经常发生的用likly

    4,mdelay和msleep()函数的区别

    点击打开链接

    mdelay精度更高,但是会一直占用CPU资源,msleep将当前进程放到等待队列中 根据个人经验,10ms以下的延时对时序要求比较高的地方最好还是用mdelay,100ms以上的延时最好还是用msleep,100ms以上的延迟
    对linux的多任务系统运行还是有一定影响的。

  • 相关阅读:
    Oracle 数据块,文件块转换,查看数据块对像
    逆向与汇编视频(36课) IDA 使用
    VC++消息钩子编程
    VS2008中opengl配置
    BSP技术详解3有图有真相
    BSP技术详解1有图有真相
    oracle 跟踪文件和转储命令
    BSP技术详解2有图有真相
    Recognizing and Learning Object Categories 连接放送
    自学MVC看这里——全网最全ASP.NET MVC 教程汇总
  • 原文地址:https://www.cnblogs.com/zhiliao112/p/4232135.html
Copyright © 2020-2023  润新知