新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用雙MicroBlaze監(jiān)控汽車(chē)應(yīng)用

        用雙MicroBlaze監(jiān)控汽車(chē)應(yīng)用

        作者: 時(shí)間:2012-02-10 來(lái)源:網(wǎng)絡(luò) 收藏

        考慮到實(shí)時(shí)操作系統(tǒng)(RTOS)具有眾多庫(kù)函數(shù),.text和.data段對(duì)BRAM顯得過(guò)大,因此,我們將這些函數(shù)存放在外部存儲(chǔ)器中。在多處理器系統(tǒng)中,如果多個(gè)處理器需要對(duì)相同存儲(chǔ)區(qū)域?qū)ぶ?,這樣做會(huì)導(dǎo)致問(wèn)題復(fù)雜化。因此,開(kāi)發(fā)人員必須手動(dòng)調(diào)整存儲(chǔ)分段。如前文所述,兩個(gè)處理器只緩存自己專用的存儲(chǔ)區(qū),并共享對(duì)代碼段和數(shù)據(jù)段之外定義區(qū)域的訪問(wèn)。通過(guò)PLB請(qǐng)求XPS Mutex,可對(duì)該共享存儲(chǔ)區(qū)域進(jìn)行同步訪問(wèn),從而實(shí)現(xiàn)在兩個(gè)MicroBlaze之間交換數(shù)據(jù)。為了在主/從或者流水線處理器系統(tǒng)中實(shí)現(xiàn)直接通信和同步,我們采用了FSL。這樣可以避免在訪問(wèn)共享存儲(chǔ)器時(shí),因多次存儲(chǔ)器總線分配而導(dǎo)致更高的訪問(wèn)延遲。

        我們首先使用SDK鏈接腳本生成程序創(chuàng)建鏈接腳本。該腳本為文本文件,由三段組成,定義了堆和棧的大小、存儲(chǔ)區(qū)以及每個(gè)段的地址。下段代碼描述了 系統(tǒng)Microblaze_0的鏈接腳本。我們調(diào)整了代碼段和數(shù)據(jù)段存儲(chǔ)區(qū)的大小,并增加了一個(gè)用于共享存儲(chǔ)區(qū)的新段。我們也相應(yīng)調(diào)整了microblaze_1的鏈接腳本,將代碼段和數(shù)據(jù)段的起始存儲(chǔ)區(qū)地址設(shè)定為0x8A000000,并為共享存儲(chǔ)器分配了一個(gè)相等的段。


        /*定義microblaze_0的堆和棧大小*/

        _STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE :

        0x1000;

        _HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE :

        0x1000;

        /*定義系統(tǒng)中用于microblaze_0的存儲(chǔ)器*/

        MEMORY

        {

        ilmb_cntlr_dlmb_cntlr :

        ORIGIN = 0x00000050, LENGTH = 0x00003FB0

        /*重新設(shè)定用于代碼段和數(shù)據(jù)段的存儲(chǔ)器大小*/

        DDR2_SDRAM_MPMC_BASEADDR :

        ORIGIN = 0x88000000, LENGTH = 0x02000000

        /*為共享存儲(chǔ)器新增一個(gè)分段*/

        DDR2_SDRAM_SHARED_BASEADDR :

        ORIGIN = 0x8C000000, LENGTH = 0x04000000

        }

        [...]

        /*定義各段和它們?cè)诖鎯?chǔ)器中映射的位置*/

        SECTIONS

        {

        [...]

        sharedmem : {

        __sharedmem_start = .;

        *(sharedmem)

        __sharedmem_end = .;

        } > DDR2_SDRAM_SHARED_BASEADDR

        [...]

        }

        MPSOC的下載和調(diào)試選項(xiàng)

        SDK環(huán)境為下載、運(yùn)行和調(diào)試多處理器系統(tǒng)的軟件提供了兩種方法。一方面,基于Eclipse的工具能夠?yàn)檐浖こ烫峁┫螺d和ST.DIO狀態(tài)的配置;另一方面,可以使用Xilinx微處理器調(diào)試(XMD)控制臺(tái)來(lái)處理這些任務(wù)。

        另外,SDK還可以使用位流和.bmm文件重配置FPGA。根據(jù)鏈接腳本中定義的段,F(xiàn)PGA編程對(duì)話框(Program FPGA Dialog)可以隨意將整個(gè)軟件段直接傳輸?shù)脚c特定處理器相關(guān)聯(lián)的BRAM中。如上所述,由于.elf文件會(huì)因使用庫(kù)函數(shù)的應(yīng)用而增大,因此,在多處理器系統(tǒng)中,我們一般會(huì)將這些段存放在外部存儲(chǔ)器中。在這種情況下,可以選擇FPGA編程對(duì)話框軟件配置設(shè)置中的bootloop,來(lái)提供后續(xù)的軟件下載。

        SDK環(huán)境

        SDK在工程瀏覽器(Project Explorer)窗口中,提供了包括軟件工程選擇的運(yùn)行與調(diào)試(Run Debug)配置,以及在Run菜單中打開(kāi)“Run configurations…”。系統(tǒng)中每個(gè)處理器都有相關(guān)聯(lián)的“Run Debug”配置。在第一個(gè)例子中,選擇配置對(duì)話框主標(biāo)簽中的工程.elf文件。在“Device Initialization”標(biāo)簽中將“Reset Processor Only”選為復(fù)位方式,以避免在復(fù)位時(shí)將整個(gè)系統(tǒng)重置。

        另外,通過(guò)配置ST.DIO Connection標(biāo)簽,可以讓ST.DIO直接打印到SDK控制臺(tái)。將單處理器的“Run Debug”配置捆.綁在一起,它們就可以同時(shí)運(yùn)行各自的軟件。最后,SDK基于Eclipse的調(diào)試窗口可以讓開(kāi)發(fā)人員插入斷點(diǎn),并提供變量賦值和存儲(chǔ)分配方面的信息。



        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 年辖:市辖区| 沂水县| 三门峡市| 阜阳市| 蒲江县| 灌阳县| 萍乡市| 沙坪坝区| 星子县| 昌乐县| 花莲市| 徐汇区| 青州市| 远安县| 五华县| 始兴县| 信阳市| 洛阳市| 七台河市| 巴彦淖尔市| 开封市| 昌图县| 翁牛特旗| 保亭| 垫江县| 漳平市| 高雄县| 吉首市| 南昌市| 红河县| 罗源县| 噶尔县| 长沙县| 新营市| 高唐县| 岢岚县| 获嘉县| 辰溪县| 丘北县| 西青区| 元江|