[linux核心]linux核心編程規範

來源:互聯網
上載者:User

標籤:

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 
  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的多任務系統運行還是有一定影響的。

[linux核心]linux核心編程規範

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.