原创 linux內核部件分析(三)——記錄生命週期的kref

       kref是一個引用計數器,它被嵌套進其它的結構中,記錄所嵌套結構的引用計數,並在計數清零時調用相應的清理函數。kref的原理和實現都非常簡單,但要想用好卻不容易,或者說kref被創建就是爲了跟蹤複雜情況下地結構引用銷燬情況。

原创 sysfs API總結

     sysfs是用於表現設備驅動模型的文件系統,它基於ramfs。要學習linux的設備驅動模型,就要先做好底層工作,總結sysfs提供給外界的API就是其中之一。sysfs文件系統中提供了四類文件的創建與管理,分別是目錄、普通文件

原创 linux內核部件分析(八)——設備驅動模型之bus

    前面我們分析了設備驅動模型中的device和driver,device和driver本來是不相關的東西,只因爲bus的存在,才被聯繫到了一起。本節就來看看設備驅動模型中起樞紐作用的bus。本節的頭文件在include/linux/

原创 ucos中的三種臨界區管理機制

熟悉ucos,或者讀過Jean.J.Labrosse寫過的ucos書籍的人,一定會知道ucos中著名的臨界去管理宏:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。同樣是通過關中斷來保護臨界區,OS_ENT

原创 linux內核部件分析(九)——設備驅動模型之device-driver

    前面我們分析了device、driver、bus三種類型,主要是三者的註冊與註銷,在sysfs中的目錄與屬性文件創建等內容。本節就來詳細分析下,在設備註冊到總線上時,總線是如何爲其尋找對應的驅動的;在驅動註冊到總線上時,總線又是如

原创 newlib的編譯和使用

要熟悉一個新的處理器平臺,第一件事是寫一些裸機程序。這時我們最想要的,是實現一個printf打印函數,以便及時輸出各種信息。 除去下層的字節輸出驅動不說,printf本身的實現就有夠麻煩,如果平時有保存相關的代碼還好,不然就很浪費時間。

原创 調試小記3

在實驗新東西時往往遇到這樣的情況,你一點點地增加功能,添加代碼。但在添加某一個新東西時,突然發現原來已經穩定的內容又不行了,真是不進反退。這時往往不是新的東西有問題,而是新的東西和已有內容混合造成的影響。甚至可以理解爲已有內容中存在的bu

原创 做事情的六條原則

這是我自己琢磨的做事的六條原則。我發現自己如果沒有遵守它們中的某一條,就會行動緩慢,效率低下,基本看不到成果。所以應該記錄下來,作爲備忘。 六條原則如下: 1. 一次只做一件事情。即一個時期只能以一件事情爲主,其它都是爲了應付。 2. 不

原创 調試小記2

最近遇到一個很棘手的bug,值得記錄一下。 這是在stm32f103vct6單片機上運行的ucos程序,我根據一些書上的描述移植的(很簡單),使用標準庫和usb驅動庫,因爲板卡的USART1沒有直接的串口接口,所以使用usb與主機通信並調

原创 關於做事情的計劃

    我發現自己在做一種事情的時候,是最慢的,最不情願的。那就是必須做的、但自己覺得不緊急不重要、又沒有明確的時間界限的事。比如學英語、鍛鍊、對已有的程序進行修訂,等等。其實這是非常不好的。千里之堤,潰於蟻穴。往往是那些微不足道的小事,

原创 linux對嵌入式程序員的幫助

    之前在arm和powerpc的實驗板寫過一些代碼,得以接觸arm上bootloader- vivi 和powerpc上的bootloader-uboot。兩者雖然都是bootloader,但我卻有很有意思的發現。     vivi

原创 SRM 693 - TriangleTree (枚舉加剪枝)

題意如下:在一個無向圖中,求無三角形的頂點子集的個數。三角形是指存在頂點a, b, c. a, b, c三頂點間任兩個點都有一條邊相連。 long long count(int n, vector<int> x, vector<int>

原创 那些疑難雜症

     在平時編程時經常遇到各種疑難雜症,有的只是小bug,調試調試就過去了。有的卻是因爲自己對CPU或硬件的工作方式理解有錯誤,這就麻煩了,因爲你永遠也無法從你百分百相信的代碼裏找出錯誤。除非是長期苦惱糾結後的靈機一動,或者看過別人代

原创 增加資料收集和經驗分享的部分

     很長時間以來,我理所當然地用着開源的工具和代碼,看別人的博客和文章,卻沒有什麼貢獻,自己的工作成果和經驗幾乎沒有和外界分享過。現在我才發現自己太過固步自封。一個程序員專注於自己的技術是一件好事,但缺乏和外界的溝通和互動是很大的問

原创 貌似桶排序的快速排序—線性時間

   我們假設要對一個數組進行排序,排序的key值爲32位整數類型。那麼可以使用快速排序對數組進行排序,但快速排序雖然簡單易用,但它的平均情況和最壞情況複雜度是不同的。平均情況下,快速排序的時間複雜度爲O(nlogn),空間複雜度爲O(