




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
演示文稿多核程序燒寫固化目前一頁\總數三十八頁\編于二十一點(優(yōu)選)多核程序燒寫固化目前二頁\總數三十八頁\編于二十一點主要內容可執(zhí)行文件生成過程1
多核燒寫文件生成原理2
多核燒寫文件生成過程4
多核燒寫操作過程5
多核Boot原理3
目前三頁\總數三十八頁\編于二十一點1.可執(zhí)行文件生成過程目前四頁\總數三十八頁\編于二十一點1.可執(zhí)行文件生成過程一個Demo程序的生命周期一般是從C語言程序開始的,因為這種形式編寫最為方便。為了在系統上運行Demo程序,其每一條語句都需要被轉化為低級的機器指令(machinelanguage),并按照一定格式打包以二進制磁盤文件存放,該形式的程序稱為可執(zhí)行目標文件(executablefile),被加載到內存后,由系統運行。在文本編輯器中編輯的源程序成為可執(zhí)行目標文件需要經過四步處理:預處理(preprocesser)、編譯(compiler)、匯編(assembler)以及鏈接(linker)。目前五頁\總數三十八頁\編于二十一點1.可執(zhí)行文件生成過程預處理階段:預處理器根據字符#開頭的命令修改C源程序,例如main.c中第一行#include<stdio.h>,告訴預處理器讀取系統文件stdio.h中的內容并將其直接插入到程序文本中;而宏定義告訴預處理器將程序文本中對應的字符進行替換。附帶演示程序Demo,基于CCSv5開發(fā)平臺編輯生成。目前六頁\總數三十八頁\編于二十一點1.可執(zhí)行文件生成過程編譯階段:編譯器將預處理器輸出的文件翻譯成匯編語言程序(.asm)。匯編語言程序中的每一條語句都以一種標準的文本格式確切的描述了一條低級機器語言指令(參看參考文獻[2])。匯編語言為不同高級語言的不同編譯器提供了統一的輸出語言。有時為提高程序的執(zhí)行效率,程序員可以直接編寫匯編程序文件(例如Demo程序中的sum.asm)。目前七頁\總數三十八頁\編于二十一點1.可執(zhí)行文件生成過程匯編階段:匯編器將輸入的匯編文本(.asm)逐條翻譯成二進制機器語言指令,并把這些指令打包成可重定位的目標程序(relocatableobjectprogram),保存到各自的目標文件(.obj)中。該目標文件是二進制文件,它的字節(jié)編碼是機器語言指令而不是字符,如果用文本編輯器打開.obj文件,將看到一堆亂碼.目前八頁\總數三十八頁\編于二十一點1.可執(zhí)行文件生成過程鏈接階段:通常,整個程序由多個.c文件組成,經過前面的處理生成各自對應的可重定位目標文件(.obj),程序調用了若干庫函數(例如printf())也保存在經過單獨編譯匯編過的目標文件庫(.lib)里。鏈接器在.cmd文件的指導下將這些文件合成一個可在系統上運行的可執(zhí)行文件。目前九頁\總數三十八頁\編于二十一點1.可執(zhí)行文件生成過程鏈接階段:編譯器和匯編器生成從地址0開始的代碼和數據節(jié)。鏈接器通過把每一個符號定義(在可重定位文件中,對程序外部文件的變量或函數的引用通過一個符號定義來表示)與存儲位置聯系起來(.cmd),然后修改這些符號的引用,使得他們指向這個存儲器的位置(引用符號由引用變量或函數的具體存儲器地址代替),從而實現重定義這些細節(jié)。最后鏈接器將經過重定位的各代碼和數據節(jié)組成一個完整的可執(zhí)行目標文件,加載到處理器中即可運行。(鏈接器的實現細節(jié)參看文獻[1]的第7章鏈接)目前十頁\總數三十八頁\編于二十一點2.多核燒寫文件生成原理目前十一頁\總數三十八頁\編于二十一點2.多核燒寫文件生成原理對于多核編程,各核源文件分別經CCS編譯、匯編、鏈接為各自對應的.out文件,但該文件不能被直接燒寫到外部Flash中,必須經過工具鏈處理為滿足Bootloader的格式即如右圖所示的鏡像文件(.dat)。該文件經CCSv5自帶的Flash燒寫工程(my_SPI_modify)燒寫到外部Flash,之后上電系統完成自舉,程序正常運行。目前十二頁\總數三十八頁\編于二十一點2.多核燒寫文件生成原理鏡像文件就是用戶要燒寫到外部Flash上的全部數據文件,它是由Boot參數表(在文件前部)和應用程序的根表數據(文件后部)的合成數據文件。單核和多核的Boot參數表格式都一樣,區(qū)別就是后部的根表數據。目前十三頁\總數三十八頁\編于二十一點2.多核燒寫文件生成原理Boot參數表占用8個字(32Bytes),位于鏡像文件的開頭。不同的字段具有不同的意義,用于指導啟動過程。下表列出了SPI啟動模式下參數表的配置寄存器。由于SPIboot是寄存器的直接讀寫,因此配置過程中不會涉及到EDMA寄存器的配置(因此前12個字段被忽略)。這些參數部分可以通過讀取管腳配置來填充(參看參考文獻[7],p.27-33),也可以被用戶自定義修改。注意:無論是管腳配置還是參數表的書寫都是為了生成boot參數表。在我們的系統中是通過DSP外部13個配置管腳配置Boot參數的,所以.dat文件中的Boot參數表被忽略。目前十四頁\總數三十八頁\編于二十一點2.多核燒寫文件生成原理單核根表:根表是應用程序的所有代碼和數據以在片上占用地址來分段存儲的數據包,包的第一個4B是core0程序中main()函數的入口地址_C_int00,后面由若干數據段組成,每個段前4B為該段數據的字節(jié)長度,接著4B為該段在片上的存儲地址,后面是具體代碼和數據。所有數據段結束后是4個字節(jié)的0作為根表的結束標記。多核根表:把各輔核的代碼數據段及入口地址值按照上述單核根表的格式續(xù)寫在core0根表后,其中入口地址值的地址為各核的BOOT_MAGIC_ADDRESS地址。最后同樣以4個字節(jié)的0作為根表的結束標志。目前十五頁\總數三十八頁\編于二十一點2.多核燒寫文件生成原理BOOTROM中的代碼完成bootloader初始化(PLL、CPU時鐘、啟動方式等)后會繼續(xù)初始化core的L2RAM緩存的最后0xd23f個字長的代碼,此段代碼用于保存Boot配置信息并指導后續(xù)boot過程。目前十六頁\總數三十八頁\編于二十一點2.多核燒寫文件生成原理BOOT_MAGIC_ADDRESS地址是每個core各自一塊固定的內存。由上表所示,
BOOT_MAGIC_ADDRESS地址是ROM搬移到RAM信息的最后一個字。該字存放著各個core初始化之后需要跳轉到的c程序入口地址_c_int00()。根據c66x內存的規(guī)劃設計,不同core的BOOT_MAGIC_ADDRESS位于在該core本地L2RAM的最后一個word里。由于多核DSP采用全局地址來區(qū)別不同核的RAM地址,因此每個核的BootMagic地址是0x1x87fffc(x為核號)。目前十七頁\總數三十八頁\編于二十一點2.多核燒寫文件生成原理工具鏈:
將CCS生成的.out文件轉化為Bootloader可以“理解”的格式是c66x啟動至關重要的一步。與以前的DSP啟動相比,c66x系列的工具鏈更加復雜和多樣化。文件轉換格式也呈現多態(tài)化。以.dat文件格式為例,生成所需的鏡像文件需要以下工具鏈做支持:目前十八頁\總數三十八頁\編于二十一點2.多核燒寫文件生成原理工具鏈:hex6x文件需要和.rmd文件配合使用,后者描述了boot參數表模式,ROM寬度,大小端模式等信息。由此得到8個核的.btbl文件,該文件包含了大部分的內容信息,再經過兩個小工具的轉化可以得到有效數據信息。此時的.ccs文件只包含各個段的內容,不包含Boot參數的內容,因此需要將一定格式的參數配置信息進行解析,作為boot參數表頭加在.ccs文件上成為一個含有參數配置頭的.ccs文件。最后由于ROMbootloader只識別大端(BigEnd)模式數據,所有需要進行一次大小端的轉化。至此一個完整的可以被ROMBootloader識別的多核鏡像文件就成功生成。目前十九頁\總數三十八頁\編于二十一點3.多核Boot原理目前二十頁\總數三十八頁\編于二十一點3.多核Boot原理C66x芯片對典型C6000系列芯片做了改進,不需要由用戶在外部Flash起始的1K空間編寫二級Bootloader。C66xDSP內部有一個固化的ROM存放著boot代碼(ROMBootloader)。每當DSP啟動時,會自動從這里讀取代碼并執(zhí)行。此代碼是固化的不可更改的,其作用就是根據管腳配置方式對核進行初始化(比如PLL等)和完成不同模式的Boot處理(搬運程序和代碼到指定的內部RAM中)。目前二十一頁\總數三十八頁\編于二十一點3.多核Boot原理CPU執(zhí)行BootROM中的代碼將外部flash中的程序和數據搬移到內部RAM中。之后core0啟動初始化外設,此時其他core都會執(zhí)行相關的代碼映射IPC中斷,并配置相應的寄存器,然后進入IDLE狀態(tài),等待core0的發(fā)起IPC(Inter-Process-Communication)中斷。當core0完成初始化后向其他core發(fā)送IPC中斷。其他core在接收到中斷后啟動執(zhí)行代碼,即其他核是在core0的命令下執(zhí)行第一句代碼。目前二十二頁\總數三十八頁\編于二十一點3.多核Boot原理core0在SPI啟動中起到至關重要的作用。作為主核,核0負責著搬移鏡像,寫B(tài)OOT_MAGIC_ADDRESS地址值,以及發(fā)IPC中斷觸發(fā)其他核啟動等多項工作。其中搬移多核鏡像的工作由DSPROMBootloader完成,而剩下兩項工作需要用戶自定義操作。本文附帶的工具鏈不具有將各核入口地址寫入對應BOOT_MAGIC_ADDRESS中的功能,因此前述鏡像文件格式中標為紅色的部分沒有被添加進去,這么做的主要原因是程序的入口地址無法確知。解決這一問題有兩種方法:1,在生成.out文件之后參看.map文件獲得各輔核程序的入口地址,并在主核的main()函數中分別將該地址寫入到各輔核對應的BOOT_MAGIC_ADDRESS中(如上圖所示);2,獲得輔核入口地址后,修改工具鏈將其以數據段的形式寫入到鏡像文件中(如前述鏡像文件)。目前二十三頁\總數三十八頁\編于二十一點3.多核Boot原理如果多核DSP是由同一套工程分別編譯,那么每個核內存分配完全相同。core0在讀取自己核的BOOT_MAGIC_ADDRESS地址(0x1087fffc)下的值后,就可以得到其他核的BOOT_MAGIC_ADDRESS地址。但是如果各核獨立編譯各自工程,各變量內存映射關系不再相同,那么就無法從core0的BOOT_MAGIC_ADDRESS地址值去推算其他核相應地址。這個時候只能事先記錄下各核的BOOT_MAGIC_ADDRESS地址值,然后寫到核0的用戶初始化代碼上。目前二十四頁\總數三十八頁\編于二十一點3.多核Boot原理在完成所有上述操作后,core0需要對每個核的IPCGRx寄存器寫中斷以喚醒其他核的正常運行狀態(tài)。IPCGRx寄存器的31-4比特位是IPC中斷源索引,可支持多達28個中斷源,可以設置為全0;比特3-1是保留位,可以任意賦值。因此只要對最低比特賦1就可以完成對其他核IPC中斷的觸發(fā)。(參看文獻[7].p.80-82)目前二十五頁\總數三十八頁\編于二十一點3.多核Boot原理到此為止基于SPI多核啟動的過程全部結束,多核DSP正常運轉起來。注意每個核的IPC中斷生成寄存器有固定的內存映射地址。目前二十六頁\總數三十八頁\編于二十一點4.多核燒寫文件生成過程目前二十七頁\總數三十八頁\編于二十一點4.多核燒寫文件生成過程在core0的main函數中要增加寫各輔核入口地址到相應的BOOT_MAGIC_ADDRESS及觸發(fā)IPC中斷的邏輯,如圖所示,否則多核不可能正常boot。void
MulticoreBoot(){
int*pBootMagicAddCore0;
int*IpcGr0;
inti;
intcoreId=0;coreId=platform_get_coreid();
if(coreId==0)
{
pBootMagicAddCore0=(int*)0x1087FFFC;/*core0的magicaddress*/
*pBootMagicAddCore0=0x10843994;/*core0的_c_int00函數入口地址*/ /*此處寫入各輔核的入口地址*,在此core1的_c_int00函數入口地址/
*(pBootMagicAddCore0+0x01000000/4)=0x1180c300;/*core0發(fā)送IPC中斷*/
IpcGr0=(int*)0x02620240;
for(i=1;i<CORE_NUM_6678;i++)//core0sentipcinterruptto
{
*(IpcGr0+i)=(*(IpcGr0+i))|0x00000001;
}
}}可在轉換工具鏈\spi_boot_suit_v2.3.1_release\2_ledtestprj\1.6678\src找到原版代碼。目前二十八頁\總數三十八頁\編于二十一點4.多核燒寫文件生成過程四核燒寫文件的生成工具鏈選擇:spi_boot_suit_v2.3.1_release1_utilities1.6678multicore_boot_4cores。把要處理的四個.out文件粘貼到該文件夾下,依次修改文件名為simple0~simple3(必須為core序號一一對應關系)。點擊該文件夾下的批處理文件:spiboot_multi_4cores.bat,生成鏡像文件spirom_le.dat,即燒寫文件。目前二十九頁\總數三十八頁\編于二十一點4.多核燒寫文件生成過程兩核燒寫文件的生成修改批處理文件spiboot_multi_4cores.bat中內容如下。刪掉多余的hex6xsimple2.rmd和hex6xsimple3.rmd以及第五行中simple2.btbl和simple3.btbl,將修改后文件保存為文件名為spiboot_multi_2cores.bat的批處理文件。點擊該批處理文件就可以生成兩核程序的.dat代碼。目前三十頁\總數三十八頁\編于二十一點4.多核燒寫文件生成過程_c_int00入口地址的獲得在編譯鏈接之后的工程下有一個文件夾:Debug。在此文件夾下有一個以工程名命名的.map文件,在此文件的開頭可以看到_c_int00的入口地址。各core啟動之前PC指令應該指向_c_int00的位置,即在執(zhí)行main函數之前應該先執(zhí)行_c_int00開始的一段初始化過程,比如全局變量賦初值、局部變量入棧等操作,之后才開始main函數。目前三十一頁\總數三十八頁\編于二十一點5.多核燒寫操作過程目前三十二頁\總數三十八頁\編于二十一點5.多核燒寫操作過程燒寫:將之前生成的燒寫文件通過SPI的燒寫工程my_spi_modify寫到NorFlash里1.運行SPI工程完成初始化部分,斷點到ddr3測試結束,這樣可以可以確認ddr3工作正常,程序工作正常。一般斷點設到Init_val=nor_init()注意:在斷點之前,設置系統工作環(huán)境并向DDR3起始地址空間寫入0~9,若程序暫停到斷點時DDR3起始地址空間為遞增數,則說明DDR3時鐘等配置正常。這一驗證非常必要,因為鏡像文件需要先鏡像存儲在DDR3中,之后由SPI寫入到外部Flash。目前三十三頁\總數三十八頁\編于二十一點5.多核燒寫操作過程燒寫:將之前生成的燒寫文件通過SPI的燒寫工程my_spi_modify寫到NorFlash里2.此時,從memorybrowser里將.dat文件load到程ddr3里,在memorybrowser的范圍右擊,選擇loadmemory。目前三十四頁\總數三十八頁\編于二十一點5.多核燒寫操作過程燒寫:將之前生成的燒寫文件通過SPI的燒寫工程my_spi_modify寫到NorFlash里3.選擇之前產生的.dat文件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025兩人合伙人合作協議合同范本
- 2025跨境電商合同模板
- 2025網絡技術合作代理合同模板
- 2025版咨詢服務合同模板
- 伐木工程合同范本
- 遵守行為規(guī)范主題班會
- 2025年關于建筑工程合同管理的法規(guī)
- 2025教育機構教師勞動合同模板
- 酒店客房制度培訓講課
- 酒店餐廳新員工培訓計劃
- 2025年中國電船制造行業(yè)市場全景監(jiān)測及投資前景展望報告
- 初三歷史教學經驗交流會發(fā)言稿
- 2025婚禮策劃服務的合同范本
- 2024年山東省濟南市中考數學試卷【含解析】
- 推動學校數字化轉型的創(chuàng)新策略與實踐路徑
- 探秘京劇臉譜(課件)六年級下冊綜合實踐活動遼師大版
- 靜脈采血操作課件
- (一模)2025年廣東省高三高考模擬測試 (一) 政治試卷(含官方答案)
- 現代物流校考題目及答案
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蝕工程施工及驗收規(guī)范
- MOOC 敦煌文學藝術-浙江師范大學 中國大學慕課答案
評論
0/150
提交評論