1、什么是分散加載 ??
??????簡單來說就是讓編譯器高速MCU內核哪里存的是代碼、哪里存的是數據,去哪個特定的地址找到下一步需要運行的函數,就是高速編譯器把每一個編譯好的函數、數據放到具體的哪一個物理地址。
?
2、分散加載常見應用場景
????????* Bootloader & 程序升級
?????Bootloader的原理就簡單來說在MCU的Flash里面同時擺放2個(或多個)不同工程的程序,一個Bootloader程序和一個用戶程序,那么這就需要調整分散加載文件,以達成在一個Flash里面同時擺放兩個不同程序的目的。
???????程序升級都是為了增加一個小功能或修復一個小BUG,不需要全部升級而是只升級一點點。當然要實現(xiàn)這個功能同樣需要分散加載的配合,把可能會后續(xù)升級的部分函數或數據事先分配好空間,留好空間上的余量,這些都需要分散加載來完成。
?
????????* 加速程序運行速度(如:對速度有較高要求的算法等、RTOS kernel)
????????在SRAM中運行的程序要比在XIP Flash中執(zhí)行要快,性能提升明顯。
?
????????* 訪問擴展存儲&對存儲區(qū)的劃分
???????如果要把外擴的存儲用于運行代碼/擴展RW數據段等用途,簡單來說就是把片內地址映射到片外,需要按照尋址空間的方式來訪問擴展存儲的話,比如擴展Nor-Flash、擴展SDRAM、擴展SRAM等,那就需要分散加載配合。(只作存儲數據的話,分散加載不是必要的?。。。?/span>
?
3、分散加載的基本結構定義以及分散加載的目的
?
????Code段:表示程序代碼部分
????RO-data段:程序定義的所有常量以及const類型數據
????RW-data段:已經初始化的所有靜態(tài)變量
????ZI-data段:未初始化的靜態(tài)變量
????RO段:指Code以及RO-data的統(tǒng)稱
????????????具體分布可查看對應的*.map文件。
????RW+ZI數據段最終運行時會占用片內SRAM或外擴的RAM存儲器,而Code+RO-data+RW-data數據最終會產生對片內Flash的占用或外擴程序存儲區(qū)的占用。
所以分散加載的根本目的就是:
????????* 指引把RO-data數據段、RW數據段從片內程序存儲區(qū)里面(一般是片內Flash),搬到片內程序運行區(qū)(一般是片內SRAM);
????????* 在片內程序運行區(qū)(一般是片內SRAM)內分配ZI數據段運行需要的空間并把這段數據初始化為0;
????????* 初始化堆棧;
????????* 對于有些指定加載到程序運行區(qū)(一般是片內SRAM)的RO數據段,把他們加載到程序運行區(qū)(一般是片內SRAM)里面。
?
{ 類比:這個和使用的電腦運行操作系統(tǒng)或者軟件原理類似,電腦就是把硬盤里面的操作系統(tǒng)加載到內存里面,然后CPU從內存里面取數據以及程序指令來運行的。}
TIP:
??????RW以及ZI數據段的初始化是在分散加載過程中完成的,也就是在__main中完成的,比如你定義一個全局變量,并給它賦值,只有在__main結束后你才能看到這個全局變量被賦值成功的,也就是說在__main之前,使用全局變量是行不通的。
關于億道電子
億道電子是國內最全面的開發(fā)工具提供商,致力于將全球先進的軟件產品引薦給國內研發(fā)型企業(yè)使用,為企業(yè)提供研發(fā)、設計、管理過程中使用的各種軟件工具,并致力于和客戶一同提高研發(fā)、設計效率,縮短設計周期。億道電子先后與arm、Altium、Ansys、QT、TestPlant、CollabNet、Parasoft以及TouchGFX等多家全球知名公司建立戰(zhàn)略合作伙伴關系,并成為他們在中國區(qū)的重要分銷合作伙伴。億道電子專注開發(fā)、設計、管理工具數十年,客戶超過6000家,具有豐富的工具使用及客戶支持經驗積累,可以為客戶提供從arm開發(fā)、EDA板級設計、軟件編譯及測試工具、結構設計工具、多物理場仿真工具以及嵌入式GUI工具等產品與服務。億道電子在北京、上海、深圳設有分公司,業(yè)務遍布全國。
摘自21ic網