广告

原创 小梅哥FPGA学习笔记之带有JTAG UART 的NIOS II处理器系统异常死机问题解析

2017-1-9 12:27 440 1 1

今天,有网友在群里提问“我这个简单的闪灯程序(无其它任何多余的逻辑或*.c),运行久了,居然会死机!运行环境:EPCQ+片上RAM+NIOS II的方式。时钟:37.125MHz,通过JTAG电缆Debug NIOS,则不会。这是怎么回事呀 ?”


相信这样一个问题,很多人都遇到过,我之前在做NIOS II应用开发时,也遇到过这个问题,当时怀疑是NIOS II不稳定导致的,因为各大网络论坛和QQ群,吐槽NIOS II处理器鸡肋的实在是太多了。这里,小梅哥不去评判NIOS II处理器究运算竟性能几何,稳定性如何,因为各人有各人的观念和实际大环境,有的公司打死不愿用NIOS II,而有的公司做产品却离不开NIOS II。对于一个Altera推广了十多年的软核处理器,我不相信经过十多年的发展,还存在这么弱智的BUG。


该网友的问题,实际是可以合理解释并且解决的。


因为jtag uart实际是由jtag模拟的,本质上是个fifo,当你在NIOS II中使用printf(alt_putchar、alt_printf、alt_putchar)函数时,实际是将需要发送的数据写入了这个fifo中,这个fifo中的数据由PC机上的NIOS II EDS软件中附带的程序通过JTAG协议去读取并显示在NIOS II Console中。


那么,假如因为某些原因pc上的console断开(用户手动关闭Console通信,或者JTAG线缆被拔掉),则不会再有程序去持续读取这个fifo中的值,因此,一旦NIOS II中仍旧有发送请求,则会继续去写这个FIFO,因为没有PC机去及时读取这个FIFO中的值,所以当FIFO被写满之后,则NIOS II的JTAG UART驱动会判断得到当前发送FIFO已满,不能再写入数据,因此程序会一直停在这个地方等待,直到FIFO中的数据被读走一部分,以有足够的空间写入需要发送的数据。


所以,因为console已经断开了,所以永远不会再去读取FIFO中的值了,因此这个FIFO在被写满之后也将永远处于满状态,不能再写入新的数据,所以NIOS II CPU的程序也会一直卡在发送函数这里,不会继续执行,就发生了程序死机的现象。


另外,大家可能遇到过,带JTAG UART的并经常有数据通过JTAG UART传输的系统,在运行过程中,我们去进行一下其他的操作,然后Eclipse for NIOS II就停止响应了,程序会强制退出,其实也是受这个JTAG UART的影响。我就经常因为不小心就这样把eclipse搞死了,所以我现在比较保守了,一半不使用JTAG UART进行调试,而是直接用RS232 UART来进行调试。


小梅哥


2016年1月29日


芯航线电子工作室


广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
小梅哥 2019-07-02 08:57
小梅哥FPGA时序分析笔记(五)I/O约束显神威——深入龙潭
大家一定对我上一节的突然结尾表示一脸茫然:我是来学习时序约束的,然后你告诉我时序约束里面IO约束很重要,然我又跟着你的文章继续往下看,本以为你就要讲如何进行IO约束了,结果呢,你一个取反时钟就把我们打...
小梅哥 2019-06-30 11:07
小梅哥FPGA时序分析笔记(四)I/O时序定成败——化险为夷
小梅哥FPGA时序分析从遥望到领悟系列没有遇见过I/O时序问题,没有通过I/O约束方式实际解决过I/O时序问题,就很难明白I/O约束的重要性,也很难相信各种EDA软件真的有那么的傻白甜。 我遇到...
小梅哥 2019-06-22 10:32
小梅哥FPGA时序分析笔记(三)时钟约束真重要——事实说话
小梅哥FPGA时序分析从遥望到领悟系列以前,那是在以前,经常有网友(原谅我行文动不动就是网友说,网友问,毕竟我是卖开发板的,正面接触学FPGA的网友相对多一些,所以这些也都是事实存在的事情)问我:小梅...
小梅哥 2019-06-21 10:33
小梅哥FPGA时序分析笔记(二)时钟质量是生命——初遇时序
小梅哥FPGA时序分析从遥望到领悟系列第一次遇到时序问题并通过相应的手段解决问题,算是2年前做百兆以太网图像传输的时候了吧。当时遇到的问题为:同一个工程,每次编译结果的效果都不一样,有的时候编译了,下...
小梅哥 2019-06-20 11:46
小梅哥FPGA时序分析笔记(一)学了4年才学会——废话连篇
小梅哥FPGA时序分析从遥望到领悟系列 这么取名字,大概率会被人家笑话吧,一个呆头呆脑哈里哈气的憨厚形象跃然纸上。不过呢,仗着自己脸皮不薄,又被人称为IT直男,也就这么写了。 自己...
小梅哥 2018-05-27 22:03
【博客大赛】【小梅哥FPGA】闹心的gcc-linaro-arm-linux-gnueabihf编译器——Floating ...
  今天在继续编写示波器(just for fun)工程,该工程的波形显示和处理界面是在Linux系统上编写程序实现的。应用程序的编写是使用的17.1版本的Quartus软件配套的DS-5软...
我要评论
0
1
广告