0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Xilinx Vitis 2020.1里面MicroBlaze軟核的sleep函數(shù)卡死的問題

C29F_xilinx_inc ? 來源:賽靈思 ? 作者:賽靈思 ? 2022-02-16 16:21 ? 次閱讀

在Vitis里面創(chuàng)建了一個LwIP工程,調(diào)試的時候發(fā)現(xiàn),在BRAM里面運行正常,但如果改到DDR3內(nèi)存里面運行,啟動時就會卡死在sleep函數(shù)上。

于是建立了一個Hello World工程來檢查,代碼如下:

#include
#include
#include "platform.h"

int main()
{
int i = 0;

init_platform();

xil_printf("Hello World\r\n");
xil_printf("Successfully ran Hello World application\r\n");

while (1)
{
xil_printf("i=%d\r\n", i);
i++;
sleep(1);
}

cleanup_platform();
return 0;
}

用xil_prinf串口打印函數(shù),編譯后.text的大小為4944。將xil_printf全部替換為printf(替換后所有的\r可以省去),編譯后.text的大小為70964。

沒有使能Instruction and Data Cache時,需要在MicroBlaze里面勾選Enable Peripheral AXI Instruction Interface,才能將程序放入DDR3內(nèi)存中執(zhí)行:

pYYBAGGYSaKAVAs1AAD0gzlf86Y149.png

poYBAGIMpxmALRTUAAAzYFhpVkU743.png

Code Sections就是程序代碼的放置位置。

pYYBAGIMpxqAZL0BAAELhozcV0c459.png

如果使能了Cache(勾選了Use Instruction and Data Caches),就可以不用勾選Enable Peripheral AXI Instruction Interface(勾不勾選,對sleep函數(shù)沒有影響)。

poYBAGIMpxyAD9_YAAE8j9hq3YM319.png

測試后發(fā)現(xiàn):

程序運行在DDR3中,開了cache,用printf:sleep無法使用
程序運行在DDR3中,開了cache,用xil_printf:sleep可以使用
程序運行在DDR3中,不開cache,用printf:sleep無法使用
程序運行在DDR3中,不開cache,用xil_printf:sleep無法使用

但是如果仔細(xì)看的話,會發(fā)現(xiàn)有些情況下sleep并不是完全卡死,而是過了好幾分鐘才返回,串口打印出下一個i的值。這說明sleep并不是無法使用,而是執(zhí)行起來非常慢。
sleep函數(shù)內(nèi)部是用匯編語句實現(xiàn)的,可能是放到DDR3里面執(zhí)行的話,取指有一定的問題。放到BRAM里面則可以正常運行。

所以,如果程序很大,非要放到DDR3里面運行的話,那就最好不要使用sleep函數(shù)。可以自己修改sleep函數(shù)的代碼,或者干脆自己重定義另外一個延時函數(shù)。

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Xilinx
    +關(guān)注

    關(guān)注

    70

    文章

    2137

    瀏覽量

    120397
  • MicroBlaze
    +關(guān)注

    關(guān)注

    3

    文章

    66

    瀏覽量

    21492
收藏 人收藏

    評論

    相關(guān)推薦

    請問TINA-TI 9里面是否有與非門?

    TINA-TI 9里面是否有與非門?
    發(fā)表于 08-15 08:03

    STM32F407GET6的工程發(fā)CAN數(shù)據(jù)時,容易卡死在rt_device_write函數(shù)里面,為什么?

    同樣是在RTThread里面調(diào)用 rt_device_write(can_dev, 0, &msg, sizeof(msg)) 發(fā)送CAN數(shù)據(jù)時, 基于STM32F407GET6的工程就容易卡死在這個函數(shù)
    發(fā)表于 07-15 08:26

    esp32-c3使用esp_sleep_enable_ext1_wakeup()函數(shù)報錯的原因?

    在程序中添加esp_sleep_enable_ext1_wakeup(ext_wakeup_pin_1_mask, ESP_EXT1_WAKEUP_ANY_HIGH);為啥會報錯,在官網(wǎng)文檔
    發(fā)表于 06-18 07:23

    FPGA的IP使用技巧

    FPGA的IP使用技巧主要包括以下幾個方面: 理解IP的概念和特性 : IP是指用硬
    發(fā)表于 05-27 16:13

    STM32H747雙的HSEM運行FreeRtos系統(tǒng)會卡死是怎么回事?

    SemaphoreGiveFromISR就正常。 3。懷疑是FreeRtos問題,有做了實驗,使用了按鍵中斷,中斷優(yōu)先級和HSEM一樣,都是6,在中斷可以使用SemaphoreGiveFromISR或任務(wù)二值信號量,不會卡死
    發(fā)表于 03-28 06:32

    Vitis2023.2使用之—— updata to Vitis Unified IDE

    上一章聊了一下vitis2023.2怎樣使用classic Vitis IDE,這章我們來說一說基于classic Vitis IDE的工程怎么樣更新到新版本的Vitis Unifie
    發(fā)表于 03-24 17:14

    Vitis2023.2使用之—— classic Vitis IDE

    Vitis 已經(jīng)更新到2023.2了,新版本相較于舊版本更新了嵌入式平臺,新版平臺增加了Versal? AI 引擎 DSP 設(shè)計的增強功能,全新的獨立 Vitis 嵌入式軟件,最新 Vitis 統(tǒng)一
    發(fā)表于 03-24 16:15

    AMD FPGA的MicroBlaze固化過程詳解

    MicroBlaze是AMD FPGA推出的一款32/64位嵌入式處理器,其高度可配置,可滿足通信、工業(yè)、醫(yī)療、汽車、以及消費類各場景需求。
    的頭像 發(fā)表于 03-21 17:08 ?1616次閱讀
    AMD FPGA的<b class='flag-5'>MicroBlaze</b>固化過程詳解

    AD9164驅(qū)動程序里面版本是03,芯片里面讀出來的是02,這個是工程樣片嗎?

    Xilinx XC7K325TFFG900 Microblaze 處理器,裸機版本; 驅(qū)動程序版本:AD9164_API-Rel1.0.0 異?,F(xiàn)象 現(xiàn)象1: NVRA
    發(fā)表于 12-01 07:57

    在AD9787里面,哪些管腳是屬于DVDD33的電源域,哪些是屬于DVDD18的電源域?

    在AD9787里面,數(shù)字電壓有兩個一個是DVDD33,一個是DVDD18,想問的是,哪些管腳是屬于DVDD33的電源域,哪些是屬于DVDD18的電源域?
    發(fā)表于 12-01 06:33

    ESP8266里面燒了自己寫的單片機程序,AT固件是不是就被覆蓋了?

    ESP8266里面燒了自己寫的單片機程序,AT固件是不是就被覆蓋了?
    發(fā)表于 10-17 06:59

    【KV260視覺入門套件試用體驗】Vitis AI 構(gòu)建開發(fā)環(huán)境,并使用inspector檢查模型

    clone --recurse-submodules https://github.com/Xilinx/Vitis-AI cd Vitis-AI docker pull xilinx
    發(fā)表于 10-14 15:34

    【KV260視覺入門套件試用體驗】Vitis-AI加速的YOLOX視頻目標(biāo)檢測示例體驗和原理解析

    壇! (elecfans.com) 首先需要部署DPU鏡像,DPU鏡像系統(tǒng)啟動過程中會加載DPU IP到FPGA側(cè),并且系統(tǒng)本身已經(jīng)集成了Vitis AI所需的各種庫文件。 2.1 準(zhǔn)備測試所需視頻文件 賽靈思官方文檔里面提供
    發(fā)表于 10-06 23:32

    【KV260視覺入門套件試用體驗】基于Vitis AI的ADAS目標(biāo)識別

    一、基礎(chǔ)知識 (一)Vitis? AI開發(fā)環(huán)境 Vitis? AI開發(fā)環(huán)境可在賽靈思硬件平臺上加速 AI 推斷,包括邊緣器件和 Alveo? 加速器卡。此環(huán)境由經(jīng)過最優(yōu)化的 IP 、工具、庫、模型
    發(fā)表于 09-27 23:21

    【KV260視覺入門套件試用體驗】五、VITis AI (人臉檢測和人體檢測)

    ~ $ git clone https://github.com/Xilinx/Vitis-AI Git下載不成功,可能就是網(wǎng)絡(luò)不太好,在等等在嘗試。 1.2、安裝交叉編譯系統(tǒng)環(huán)境。 $ cd
    發(fā)表于 09-26 16:22