0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx Vitis 2020.1里面MicroBlaze软核的sleep函数卡死的问题

C29F_xilinx_inc 来源:赛灵思 作者:赛灵思 2022-02-16 16:21 次阅读

在Vitis里面创建了一个LwIP工程,调试的时候发现,在BRAM里面运行正常,但如果改到DDR3内存里面运行,启动时就会卡死在sleep函数上。

于是建立了一个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串口打印函数,编译后.text的大小为4944。将xil_printf全部替换为printf(替换后所有的\r可以省去),编译后.text的大小为70964。

没有使能Instruction and Data Cache时,需要在MicroBlaze里面勾选Enable Peripheral AXI Instruction Interface,才能将程序放入DDR3内存中执行:

pYYBAGGYSaKAVAs1AAD0gzlf86Y149.png

poYBAGIMpxmALRTUAAAzYFhpVkU743.png

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

pYYBAGIMpxqAZL0BAAELhozcV0c459.png

如果使能了Cache(勾选了Use Instruction and Data Caches),就可以不用勾选Enable Peripheral AXI Instruction Interface(勾不勾选,对sleep函数没有影响)。

poYBAGIMpxyAD9_YAAE8j9hq3YM319.png

测试后发现:

程序运行在DDR3中,开了cache,用printf:sleep无法使用
程序运行在DDR3中,开了cache,用xil_printf:sleep可以使用
程序运行在DDR3中,不开cache,用printf:sleep无法使用
程序运行在DDR3中,不开cache,用xil_printf:sleep无法使用

但是如果仔细看的话,会发现有些情况下sleep并不是完全卡死,而是过了好几分钟才返回,串口打印出下一个i的值。这说明sleep并不是无法使用,而是执行起来非常慢。
sleep函数内部是用汇编语句实现的,可能是放到DDR3里面执行的话,取指有一定的问题。放到BRAM里面则可以正常运行。

所以,如果程序很大,非要放到DDR3里面运行的话,那就最好不要使用sleep函数。可以自己修改sleep函数的代码,或者干脆自己重定义另外一个延时函数。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Xilinx
    +关注

    关注

    71

    文章

    2172

    浏览量

    122386
  • MicroBlaze
    +关注

    关注

    3

    文章

    68

    浏览量

    21617
收藏 人收藏

    相关推荐

    LDC1000里面配套的PCB线圈的电感值是多少?

    LDC1000里面配套的PCB线圈的电感值是多少?还有用电感公式算出来的电感能用来做什么?我之前以为能算出靠近PCB线圈的电感的电感值
    发表于 01-17 08:07

    使用AMD Vitis进行嵌入式设计开发用户指南

    Zynq MPSoC 和 AMD Alveo 数据中心加速器卡)为目标的异构嵌入式应用。 Vitis 工具包括: C++ 编译器、库和本征函数,适用于 AI 引擎和可编程逻辑( PL ) 适用于 Arm
    的头像 发表于 01-08 09:33 765次阅读
    使用AMD <b class='flag-5'>Vitis</b>进行嵌入式设计开发用户指南

    如何申请xilinx IP的license

    在使用FPGA的时候,有些IP是需要申请后才能使用的,本文介绍如何申请xilinx IP的license。
    的头像 发表于 10-25 16:48 570次阅读
    如何申请<b class='flag-5'>xilinx</b> IP<b class='flag-5'>核</b>的license

    MicroBlaze V处理器的功能特性

    本指南提供了有关 AMD Vivado Design Suite 中包含的 32 位和 64 位 MicroBlaze V 处理器的信息。该文档旨在用作为处理器硬件架构的指南,随附《RISC-V 指令集手册》第一卷和第二卷。
    的头像 发表于 10-16 09:17 609次阅读
    <b class='flag-5'>MicroBlaze</b> V<b class='flag-5'>软</b><b class='flag-5'>核</b>处理器的功能特性

    pcm5121里面EQ如何设定做1.1通道输出?

    pcm5121里面EQ如何设定做1.1通道输出
    发表于 09-30 08:27

    [XILINX] 正点原子ZYNQ7035/7045/7100开发板发布、ZYNQ 7000系列、双ARM、PCIe2.0、SFPX2!

    正点原子FPGA新品ZYNQ7035/7045/7100开发板,ZYNQ 7000系列、双ARM、PCIe2.0、SFPX2! 正点原子Z100 ZYNQ开发板,搭载Xilinx Zynq7000
    发表于 09-02 17:18

    请问TINA-TI 9里面是否有与非门?

    TINA-TI 9里面是否有与非门?
    发表于 08-15 08:03

    STM32F407GET6的工程发CAN数据时,容易卡死在rt_device_write函数里面,为什么?

    同样是在RTThread里面调用 rt_device_write(can_dev, 0, &msg, sizeof(msg)) 发送CAN数据时, 基于STM32F407GET6的工程就容易卡死在这个函数
    发表于 07-15 08:26

    esp32-c3使用esp_sleep_enable_ext1_wakeup()函数报错的原因?

    在程序中添加esp_sleep_enable_ext1_wakeup(ext_wakeup_pin_1_mask, ESP_EXT1_WAKEUP_ANY_HIGH);为啥会报错,在官网文档
    发表于 06-18 07:23

    FPGA的IP使用技巧

    FPGA的IP使用技巧主要包括以下几个方面: 理解IP的概念和特性 : IP是指用硬
    发表于 05-27 16:13

    stm32f405 ucoslll跳转后可以进入主程序,但为什么会卡死在OSTaskCreate函数

    stm32f405 ucoslll跳转后可以进入主程序,但是卡死在OSTaskCreate函数,任务无法运行。 void JumpToApp(void) { uint32_t i=0
    发表于 04-01 07:37

    STM32H747双的HSEM运行FreeRtos系统会卡死是怎么回事?

    SemaphoreGiveFromISR就正常。 3。怀疑是FreeRtos问题,有做了实验,使用了按键中断,中断优先级和HSEM一样,都是6,在中断可以使用SemaphoreGiveFromISR或任务二值信号量,不会卡死
    发表于 03-28 06:32

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

    上一章聊了一下vitis2023.2怎样使用classic Vitis IDE,这章我们来说一说基于classic Vitis IDE的工程怎么样更新到新版本的Vitis Unifie
    发表于 03-24 17:14

    Vitis2023.2使用之—— classic Vitis IDE

    Vitis 已经更新到2023.2了,新版本相较于旧版本更新了嵌入式平台,新版平台增加了Versal™ AI 引擎 DSP 设计的增强功能,全新的独立 Vitis 嵌入式软件,最新 Vitis 统一
    发表于 03-24 16:15

    AMD FPGA的MicroBlaze固化过程详解

    MicroBlaze是AMD FPGA推出的一款32/64位嵌入式处理器,其高度可配置,可满足通信、工业、医疗、汽车、以及消费类各场景需求。
    的头像 发表于 03-21 17:08 2491次阅读
    AMD FPGA的<b class='flag-5'>MicroBlaze</b>固化过程详解