关于Xilinx Vitis 2020.1里面MicroBlaze软核的sleep函数卡死的问题
发布日期:2021-06-29 10:17:25 浏览次数:2 分类:技术文章

本文共 1150 字,大约阅读时间需要 3 分钟。

在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内存中执行:

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

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

 

测试后发现:

程序运行在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函数的代码,或者干脆自己重定义另外一个延时函数。

转载地址:https://blog.csdn.net/ZLK1214/article/details/111999558 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Xilinx Vitis 2020.1里面运行C程序时提示找不到microblaze_0
下一篇:Xilinx Vivado 2020.1里面AXI Interrupt Controller无法选择中断的个数

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月06日 19时04分24秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Atiitt 可视化 报表 图表之道 attilax著 Atitit.可视化与报表原理与概论 1. 信息可视化 1 2. Gui可视化 2 2.1. atitit 知识的可视化.docx 2 2019-04-29
paip.c#图片裁剪 2019-04-29
paip.html 及css调试工具---debugbar 2019-04-29
paip.项目开发效率提升之思索 2019-04-29
paip.项目开发效率提升之思索 2019-04-29
Atitit spring5 集成 mybatis 注解班 2019-04-29
Atitit springboot mybatis spring 集成 Springboot1.4 mybatis3.4.6 /springbootMybatis 目录 1.1. 设置map 2019-04-29
Atitit 模板引擎总结 目录 1. 模板引擎 1 2. 常见模板步骤 1 2.1. 1)定义模板字符串 1 2.2. 2)预编译模板 2 2.3. 渲染模板 2 3. 流程渲染 if el 2019-04-29
Atitit 字符串转换数组main参数解析 args splitByWholeSeparator String string=" -host 101.1 8*124 -db 1 2019-04-29
paip.提升效率----几款任务栏软件vc59 2019-04-29
paip.验证码识别---序列号的反转 2019-04-29
paip.php调试脱离IDE VC59 2019-04-29
paip.DEVSUIT WEB .NET ASPX网站打开慢的原因 2019-04-29
央行数字货币将取代纸币?这篇文章说明白了 2019-04-29
2020消费金融大变局:科技向下扎根 持牌向上生长 2019-04-29
高质量壁纸网站,满足壁纸控的所有想象! 2019-04-29
游戏英雄联盟高清壁纸,人物角色都包括 2019-04-29
吃货注意接收,精美美食图片壁纸来喽 2019-04-29
眼前一亮的UI设计案例|插画世界里的网页首图 2019-04-29
UI设计灵感|高级黑网页首图就该这样设计 2019-04-29