999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

雙核處理器AMP模式在電力設(shè)備控制中的應(yīng)用

2018-06-15 07:56:02,,,,
關(guān)鍵詞:程序設(shè)備系統(tǒng)

,,,,

(南京南瑞繼保電氣有限公司,南京 211102)

引 言

電力系統(tǒng)控制保護(hù)設(shè)備是一種專用嵌入式系統(tǒng),一般由嵌入式處理器完成保護(hù)、測(cè)控、人機(jī)通信功能。這類裝置需要實(shí)現(xiàn)兩類功能:其一是通信和人機(jī)接口,通常包括以太網(wǎng)TCP/IP通信、UART通信、通信協(xié)議處理、LCD顯示控制、磁盤存儲(chǔ)等功能;其二是實(shí)時(shí)性計(jì)算控制,主要用于電氣量的實(shí)時(shí)采樣和分析計(jì)算,對(duì)系統(tǒng)的實(shí)時(shí)響應(yīng)性能有較高要求。傳統(tǒng)的電力系統(tǒng)控制保護(hù)設(shè)備通常使用嵌入式CPU(例如ARM、PowerPC)運(yùn)行嵌入式操作系統(tǒng)(例如VxWorks、Linux)實(shí)現(xiàn)第一類功能,使用DSP裸機(jī)系統(tǒng)(Bare Metal)實(shí)現(xiàn)第二類功能。隨著半導(dǎo)體技術(shù)持續(xù)發(fā)展,多核處理器芯片已成為市場(chǎng)上的主流,出現(xiàn)了類似Zynq-7000系列集成雙核ARM和FPGA的高度集成SoC器件。本文在同一片ARM雙核處理器SoC芯片Zynq-7000上實(shí)現(xiàn)了非對(duì)稱多處理模式(AMP),其中一個(gè)CPU核心上運(yùn)行Linux操作系統(tǒng),與此同時(shí)另外一個(gè)CPU核心上運(yùn)行裸機(jī)系統(tǒng)。

1 系統(tǒng)軟硬件整體設(shè)計(jì)

1.1 Zynq-7000 SoC芯片簡(jiǎn)介

Zynq-7000是Xilinx公司的SoC芯片,片上集成了ARM Cortex-A9雙CPU核心處理系統(tǒng)和FPGA。除此之外,Zynq-7000還集成了片內(nèi)RAM(OCM)、DDR接口,以及GPIO、UART、以太網(wǎng)控制器、USB、SPI、I2C、SD卡控制器等多種外設(shè)接口[1]。

1.2 硬件整體設(shè)計(jì)

基于SoC的系統(tǒng)硬件設(shè)計(jì)簡(jiǎn)潔,實(shí)現(xiàn)框圖如圖1所示。Zynq-7000 SoC外接DDR存儲(chǔ)器(作為主存)和SPI Flash存儲(chǔ)器(作為程序和數(shù)據(jù)的外部存儲(chǔ))構(gòu)成最小系統(tǒng)。另有片上的以太網(wǎng)控制器和UART外接相應(yīng)電路作為通信、調(diào)試之用。

圖1 硬件設(shè)計(jì)框圖

1.3 軟件整體設(shè)計(jì)

在本方案中,Zynq-7000 SoC集成了兩個(gè)CPU核心:CPU0和CPU1,工作在AMP模式。其中CPU0上運(yùn)行Linux操作系統(tǒng),CPU1上運(yùn)行裸機(jī)系統(tǒng),經(jīng)過(guò)合理的資源分配,兩者并行運(yùn)行互不干擾。

本方案的啟動(dòng)流程是:CPU0按照正常的Linux啟動(dòng)流程啟動(dòng),此時(shí)CPU1處于禁用狀態(tài)。CPU0啟動(dòng)完成后,在Linux環(huán)境下可加載CPU1程序并啟動(dòng)CPU1。在系統(tǒng)運(yùn)行過(guò)程中CPU0可隨時(shí)復(fù)位CPU1、重新加載CPU1程序并重新啟動(dòng)CPU1。

本方案通過(guò)配置ARM中斷控制器(GIC)的方法實(shí)現(xiàn)了不同中斷在兩個(gè)CPU核心之間的分配,少數(shù)電力二次應(yīng)用相關(guān)的專用中斷由CPU1響應(yīng),其它外設(shè)(例如以太網(wǎng)控制器、UART、SPI等)的中斷由CPU0響應(yīng)。

2 CPU1加載啟動(dòng)方案

Xilinx提供了一種在Linux環(huán)境下通過(guò)remoteproc驅(qū)動(dòng)程序加載CPU1裸機(jī)程序并啟動(dòng)CPU1的方法[2]。remoteproc本身較為復(fù)雜,存在諸多不穩(wěn)定因素[3]。此外remoteproc要求裸機(jī)程序以固件的形式編譯進(jìn)內(nèi)核模塊,這使得裸機(jī)程序與Linux源代碼緊密耦合。不同功能的電力系統(tǒng)控制保護(hù)設(shè)備需要多樣化的CPU1裸機(jī)程序,remoteproc的這一限制不利于裸機(jī)程序的開發(fā)和維護(hù)。

針對(duì)電力系統(tǒng)控制保護(hù)設(shè)備的實(shí)際需求,本文設(shè)計(jì)了一種簡(jiǎn)潔的方案,能夠在Linux用戶態(tài)下動(dòng)態(tài)加載啟動(dòng)CPU1的裸機(jī)程序。具體步驟如下:①操作寄存器復(fù)位CPU1;②加載CPU1裸機(jī)程序;③操作寄存器重新啟動(dòng)CPU1。

上述步驟可重復(fù)進(jìn)行,每次可按需為CPU1加載不同的裸機(jī)程序。

開發(fā)Linux內(nèi)核模塊,提供字符設(shè)備/dev/dsp。Linux用戶空間程序通過(guò)調(diào)用字符設(shè)備/dev/dsp的系統(tǒng)調(diào)用函數(shù)進(jìn)行上述各步驟操作。

2.1 操作寄存器復(fù)位CPU1

寄存器A9_CPU_RST_CTRL用于復(fù)位和啟動(dòng)CPU核心[1],如表1所列。

表1 A9_CPU_RST_CTRL寄存器

向A9_CPU_RST_CTRL寫入值0x22使CPU1進(jìn)入復(fù)位狀態(tài)。將此操作封裝進(jìn)字符設(shè)備/dev/dsp的ioctl系統(tǒng)調(diào)用,用戶態(tài)程序通過(guò)調(diào)用ioctl命令字0x6501控制CPU1復(fù)位。

2.2 向DDR加載CPU1裸機(jī)程序

系統(tǒng)預(yù)留出部分DDR空間給CPU1使用,Linux不會(huì)占用此處空間。本方案使用的硬件平臺(tái)共有512 MB DDR空間,分配情況如表2所列。

表2 內(nèi)存分配

為使Linux避開CPU1專用內(nèi)存區(qū)域,Linux啟動(dòng)時(shí)傳入?yún)?shù)“mem=64M@0x00000000 mem=352M@0x0A000000”。

CPU1專用內(nèi)存區(qū)域位于內(nèi)存空間中部而不是末尾,目的是將來(lái)可能會(huì)開發(fā)不同DDR容量的硬件平臺(tái),使用這種分配機(jī)制可令CPU1占用的內(nèi)存地址保持不變,進(jìn)而保證CPU1裸機(jī)程序兼容不同DDR容量的硬件平臺(tái)。

Linux用戶空間程序可調(diào)用字符設(shè)備/dev/dsp的mmap系統(tǒng)調(diào)用,將CPU1專用內(nèi)存區(qū)域映射到本地用戶空間。因CPU1復(fù)位重新啟動(dòng)后緩存未使能,為保證程序的正確性,此映射為no cache方式。

CPU1裸機(jī)程序鏡像以ELF文件形式存放在Flash存儲(chǔ)器上。ELF文件是GNU工具鏈的默認(rèn)輸出格式,便于生成和管理,其內(nèi)部格式如圖2所示[4]。

圖2 ELF格式

Linux用戶空間程序按照?qǐng)D2右視圖解析ELF文件,根據(jù)Program header table遍歷每一個(gè)segment,將segment的內(nèi)容加載到已通過(guò)mmap映射到本地用戶空間的CPU1專用內(nèi)存區(qū)域。

圖3 ICD IPTR寄存器

Flash存儲(chǔ)器上可存放多個(gè)ELF文件,用戶空間程序每次可按需加載不同的ELF文件。

2.3 操作寄存器重新啟動(dòng)CPU1

CPU1復(fù)位重新啟動(dòng)后,程序指針(PC)值為0x0000 0000,即從內(nèi)存地址0x0000 0000開始執(zhí)行指令。提前向內(nèi)存地址0x0000 0000處寫入如下小段程序:

0xE59F0000,

/*ldr r0,[pc];+8 bytes*/

0xE12FFF10, /*bx r0 */

0x04000000

此段程序的功能是令CPU1跳轉(zhuǎn)到裸機(jī)程序加載的入口地址處執(zhí)行。查看Zynq-7000 Linux內(nèi)核鏈接腳本可知,0x0000 0000地址開始的4 KB內(nèi)存不會(huì)被Linux訪問(wèn),所以此操作不會(huì)影響CPU0的Linux運(yùn)行。與參考文獻(xiàn)[3]提供的方法相比,本方案更加簡(jiǎn)潔,且不會(huì)占用OCM空間。

向A9_CPU_RST_CTRL寫入值0x00使CPU1脫離復(fù)位狀態(tài)開始啟動(dòng)。將此操作封裝進(jìn)字符設(shè)備/dev/dsp的ioctl系統(tǒng)調(diào)用,用戶態(tài)程序通過(guò)ioctl命令字0x6502調(diào)用控制CPU1啟動(dòng)運(yùn)行。

2.4 L2緩存一致性操作

按照第2.1~2.3節(jié)的步驟重復(fù)加載啟動(dòng)CPU1,多次實(shí)驗(yàn)后發(fā)現(xiàn)CPU1出現(xiàn)偶發(fā)性的程序崩潰問(wèn)題。

進(jìn)一步調(diào)試發(fā)現(xiàn),CPU1程序變量有時(shí)會(huì)意外改變。排除其它因素的影響后,猜測(cè)此現(xiàn)象與L2緩存有關(guān)。在Zynq-7000的雙核ARM系統(tǒng)中,兩個(gè)CPU核心擁有各自的L1緩存,所以CPU1復(fù)位時(shí)CPU1的L1緩存隨之復(fù)位。L2緩存被兩個(gè)CPU核心共享,CPU1復(fù)位時(shí)L2緩存不會(huì)復(fù)位。CPU1復(fù)位前某些變量可能已映射到L2緩存,重新啟動(dòng)后若上述位置的L2緩存發(fā)生write back,CPU1程序的變量值就會(huì)意外改變,這有可能造成程序崩潰。

為證實(shí)上述猜想,在第2.1節(jié)的復(fù)位CPU1操作后調(diào)用ARM Linux內(nèi)核提供的outer_flush_range函數(shù)flush L2緩存,解除L2緩存與主存的映射關(guān)系。增加該措施后,再重復(fù)加載啟動(dòng)CPU1,沒(méi)有再出現(xiàn)CPU1程序崩潰問(wèn)題。

3 中斷分配

ARM處理器通過(guò)GIC模塊進(jìn)行中斷配置和中斷響應(yīng)。GIC的ICD IPTR寄存器可配置特定中斷由CPU0或CPU1響應(yīng)[2],如圖3所示。

Linux啟動(dòng)時(shí)傳入?yún)?shù)“maxcpus=1”,此參數(shù)限制Linux在CPU0上運(yùn)行,Linux下使能的外設(shè)中斷全部分配到CPU0。CPU1啟動(dòng)后,配置ICD IPTR將CPU1專用的中斷分配給CPU1。

4 實(shí)驗(yàn)及分析

4.1 實(shí)驗(yàn)方法

模擬電力系統(tǒng)控制保護(hù)設(shè)備的典型工作模式,為Zynq-7000片上集成的FPGA編寫程序,產(chǎn)生周期為250 μs和1000 μs的兩個(gè)周期中斷,分別記為中斷A和中斷B。

在CPU1裸機(jī)程序中響應(yīng)中斷A和中斷B。在中斷A服務(wù)程序中翻轉(zhuǎn)一個(gè)GPIO(記為GPIO X);在中斷B服務(wù)程序中翻轉(zhuǎn)另外一個(gè)GPIO(記為GPIO Y)。

使用本方案提供的方法加載運(yùn)行CPU1的裸機(jī)程序,使用示波器觀察GPIO X和GPIO Y的電平波形。

4.2 實(shí)驗(yàn)結(jié)果分析

示波器觀測(cè)到的波形如圖4所示。

圖4 實(shí)驗(yàn)結(jié)果

示波器捕獲到周期為250 μs和1000 μs的穩(wěn)定波形,說(shuō)明CPU1裸機(jī)程序加載成功且正確響應(yīng)中斷。多次重復(fù)加載CPU1程序,圖4波形能夠穩(wěn)定復(fù)現(xiàn)。

結(jié) 語(yǔ)

[1] Xilinx Inc.Zynq-7000 All Programmable SoC Technical Reference Manual [EB/OL].[2018-03].https://www.xilinx.com/support/documentation/user_g'uides/ug585-Zynq-7000-TRM.pdf.

[2] Xilinx Inc.Zynq AMP Linux FreeRTOS Guide [EB/OL]. [2018-03].https://www.xilinx.com/support/documentation/sw_manuals/petalinux2014_2/ug978-petalinux-Zynq-amp.pdf.

[3] 李鑫志,戈志華,劉向明.基于ARM平臺(tái)AMP架構(gòu)下從核重復(fù)加載設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2017(1):218-221.

[4] TISCommittee.Portabie Formats Specification,Version 1.1. Executabie and Linkabie Format(ELF) [Z].1995.

猜你喜歡
程序設(shè)備系統(tǒng)
諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
試論我國(guó)未決羈押程序的立法完善
基于MPU6050簡(jiǎn)單控制設(shè)備
電子制作(2018年11期)2018-08-04 03:26:08
“程序猿”的生活什么樣
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
500kV輸變電設(shè)備運(yùn)行維護(hù)探討
主站蜘蛛池模板: 综合天天色| 国产91丝袜在线观看| 日韩无码白| 国产浮力第一页永久地址| 视频国产精品丝袜第一页| 亚洲男人天堂网址| 欧美精品啪啪| 成年A级毛片| 亚洲欧美成人在线视频| 四虎影视无码永久免费观看| 在线国产91| 日韩无码黄色网站| 色综合a怡红院怡红院首页| 伊人色天堂| 啪啪永久免费av| 91网在线| 伦伦影院精品一区| 精品一区二区三区四区五区| 亚洲天堂精品在线| 久久这里只精品国产99热8| 国产成人精品免费av| 亚洲第一视频网| 欧美一级在线| 国产午夜人做人免费视频中文| 9999在线视频| 亚洲国产综合精品一区| 亚洲成AV人手机在线观看网站| 国产黄色爱视频| 91外围女在线观看| 亚洲自拍另类| 国产小视频免费| 天堂成人在线| 亚洲第一网站男人都懂| 都市激情亚洲综合久久| 国产综合日韩另类一区二区| 国产特级毛片| 亚洲精品自在线拍| 九色视频线上播放| 亚洲国产清纯| 欧美综合激情| 青青操视频免费观看| 亚洲综合狠狠| 夜夜爽免费视频| 波多野结衣一区二区三区AV| 熟女成人国产精品视频| 久久永久视频| 这里只有精品免费视频| 精品亚洲麻豆1区2区3区| 欧美福利在线播放| 看av免费毛片手机播放| 国产高清国内精品福利| 国产97视频在线观看| 国产一级无码不卡视频| 亚洲av片在线免费观看| 国产福利小视频高清在线观看| 国产导航在线| 日本日韩欧美| 丁香婷婷综合激情| 午夜成人在线视频| 亚洲国产精品成人久久综合影院| 国产综合精品一区二区| 中文字幕 欧美日韩| 国产香蕉国产精品偷在线观看| 99视频在线免费观看| 国产精品妖精视频| 日韩高清一区 | 毛片在线看网站| 久久国产乱子| 亚洲综合九九| 色悠久久综合| 91青青在线视频| 久久精品只有这里有| 欧美在线观看不卡| 亚洲国产精品日韩欧美一区| 国产精品综合色区在线观看| 亚洲国产成人精品一二区| 日韩不卡高清视频| 都市激情亚洲综合久久| 亚洲欧美综合精品久久成人网| 欧美a级完整在线观看| 伊人网址在线| 强奷白丝美女在线观看|