原创 uboot的配置和編譯步驟

配置 (1)uboot和linux kernel等複雜項目,都不能直接編譯,都要先配置才能編譯。 (2)將整個BSP打包文件弄到linux的源生目錄中去解壓(tar -jxvf qt_x210v3_130807.tar.bz2),注意

原创 shell中的if、for、while、break和case語句

if語句 if [表達式]; then xxx yyy zzz else xxx ddd uuu fi if的典型應用: 判斷xxx文件是否存在。[ -f xxx ],注意[]裏面前後都有空格,不能省略。 判斷xxx目錄是否存在 [

原创 Git總結

1、初始化一個Git倉庫,使用git init命令。 工作區就是你在電腦裏能看到的目錄,git init會有有一個隱藏目錄.git(這個不算工作區,而是Git的版本庫即Repository)工作區有一個隱藏目錄.git,這個不算工作區

原创 Git常用協議-SSH協議

我們常用的GIT遠程倉庫協議有: – Git協議:爲自帶的網絡協議,它適用於不需要對讀進行授權的大型項目    • 優點:傳輸速度最快   • 缺點:授權機制不靈活,要麼不能推送,要麼都能推送 – HTTP/HTTPS協議    • 優

原创 一道經典的C語言面試題:用變量a給出下面的定義

a) 一個整型數(An integer) b) 一個指向整型數的指針(A pointer to an integer) c) 一個指向指針的的指針,它指向的指針是指向一個整型數(A pointer to a pointer to an

原创 Bootloader的結構和啓動過程

CPU上電後,會在某個地址開始執行,比如MIPS結構的CPU會從0xBFC00000取第一條指令,而ARM結構的CPU則從0x00000000開始,嵌入式開發板中,需要把存儲器件ROM或Flash等映射到這個地址。而Bootloade

原创 派生類的構造函數

默認情況下基類的構造函數不被繼承,派生類需要定義自己的構造函數,但是C++11規定:可用using語句繼承基類構造函數,只不過只能初始化從基類繼承的成員。派生類新增成員可以通過類內初始值進行初始化。語法形式爲: using B::B;

原创 繼承與派生的區別和聯繫

繼承與派生其實是同一過程從不同的角度看,我們將保持已有類的特性而構造新類的過程稱爲繼承,說白了繼承的目的就是實現原來設計與代碼的重用,希望儘量利用原有的類。然而當新的問題出現,原有程序無法解決或不能完全解決時,需要對原有程序進行改

原创 棧操作

棧是一種內存,保存備份各種數據;棧又是一種數據結構,先進後出,有四種形態 FD:滿遞減棧,內存地址減小的方向生長,棧指針指向最後一個入棧的有效數據項,指針先減,再存數據。 ED:空遞減棧,內存地址減小的方向生長,棧指針指向下一個入棧

原创 ARM的三級流水線

CPU流水線就是把一條指令分多個階段分別執行,流水線技術可以使得多個操作同步進行而不是串行,如下圖所示。 ARM使用的是三級流水線來加快指令處理速度,如上圖分別爲取址fetch,譯碼decode,執行execute,如下圖所示,PC

原创 ARM指令集特點

相比CISC,採用RISC的ARM具有以下幾個主要特點: 1)只提供有限的操作,基本上單週期執行每條指令,其指令長度也是等長的(4字節);32位指令的字節分佈爲: 基本格式爲: {} {s} , {, } 其中,<>內的項是必須的

原创 C/C++語言中的NULL

NULL不是C語言關鍵字,本質上是一個宏定義。C++的編譯環境中,編譯器預先定義了一個宏_cplusplus,程序中可以用條件編譯來判斷當前的編譯環境是C++的還是C的。 NULL的標準定義: #ifdef _cplusplus

原创 單鏈表和雙鏈表

數組的元素個數必須事先制定並且一旦指定之後不能更改,解決這個缺陷的辦法就是鏈表,幾乎可以這樣理解:鏈表就是一個元素個數可以實時變大/變小的數組。 鏈表是什麼樣的?它是由一個一個結構完全類似的節點構成的,節點中有一些內存可以用來存儲數據

原创 C++中用try - catch處理異常的情況

正常代碼放在try塊,catch中捕獲try塊用throw關鍵字拋出的異常。 例如: try { //將

原创 Linux內核中鏈表的設計思路

一般實際項目中的鏈表,節點中存儲的數據其實是一個結構體,這個結構體中包含若干的成員,這些成員加起來構成了我們的節點數據區域。 實際上鍊表操作是相同的,而涉及到數據區域的操作就有不同。 鑑於以上2點,能不能有一種辦法把所有鏈表中操作方法