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
    +关注

    关注

    73

    文章

    2192

    浏览量

    129881
  • MicroBlaze
    +关注

    关注

    3

    文章

    68

    浏览量

    22221
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    同系列性能更强!面向高性能 AI 应用,AXU2CGB-I 有何亮点?

    Cortex-A53 + 双 Cortex-R5 处理器与强大的 FPGA 可编程逻辑资源,为高端应用提供坚实算力基础。   板卡支持  Xilinx Vitis-AI DPU ,适配 V
    的头像 发表于 11-12 16:56 1175次阅读
    同系列性能更强!面向高性能 AI 应用,AXU2CGB-I 有何亮点?

    e203 如何和FPGA通信?

    求教e203 如何和FPGA通信
    发表于 11-07 06:15

    AMD Vitis AI 5.1测试版发布

    AMD Vitis AI 5.1全新发布——新增了对 AMD Versal AI Edge 系列神经网络处理单元 (NPU) 的支持。Vitis AI 包含优化的 NPU IP、模型编译工具和部署 API,可在嵌入式平台上实现可扩展的高性能推理。
    的头像 发表于 10-31 12:46 481次阅读

    E203提高CPU时钟频率方法

    本文将分享我们团队提高E203主频的办法。 查阅芯来科技官方出版的《手把手教你设计CPU——RISC-V处理器篇》教材,我们发现,原本设计的E203主时钟域应该是100MHZ
    发表于 10-29 06:19

    在移植的时候发现卡死,为什么?

    请教大佬,我是按照网上的教程来移植的,板子是野火的霸天虎,但是到最后验证的时候出问题了,发现board.c文件中的代码可以运行,但就是运行不到主函数,而是卡死在以下两个函数中 以下是我的主
    发表于 09-29 06:28

    线程中调用rt_thread_mdelay()函数卡死的原因?怎么解决?

    在线程中调用rt_thread_mdelay()函数程序卡死。搞了两天也不知道问题出在哪,怎么解决。 int main(void) { interrupt_config
    发表于 09-11 08:11

    MicroBlaze处理器嵌入式设计用户指南

    *本指南内容涵盖了在嵌入式设计中使用 MicroBlaze 处理器、含存储器 IP 的设计、IP integrator 中的复位和时钟拓扑结构。获取完整版《 MicroBlaze 处理器嵌入式设计用户指南》,请至文末扫描二维码
    的头像 发表于 07-28 10:43 780次阅读

    使用AMD Vitis Unified IDE创建HLS组件

    这篇文章在开发者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 传统 IDE) 的基础上撰写,但使用的是 AMD Vitis Unified IDE,而不是之前传统版本的
    的头像 发表于 06-20 10:06 1908次阅读
    使用AMD <b class='flag-5'>Vitis</b> Unified IDE创建HLS组件

    STM32G473进行双bank升级的时候,进行FLASH的批量擦除回卡死是怎么回事?

    ,也有更新4次、6次卡死的。我尝试在进行擦除之前关中断 __disable_irq();发现测试连续30次升级都没卡死,但没有找到根本原因。注:调用擦除bank的函数执行在CAN接收中断
    发表于 06-18 08:04

    STM32G473 flash擦除时程序卡死,为什么?

    ,也有更新4次、6次卡死的。我尝试在进行擦除之前关中断 __disable_irq();发现测试连续30次升级都没卡死,但没有找到根本原因。注:调用擦除bank的函数执行在CAN接收中断
    发表于 06-12 08:05

    STM32G473 flash擦除时程序卡死的原因?

    ,也有更新4次、6次卡死的。我尝试在进行擦除之前关中断 __disable_irq();发现测试连续30次升级都没卡死,但没有找到根本原因。注:调用擦除bank的函数执行在CAN接收中断
    发表于 06-09 07:23

    在Ubuntu16.04上从版本2020.1 OpenVINO™升级到2021.4.2之后不兼容怎么解决?

    OpenVINO™ 2020.1 成功构建自定义库。 升级至 OpenVINO™ 2021.4.2,并重新构建自定义库。 加载自定义库时收到错误: /src/.build.linux
    发表于 03-05 10:00

    使用DLP3010LC GUI里面的Light Control的Internal Patterns功能投影条纹图片,遇到的几个疑问求解

    savd pattern data,生成一个bin文件,然后把此固件通过update firmware烧录到dlp3010里面,但是烧完之后系统起不来了,请问这个操作有问题吗? 3:系统升级固件有.bin和.image两种选择,请问这两种有什么区别呢? 期待您的回复,感谢
    发表于 02-27 08:07

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

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

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

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