記錄下 分散載入LPC1788

2021-08-21 12:36:12 字數 1602 閱讀 4270

這個鏈結是我在官網上找到的關於分散載入檔案的資料。講的比較詳細了。這裡通過乙個例子記錄下我學習的過程,通過分散載入檔案把**從flash裡拷貝到ram裡執行, 基於lpc1788。

先貼下我的sct檔案:

lr_irom1 0x00000000 0x00002000  

rw_iram1 0x20000000 0x00004000 }

lr_irom2 0x00002000 0x0007e000

er_iram1 +0

}

這裡有兩個載入域(load region)lr_irom1和lr_irom2,lr_irom1是初始化程式,拷貝**等,從rom的位址0開始,lr_rom2是應用程式,從rom的0x2000開始。+ro表示唯讀,**或者唯讀資料,一般用來表示**,+rw表示可讀可寫的資料,+zi表示初始化為0的資料。大括號裡面的為執行域(execution region),乙個載入域可以包含幾個執行域,lr_rom2裡面有兩個執行域,vector和er_iram1,我用vector來表示中斷向量區域,er_iram1來表示應用程式區,+0表示緊接著vector排放,empty表示空的,這裡空出0xe4的大小,用來放中斷向量,.any表示除了上面用到的**之外的**,官網上有專門解釋.any的一節。

下面用一張圖來表示這個程式的載入域和執行域:

其實載入域的empty這塊區域是不用空出來的,主要是執行域要空出來,用來拷貝中斷向量,看個人喜好了,我覺得空出來方便引用這塊區域的執行域位址。

這樣框架就比較清楚了,拷貝的程式清單如下:

extern unsigned char image$$vector$$base;

extern unsigned char image$$vector$$length;

extern unsigned char load$$er_iram1$$base;

extern unsigned char image$$er_iram1$$base;

extern unsigned char image$$er_iram1$$length;

void copycode2ram ()

count = (unsigned int)&image$$er_iram1$$length;

pdes = (unsigned char*)&image$$er_iram1$$base;

psrc = (unsigned char*)(&load$$er_iram1$$base + 0xe4);

while (count--)

}

其中拷貝中斷向量的時候要指定中斷向量的偏移位址。load

eriram1eriram1

base表示執行域er_iram1的載入位址;image

eriram1eriram1

base表示執行域er_iram1的執行位址;image

eriram1eriram1

length表示執行域er_iram1的實際長度,vector區域因為是empty,所以實際長度是0,而中斷向量的長度是固定的,所以程式裡就寫了個常數。

LPC1788內部EEPROM使用的問題

最近使用lpc1788內部eeprom儲存資料時候發現問題 lpc1788的eeprom扇區只有 0 62 63扇區不存在 uint32 t i,j uint8 t count uint8 t error 0 debug frmwrk init dbg menu eeprom init count ...

LPC1788在外部RAM除錯總結

除錯工具 mdk 4.72 jlink8 一 mdk設定 圖12.asm 圖2 1處必須預定義no crp,因為在lpc1788啟動檔案startup lpc177x 8x.s中有如下 圖3 117 120這段 是nxp公司的lpc1700系列的mcu特有的一段 其他公司的cortex m3 mcu...

關於LPC2200啟動程式分散載入描述檔案的敘述

在ads lpc2200的啟動模板中有乙個scf資料夾,其中有mem a.scf mem b.scf mem c.scf這3個檔案,這3個檔案是ads的分散載入機制,其目的是將 段和資料段分別定位到制定位址上。可以在arm linker中選擇載入路徑。分散裝在技術概述 分散裝在技術可以把使用者的應用...