原创 字符串常量指針、常量指針和指針常量區別

char *p = "abcd"; *p = 'b'; printf("%c\n", p[0]); 以上代碼有什麼問題?    首先,編譯器在常量區保存一個字符串abcd,其內容不許修改。 char *p

原创 回調函數

對指針的應用是C語言編程的精髓所在,而回調函數就是C語言裏面對函數指針的高級應用。簡而言之,回調函數是一個通過函數指針調用的函數。如果你把函數指針(函數的入口地址)傳遞給另一個函數,當這個函數指針被用來調用它所指向的函數時,我們就說這個函

原创 extern C 的作用

被extern "C"修飾的變量和函數是按照C語言方式進行編譯和鏈接的,而不是c++,c++會加上參數去編譯和鏈接

原创 cc2541軟件延時函數

asm是內嵌彙編,nop是空操作,執行一個指令週期,2541是增強型的51,32M晶振下,時鐘週期=1/32us,指令週期=時鐘週期=1/32us void Hal_HW_WaitUs(uint16 microSecs) { whi

原创 sizeof 和 strlen用法

sizeof 和 strlen用法: char str[20]="0123456789";  int   a=strlen(str); /*a=10;strlen 計算字符串的長度,以\0'爲字符串結束標記。  int   b=s

原创 指針的大小

指針即爲地址,指針幾個字節跟語言無關,而是跟系統的尋址能力有關,譬如以前是16爲地址,指針即爲2個字節,現在一般是32位系統,所以是4個字節,以後64位,則就爲8個字節。在8位單片機下指針大小就是1個字節了。

原创 如何判斷CPU的大小端

int checkEnd() { int i=0x12345678; char *c=(char *)&i; return(*c==0x12) }返回值:大端返回1,小段返回0 小端就是低位在前,大端就是高位在前 還有聯合體判斷的方法,

原创 操作符優先級

 操作符優先級 優先級 運算符 名稱或含義 使用形式 結合方向 說明 1 [] 數組下標 數組名[常量表達式] 左到右   () 圓括號 (表達式)/函數名(形參表)   .

原创 GetMemory函數的經典錯誤

void GetMemory( char *p ) {  p = (char *) malloc( 100 ); } void Test( void ) {  char *str = NULL;  GetMemory( str );

原创 內存泄漏

個人理解:內存泄漏就是內存泄漏了出來(泄漏的內存不能用),裏面可用的空間就少了,而泄漏出來的內存就是你動態申請的內存在用完之後沒有進行釋放。

原创 有符號變量(負數)與無符號變量(正數)的相加

12 . 下面的代碼輸出是什麼,爲什麼? <span style="font-size:18px;">void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6) puts

原创 cc2541 硬件i2c 讀AT24CM01

之前一直讀不出數據,設備地址對了,宏定義添加了,但就是讀不出數據,調試這個花了我一天半的時間!不能忍:檢查自己確實沒有錯誤後,唯一一個需要注意的地方就是,寫函數後不能立即調用讀函數,因爲在寫需要一定時間,如果還沒寫完就去讀那就會讀取失敗。