freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

arm嵌入式軟件開發(fā)-wenkub

2023-05-22 16:09:58 本頁面
 

【正文】 0x0000 ROM RO 分散加載 (簡單例子 ) 只讀代碼和數(shù)據(jù)保存在 ROM中 C庫函數(shù)初始化代碼 (在 __main) 將 : 從 ROM拷貝 RW數(shù)據(jù)到 RAM 在 RAM中的 ZI 數(shù)據(jù)初始化 RAM 0x10000 0x18000 0x4000 0x0000 ROM Load View RO RW Fill with zeros ZI Copy RW 14 TM 14 66v06 Embedded Software Development Execute View RAM 0x10000 0x18000 0x4000 0x0000 ROM RO LOAD_ROM 0x0000 0x4000 { } RAM 0x10000 0x18000 0x4000 0x0000 ROM Load View RO RW Scatter 描述文件 ? 通配符( *)語法允許簡單的對 CODE 和 DATA 進(jìn)行分組 EXEC_ROM 0x0000 0x4000 { * (+RO) } RAM 0x10000 0x8000 { * (+RW,+ZI) } RW ZI 15 TM 15 66v06 Embedded Software Development RO RW ZI CODE RO DATA RO CODE A B 鏈接器放置規(guī)則 ? 在每個(gè)可執(zhí)行區(qū),鏈接器通過一些基本的規(guī)則來放置 CODE 和 DATA ? 基本的排序方法是通過屬性來安排的 : ? RO 領(lǐng)先于 RW , RW 領(lǐng)先于 ZI ? 有相同的屬性時(shí), CODE 在 DATA之前放置。 ? 大多數(shù)嵌入式系統(tǒng)都有存儲(chǔ)器設(shè)備,他們的地址空間是在整個(gè)存儲(chǔ)器映射中交叉出現(xiàn)的。 } ? 可查看在 ADS Embedded example目錄下的 ,可看到更多的重定向例子 ? 你可以確定有不在連接時(shí)使用 semihosting SWI 的嗎 ?…... 10 TM 10 66v06 Embedded Software Development 消除 C庫函數(shù)中的 semi hosting ? 為了確保在連接時(shí)沒有函數(shù)使用了 semi hosting SWIs , 你可以在程序中加入下面的句子: pragma import(__use_no_semihosting_swi) ? 如果在程序中仍然使用了 semihosting ,編譯時(shí)將會(huì)報(bào)錯(cuò): Error: Symbol __semihosting_swi_guard multiply defined ? 修改 : ? 如果使用 (check verbose linker output for occurrences of I use_ semihosting_ swi), 那么連接器將會(huì)把那些使用了 smeihosting 的程序列出來, 然后: ? 提供你自己可運(yùn)行的功能函數(shù)。 int fputc(int ch, FILE *f) { /* . write a character to an LCD */ char tempch = ch。 heap setup other Semihosting Support 應(yīng)用程序調(diào)用的 C庫函數(shù) eg: fputc() 設(shè)備驅(qū)動(dòng)層 使用 semihosting SWI’s eg: _sys_write() 調(diào)試工具環(huán)境 C Library Debug Agent C庫函數(shù)功能是支持 PC軟件 的,而目標(biāo)板上的可執(zhí)行軟件則依賴相關(guān)的硬件資源;在 ARM體系中,我們可以采用 semihosting通過相應(yīng)的驅(qū)動(dòng)來進(jìn)行調(diào)試。 5 TM 5 66v06 Embedded Software Development ADS默認(rèn)的存儲(chǔ)器映射 ? 在默認(rèn)的情況下,我們鏈接、定位、運(yùn)行在 0x8000 ? heap 被直接放置在數(shù)據(jù)區(qū)的上面 ? 堆棧的基地址是通過調(diào)試環(huán)境從 C庫函數(shù)的 Startup Code 里讀取出來的。 sendchar(amp。 ? 在 ADS 編譯器和庫函數(shù)手冊 , 表 42給出了所有使用了 semihosting的 C庫函數(shù)。 ? 分散加載提供了一種把你的代碼和數(shù)據(jù)放在不同的存儲(chǔ)器定位上的辦法 ? 分散加載定義了兩種類型的存儲(chǔ)器區(qū)域。 ? 更多的排序方法決定于: ? 輸入的組名按字母排序 , ? 在 ARMLINK命令行中指定的順序。 start address and length { EXEC_ROM 0x0000 0x4000 。 ZI addresses to zero } RAM 0x10000 0x8000 { * (+RO) 。(所以 *必須用) Error: L6202E: Section Region$$Table cannot be assigned to a nonroot region. Error: L6202E: Section ZISection$$Table cannot be assigned to a nonroot region. ? 注意 : 如果 * (+RO)被定位在 root 區(qū) ,在此之前的將被自動(dòng)放置 ? Main應(yīng)用程序的入口點(diǎn)必須放在 root區(qū)。 20 TM 20 66v06 Embedded Software Development Stack 和 Heap 初始化 C Library User Code __main copy code and data zero uninitialized data __rt_entry initialize library functions call toplevel constructors (C++) Exit from application main( ) cause linker to pull in library initialization code Image Entry Point __user_initial_stackheap( ) set up application stack and heap 21 TM 21 66v06 Embedded Software Development Runtime 存儲(chǔ)器模式 ? 你必須決定在放置 stack和 heap時(shí)所使用的區(qū)域是單一的區(qū) (oneregion model)或是不同的兩個(gè)區(qū) (tworegion model) Heap Stack Stack One region model Two region model HB SB SB HB HL 單一存儲(chǔ)器模式是默認(rèn)方式 為了實(shí)現(xiàn)多區(qū)域模式,你可以使用 use_two_region_memory 在所有的模式下,軟件堆棧檢查要許可。 r2 not used (HL) 。 ? 使用 Image$$RW$$Base / Image$$ZI$$Base 連接符號 ? 這些符號對 scatterloading是無效的。 … ENTRY B Reset_Handler B Undefined_Handler B SWI_Handler B Prefetch_Handler B Data_Handler NOP 。 interrupts 27 TM 27 66v06 Embedded Software Development ROM or RAM at 0x0? ? 需要一個(gè)有效的地址在 0x0 這項(xiàng)功能可被編碼在像 RESET HANDLER 一樣的模塊中 在本章結(jié)束的時(shí)候,我們還會(huì)講到。 Address of CM Control Register Remap_bit EQU 0x04 。 ROM. LDR pc, =Instruct_2 Instruct_2 。 Reset_Handler follows on from here 這個(gè)功能也可在有 mmu時(shí)使用 ROM/RAM的重定向29 TM 29 66
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1