原创 設備驅動中的阻塞與非阻塞I/O

    阻塞與非阻塞IO是設備訪問的兩種不同模式,驅動程序可以靈活地支持用戶空間對設備的這兩種訪問方式 1 阻塞與非阻塞IO      阻塞操作是指在執行操作時,若不能獲得資源則掛起進程,直到滿足可操作的條件後再操作。被掛起的進程進入休

原创 linux設備驅動中的併發控制——信號量

1 信號量     信號量(semaphore)是用於保護臨界區的一種常用方法,他的使用方式與自旋鎖類似,只有得到信號量的進程才能 執行臨界區代碼,與自旋鎖不同的是,進程不會原地打轉而是進入休眠等待狀態。 LINUX系統中與信號量相關的

原创 linux設備驅動中的併發控制——自旋鎖

1 自旋鎖的使用 linux系統中與自旋鎖相關的操作主要有如下四種: (1)定義自旋鎖 spinlock_t spin; (2)初始化自旋鎖 spin_lock_init(lock) //該宏用於動態初始化自旋鎖lock (3)

原创 linux設備驅動中的併發控制——互斥體

 1)定義和初始化互斥體 struct mutex my_mutex; mutex_init(&my_mutex); 2)獲取互斥體 void fastcall mutex_lock(struct mutex *lock); vo

原创 C語言面試題大彙總之華爲面試題

1、局部變量能否和全局變量重名?   答:能,局部會屏蔽全局。要用全局變量,需要使用"::"   局部變量可以與全局變量同名,在函數內引用這個變量時,會用到同名的局部變量,而不會用到全局變量。對於有些編譯器而言,在同一個函數內可以定義多個

原创 我的友情鏈接

51CTO博客開發

原创 C/C++中Static的作用詳述

  在C語言中,static的字面意思很容易把我們導入歧途,其實它的作用有三條。 (1)先來介紹它的第一條也是最重要的一條:隱藏。 當我們同時編譯多個文件時,所有未加

原创 中斷

  /* *****************************************************************************                  1.申請和釋放中斷     ******

原创 基於AT91SAM9G20構建嵌入式Linux系統

       本文中使用的目標平臺AT91SAM9G20是Atmel公司使用ARM926EJ-S處理器內核開發的一塊SoC嵌入式微處理器,主頻達到400MHz,具有Atmel 先進的外設DMA 和分佈式存儲器架構,連同6層總線矩陣,

原创 typedef 的用法

用途一: 定義一種類型的別名,而不只是簡單的宏替換。可以用作同時聲明指針型的多個對象。比如: char* pa, pb; // 這多數不符合我們的意圖,它只聲明瞭一個指向字符變量的指針,    // 和一個字符變量;   以下則可行:   

原创 SRAM/DRAM,PROM/EPROM/EEPROM,NOR/NAND FLASH區別

RAM / ROM 存儲器   ROM和RAM指的都是半導體存儲器,ROM是Read Only Memory的縮寫,RAM是Random Access Memory的縮寫。ROM在系統停止供電的時候仍然可以保持數據,而RAM通常都是在掉電

原创 SPI、I2C、UART三種串行總線協議的區別

第一個區別當然是名字: SPI(Serial Peripheral Interface:串行外設接口); I2C(INTER IC BUS:意爲IC之間總線) UART(Universal Asynchronous Receiver

原创 volatile的作用

     一個定義爲volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器裏的備份。下面是volati

原创 函數指針和指針函數

  【函數指針】       在程序運行中,函數代碼是程序的算法指令部分,它們和數組一樣也佔用存儲空間,都有相應的地址。可以使用指針變量指向數組的首地址,也可以使用指針變量指向函數代碼的首地址,指向函

原创 typedef 的用法

用途一: 定義一種類型的別名,而不只是簡單的宏替換。可以用作同時聲明指針型的多個對象。比如: char* pa, pb; // 這多數不符合我們的意圖,它只聲明瞭一個指向字符變量的指針,    // 和一個字符變量;   以下則可行: