mcu整體工作流程可總結如下:
上電——》主時鐘起振——》啟動**——》使用者程式(main函式)。
對於我們應用開發來說,大部分工作重點是在應用程式編寫這塊。特別是高階mcu的出現,如arm系列的stm32、lpc等32位mcu,以及晶元原廠的完善底層**,啟動**已經固化在晶元內部flash(稱為bootloader),或者已經提供完整的彙編啟動原始碼。因此,啟動過程這塊,我們比較陌生,但基本的原理還需了解,不排除面試或者使用到實時系統(rtos)時需要修改啟動彙編**。
mcu上電(復位)時,從固定的位址啟動,一般是位址0x00000000,如arm7;個別特殊的如stm32預設啟動位址為0x8000000(flash區啟動)。啟動過程主要完成兩部分工作,乙個是硬體執行環境,如中斷向量表、暫存器、看門狗等,另乙個是軟體環境,如c庫環境、zi(未初始化的記憶體變數)等。
一、硬體環境工作
1.初始時鐘
初始化核心時鐘,主時鐘,各個外設的時鐘。
2.關閉看門狗
看門狗是用來監控應用程式的異常跑飛而復位cpu,在初始化階段,由於沒有「餵狗」這一動作,有可能導致cpu不斷復位,因此,首先會關閉看門狗,初始化完,再開啟。
3.建立中斷向量表
4.初始化堆疊暫存器
堆疊的作用乙個就是儲存現場(上下文),如函式呼叫或者中斷傳送時,將當前執行位址壓棧,呼叫完成再返回此處執行程式。另乙個作用就是儲存引數,如臨時變數。因此,在啟動階段需初始化堆疊暫存器、堆疊的大小、起始位址等。
5.記憶體初始化
選擇內部或者外部ram。
二、軟體環境工作
1.把ro,rw從它們的載入域複製到它們的執行域中去。
2.初始化(清零)zi域。
3.初始化堆疊指標
4.初始化c庫環境
包括c庫所需的記憶體空間、程式執行所需資源、c庫初始化。
三、cortexm3啟動
cortexm3有3種啟動方式
1、boot1=1boot0=1,中斷向量表定位於sram區,即起始位址為0x2000000,同時復位後pc指標位於0x2000000處。
2、boot1=xboot0=0,中斷向量表定位於flash區,即起始位址為0x8000000,同時復位後pc指標位於0x8000000處。
而cortex-m3核心規定,起始位址必須存放堆頂指標,而第二個位址則必須存放復位中斷入口向量位址,這樣在cortex-m3核心復位後,會自動從起始位址的下乙個32位空間取出復位中斷入口向量,跳轉執行復位中斷服務程式。對比arm7/arm9核心,cortex-m3核心則是固定了中斷向量表的位置而起始位址是可變化的。即是對於flash啟動來說(正常工作也是flash啟動),0x8000000位址存放的是棧頂位址__initial_sp,0x8000004位址存放的是復位中斷向量reset_handler入口位址(stm32使用32位匯流排,儲存空間為4位元組對齊);在編寫多段程式時,偏移位址空間需注意,如編寫乙個bootloader,從bootloader到應用程式段的相互跳轉。
關注睿感電子科技訂閱號~
帶您玩轉硬體,不迷路~
工作流的好處
工作流的4個主要作用 明白了作用,實際就是需求,我們就知道應該怎麼來辦了。主要來說有如下作用 1 提高效率,減少等待 流程自動化,減少等待,避免等待中浪費時間。可以將企業內的結構化流程通過系統進行設定,並自動流轉。可以避免在等待中浪費時間,縮減行政成本,提高決策速率 2 規範行為,落實制度 規範企業...
工作流的看法
最近開發了一套工作流系統,當然,相對比較簡單,對於複雜的自動機沒有實現。開發完之後對soa有了更深入的理解。工作流機制是soa的靈魂,下面咱就談談這個靈魂。完整的工作流系統包含三個部分 第一,工作流本身的資料模型以及控制流程例項流轉的引擎 第二,與業務資料密切相關的工作流邊界,負責關聯業務資料和工作...
MapReduce的工作流
如何將資料處理問題轉化為mapreduce模型 資料處理問題更複雜,通常是因為有更多的mapreduce作業,而不是更複雜的map函式和reduce函式,換而言之,通常是增加更多的作業,而不是增加作業的複雜度。對於更複雜的問題,可考慮比mapreduce更高階的語言,例如pig hive spark...