原创 LWIP的調試方式

LWIP提供了觀察和調試協議棧內部的方法。LWIP關於調試的內容在debug.h和stats.h文件中可見。 9.1 調試接口重定向 爲了實現重定向 printf()函數,我們需要重寫 fputc() 這個 c 標準庫函數,因爲

原创 Cortex-M3中斷

1 異常 M3支持15個系統異常,240個外部異常IRQ,其中NMI,復位,hardfault三個異常的優先級固定不可更改且是負數,其餘的都可編程。 M3的異常分爲搶佔優先級和子優先級。 2 關於中斷優先級 M3中,除了復位,N

原创 SVC和PEDSVC

SVC異常是必須在執行SVC指令後立即得到響應的(對於SVC異常來說,若因優先級不比當前正處理的高,或是其它原因使之無法立即響應,將上訪成硬fault——譯者注),應用程序執行SVC時都是希望所需的請求立即得到響應。另一方面,Pe

原创 B , BX, BL, BXL

B,BX,BL,BXL B Label ;跳轉到Label處對應的地址 BL Label ;跳轉到Label對應的地址,並且把跳轉前的下條指令地址保存到LR BX reg ;

原创 C中的+0與-0

**C中的+0與-0 因爲-1 在內存中的存儲是 FFFFFFFF。而 -0比-1大於1,所以 -0 本來實際內存應該爲 100000000 然而整形只有四個字節,所以必須捨去最高位1,最後成爲00000000和+0沒有什麼區別,但是進

原创 IAR將變量定義在指定地址

1、將變量定義在指定地址 IAR中通過操作符@或者#pragma location指令來把全局變量和靜態變量放到絕對地址上。 在此操作中,尤其注意的是要滿足地址對齊。同時,所有變量必須聲明爲__no_init。   對於__no_ini

原创 LWIP定時器

在操作系統層TCP/IP 協議中很多時候都要用到定時,定時器的實現是 TCP/IP 協議棧中一個重要部分。LWIP 爲每個與外界網絡連接的任務都有設定了 timeout 屬性,即等待超時時間。在具體實現上,每個任務都對應一個 sys_ti

原创 邏輯與’&&’和邏輯或’||’的陷阱

爲了提高系統效率,邏輯與和邏輯或操作的規定如下:如果對第一個操作數求值後就可以推斷出最終結果,第二個操作數就不會進行求值!比如下面代碼: if((i>=0)&&(i++ <=max)) { //其它

原创 ucos_ii定時器詳解

UCOSII從V2.83版本以後,加入了軟件定時器,這使得UCOSII的功能更加完善,在其上的應用程序開發與移植也更加方便。在實時操作系統中一個好的軟件定時器實現要求有較高的精度、較小的處理器開銷,且佔用較少的存儲器資源。 ucosII

原创 初學者EFM32上移植uC/OSII

前言 之前大學接觸過uc/os,大學開了ARM這門課程,用的是周立功的教材,好像是大四開的,你懂的,實驗只帶手不帶腦,複製–編譯–下載–嘿,燈亮了–走人。 最近在接觸EFM32系列MCU,就想彌補一下大學的遺憾。爲時間4天的準備和移植工

原创 考考你的C語言

問題1: int main(void) { int x=3; fun(); printf("%d",x); } void fun(void) { } 實現fun(),是main函數中的打印結果不是3! 問題2

原创 IAR 鏈接

基本概念 section與section屬性 section是包含數據段或者代碼段可放置在存儲器內的最小邏輯單位,section即可放在RAM也可放在ROM內。在通常的嵌入式應用中,放置在RAM中的section沒有任何內容,只是佔有該

原创 啓動代碼中關於變量的初始化

對於一個標準C程序所用到的全局和靜態變量都是定位在固定的內存空間,在程序啓動時必須賦予確定的數值,對於程序中沒有賦初值的變量,編譯器默認賦值爲0。對於__no_init限定的變量則不會被初始化。 對於一個標準的C程序中用到的變量類別如下 

原创 單片機前後臺系統的優缺點

一般的單片機系統大多是採用了此種模式編程,優點是簡潔,明瞭,新手的上手速度很快,特別是專注用來做一件事情的時候,一個while循環基本是無敵的。比如實現一個i2c slave ,完全可以用一個while 來模擬實現一個i2c 的slave