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

正文內(nèi)容

arm嵌入式軟件開發(fā)(已修改)

2025-05-27 16:09 本頁面
 

【正文】 1 TM T H E A R C H I T E C T U R E F O R T H E D I G I T A L W O R L D 嵌入式軟件開發(fā) 2 TM 2 66v06 Embedded Software Development 嵌入式開發(fā)過程 “ PC軟件” h e ll o wo rld獨立的嵌入式應用 當程序員開始開發(fā)一個基于 ARM應用的時候,你可以使用 ARM的 ADS編寫類似于“ HELLO WORLD”的程序,使用 ARMulator或者在評估板上來調(diào)試,但當你把他移植到獨立的嵌入式應用設(shè)備中時,下面這些問題就成為我們首要考慮的: ? 硬件環(huán)境中所使用的 C庫函數(shù) ? 目標板上的存儲器資源 ? 應用程序的初始化 3 TM 3 66v06 Embedded Software Development 議程 ? PC軟件的構(gòu)造 定制標準 C庫函數(shù)到目標板 定制 IMAGE的存儲器映射到目標板 復位和初始化 深層次的存儲器器映象考慮 編譯和調(diào)試 IMAGE 4 TM 4 66v06 Embedded Software Development ADS默認的標準 C庫 ANSI C input/ output error handling stack amp。 heap setup other Semihosting Support 應用程序調(diào)用的 C庫函數(shù) eg: fputc() 設(shè)備驅(qū)動層 使用 semihosting SWI’s eg: _sys_write() 調(diào)試工具環(huán)境 C Library Debug Agent C庫函數(shù)功能是支持 PC軟件 的,而目標板上的可執(zhí)行軟件則依賴相關(guān)的硬件資源;在 ARM體系中,我們可以采用 semihosting通過相應的驅(qū)動來進行調(diào)試。 5 TM 5 66v06 Embedded Software Development ADS默認的存儲器映射 ? 在默認的情況下,我們鏈接、定位、運行在 0x8000 ? heap 被直接放置在數(shù)據(jù)區(qū)的上面 ? 堆棧的基地址是通過調(diào)試環(huán)境從 C庫函數(shù)的 Startup Code 里讀取出來的。 ? ARMulator = from configuration file () ? default = 0x08000000 ? MultiICE = from debugger internal variable $top_of_memory ? default = 0x80000 RO RW ZI 0x8000 鏈接時確定 由調(diào)試環(huán)境提供 Heap(malloc,alloc) Stack 6 TM 6 66v06 Embedded Software Development C Library User Code 應用程序啟動 __main ? copy code and data ? zero uninitialized data __rt_entry set up application stack and heap initialize library functions call toplevel constructors (C++) Exit from application main( ) causes the linker to pull in library initialization code 程序入口點 7 TM 7 66v06 Embedded Software Development Agenda 一個 PC軟件的構(gòu)造 定制 標準 C庫函數(shù)到目標板 定制 IMAGE的存儲器映射到目標板 復位和初始化 深層次的存儲器器映象考慮 編譯和調(diào)試 IMAGE 8 TM 8 66v06 Embedded Software Development 重定向 C庫函數(shù) (1) Semihosting Support ANSI C input/ output ? 你可以使用適合你目標板運行的驅(qū)動來替換標準 C庫中的設(shè)備驅(qū)動。 Eg: printf( ) 可打印到 LCD上,而不是打印控制臺上 input/ output ANSI C C Library User Code Debug Agent Target Hardware Retarget 9 TM 9 66v06 Embedded Software Development 重定向 C庫函數(shù) (2) ? 要重定向 C庫函數(shù) ,簡單的辦法是使用你自己的可執(zhí)行的 semihosting SWIs來代替原來的 C庫函數(shù),從而來滿足你的系統(tǒng)要求 比如說 , the printf()系列函數(shù) (sprintf()除外 ) 都會調(diào)用 fputc(). 在默認情況下 fputc()的執(zhí)行使用了 semihosting SWI. 用下面的語句來代替: extern void sendchar(char *ch)。 int fputc(int ch, FILE *f) { /* . write a character to an LCD */ char tempch = ch。 sendchar(amp。tempch)。 return ch。 } ? 可查看在 ADS Embedded example目錄下的 ,可看到更多的重定向例子 ? 你可以確定有不在連接時使用 semihosting SWI 的嗎 ?…... 10 TM 10 66v06 Embedded Software Development 消除 C庫函數(shù)中的 semi hosting ? 為了確保在連接時沒有函數(shù)使用了 semi hosting SWIs , 你可以在程序中加入下面的句子: pragma import(__use_no_semihosting_swi) ? 如果在程序中仍然使用了 semihosting ,編譯時將會報錯: Error: Symbol __semihosting_swi_guard multiply defined ? 修改 : ? 如果使用 (check verbose linker output for occurrences of I use_ semihosting_ swi), 那么連接器將會把那些使用了 smeihosting 的程序列出來, 然后: ? 提供你自己可運行的功能函數(shù)。 ? 在 ADS 編譯器和庫函數(shù)手冊 , 表 42給出了所有使用了 semihosting的 C庫函數(shù)。 ? 注意 : 連接器在用戶自己的應用代碼中不會出現(xiàn)任何有關(guān) semihosting SWI使用的報告。 11 TM 11 66v06 Embedded Software Development Agenda 一個 PC軟件的構(gòu)造 定制 標準 C庫函數(shù)到目標板 定制 IMAGE的存儲器映射到目標板 復位和初始化 深層次的存儲器器映象考慮 編譯和調(diào)試 IMAGE 12 TM 12 66v06 Embedded Software Development 分散加載( Scatterloading) ? 在一個實際應用當中,你可能并不想在 0x8000處開始運行。 ? 大多數(shù)嵌入式系統(tǒng)都有存儲器設(shè)備,他們的地址空間是在整個存儲器映射中交叉出現(xiàn)的。 ? 分散加載提供了一種把你的代碼和數(shù)據(jù)放在不同的存儲器定位上的辦法 ? 分散加載定義了兩種類型的存儲器區(qū)域。 ? Load 區(qū): 在 reset/load時保留了應用程序的代碼和數(shù)據(jù) (典型應用為 ROM). ? Execution 區(qū) – 在程序執(zhí)行的同時保留了程序的代碼和數(shù)據(jù)。在應用程序啟動 期間,每個 load區(qū)都可創(chuàng)建一個或多個可執(zhí)行區(qū)。 ? 分散加載了的應用把詳細的存儲器映射保存在一個描述文件中,作為一個參數(shù)給 armlink使用 eg: armlin
點擊復制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1