原创 C語言---經典之雙向鏈表的實現

1、節點定義typedef struct DListElement_{    void * data;    struct DListElement_ *prev;    struct DListElement_ *next;}DList

原创 linux內核 信號量、自旋鎖、completion、互斥體、延時函數

      訪問共享資源的代碼區域稱爲臨界區( critical sections),臨界區需要被以某種互斥機制加以保護,方法有中斷屏蔽、原子操作、自旋鎖和信號量等。        在驅動程序中,當多個線程同時訪問相同的資源時(驅動程序中

原创 MFC EDIT控件中改變背景色和文字顏色

這裏介紹的改變文本編輯框的背景顏色的方法,不需要對CEdit生成新的類,步驟如下:(1) 新建一個基於對話框的MFC應用程序,程序名稱爲Test(2) 在對話框上添加兩個文本框,ID分別爲IDC_EDIT1和IDC_EDIT2(3) 在C

原创 linux git使用說明

一些認識 之前對github和git一直傻傻分不清,以爲是兩種不同的版本管理工具。現在才認識到git是一種版本管理工具,而github只是一個遠程倉庫。實際上沒有github這種遠程倉庫,你計算機中git也會建立一個本地的倉庫,或者鏈接到

原创 linux i2c驅動

1、Linux 的 I2C 體系結構分爲 3 個組成部分 ( 1) I2C 核心(層)。 I2C 核心提供了 I2C 總線驅動和設備驅動的註冊、註銷方法, I2C 通信方法(即“ algorithm”)上層的、與具體適配器無關的代碼以及探

原创 linux設備驅動 阻塞與非阻塞 I/O、異步通知與異步IO

1、阻塞與非阻塞 I/O 阻塞操作是指在執行設備操作時,若不能獲得資源,則掛起進程直到滿足可操作的條件後再進行操作。被掛起的進程進入休眠狀態,被從調度器的運行隊列移走,直到等待的條件被滿足。非阻塞操作的進程在不能進行設備操作時,並不掛起,

原创 linux內核 信號量與自旋鎖、延時函數比較

       在驅動程序中,當多個線程同時訪問相同的資源時(驅動程序中的全局變量是一種典型的共享資源),可能會引發"競態",因此我們必須對共享資源進行併發控制。Linux內核中解決併發控制的最常用方法是自旋鎖與信號量(絕大多數時候作爲互斥

原创 linux設備驅動模型之Kobject、kobj_type、kset

一、sysfs文件系統簡介: 1、sysfs概述 sysfs文件系統是內核對象(kobject)、屬性(kobj_type)、及它們相互關係的一種表現。 sysfs非常重要的特徵:用戶可以從sysfs中讀出內核數據,也可以將用戶數據寫入內

原创 字符設備號管理

  在《深入Linux設備驅動程序機制》書中       在第二章講解字符設備的時候,個人覺得比較有收穫的主要是兩個方面的知識: 1、字符設備號的管理原理(char_device_struct) 2、字符設備驅動的file_operati

原创 Linux設備驅動之Kobject、Kset

LDD3中說,Kobject的作用爲:     1、sysfs 表述:在 sysfs 中出現的每個對象都對應一個 kobject, 它和內核交互來創建它的可見表述。     2、熱插拔事件處理 :kobject 子系統將產生的熱插拔事件通

原创 linux驅動---字符設備的註冊register_chrdev說

首先我們在註冊函數裏面調用了register_chrdev(MEM_MAJOR,"mem",&memory_fops),向內核註冊了一個字符設備。 第一個參數是主設備號,0代表動態分配,這裏的MEM_MAJOR是1。第二個參數是設備的名字

原创 BLE4.0廣播連接過程的底層剖析

一、實驗目的 1、在實驗過程中遇到很多問題,都不知道從何下手,所以決定深入瞭解藍牙協議棧的底層,看是如何運行的,瞭解後,遇到問題就知道從哪裏開始找問題,你懂得; 二、說明 1、由於空間有限,這裏只是貼出部分代碼,有些不能理解的要配合源代碼

原创 BLE4.0配對綁定過程的底層剖析

一、實驗目的 1、瞭解主從配對綁定的過程中底層是怎麼運行的; 二、說明 1、關於配對於綁定,網上查了很多資料都沒查到什麼,問了很多人也沒有回答的,所以我決定自己深入瞭解底層關於配對與綁定是如何運行的,我用了接近兩個星期來理解的,效率很低,

原创 OSAL啓動過程分析

一、SimpleBLEBroadcaster  OSAL啓動過程分析: Main() ==> HAL_BOARD_INIT();//初始化硬件 ==> InitBoard( OB_COLD );//初始化板卡IO ==> HalDrive

原创 藍牙4.0 BLE  SimpleBLEPeripheral_添加新CHAR值及UUID

      UUID, 就是用來唯一識別一個特徵值的ID. handle,就是對應的attribute 的一個句柄。 所有對特徵值的操作,都是通過對UUID 的搜索得到對應的handle之後,通過handle來操作特徵值的。   添加新