美文网首页
2018-11-30

2018-11-30

作者: 阿群1986 | 来源:发表于2018-11-30 17:32 被阅读12次

[FPGA开发] 小梅哥NIOS II开发全纪录之总结NIOS II 开发注意点(一)

帖子地址:
http://bbs.eeworld.com.cn/thread-526743-1-1.html

1、 CPU运行一段时间后停止
很多用户在调试或者运行NIOS II CPU程序的时候,可能最开始的时候程序能够正确的运行,但是过一会儿后CPU却停下来了,例如本来做的一个LED流水灯,结果流水了一两分钟后却不再动了。这里是不是又是NIOS II CPU运行不稳定的一个佐证呢?实际上,引发这个问题的原因,个人总结主要有两点:

第一点,系统使用了JTAG UART作为调试串口打印数据。用户在自己的软件代码中写了有printf的代码,例如每分钟打印一次“Hello”,同时让流水灯闪烁。但是用户可能在开发板运行的过程中,突然拔掉或者断开了USB Blaster下载器,或者关闭了nios ii软件开发工具。这就导致JTAG UART与PC间的链接断开了。由于JTAG UART是基于JTAG协议的一个模拟串口,实际上我们使用的jtag uart发送数据的时候,是先将数据写在jtag uart的fifo中,然后pc端的nios ii开发软件定时通过jtag协议读取fifo中的数据,以此模拟jtag uart的发送的。如果我们切断了nios ii开发软件与jtag uart之间的连接,或者关闭了nios ii eds软件,使之不再去读取fifo中的数据,那么jtag uart的fifo中的数据就会越积越多。当fifo满之后,数据就再也写不进去了。而jtag uart的软件驱动中,使用的是阻塞的方式发送数据的,即只有当所有的数据都写入fifo之后,程序才会执行下一步。可是,现在fifo中的数据一直是满的,没有被读走,那么软件就只能一直等在这个地方,等待fifo变成非满。然后,就导致整个CPU的运行被阻断在了这个地方。所以NIOS看起来就像是停止运行了。有的是拔掉下载器之后还能运行一会儿,这是因为jtag uart默认是64字节的fifo,刚刚拔掉下载器,fifo还没满,程序运行过程中间隔的写入数据到fifo中,过了一会写fifo满了,然后CPU就停下来了。

第二点,用户C水平不过关(不在少数),写的代码指针使用不合理,出现了指针越界行为,把正常的数据给损毁了,导致CPU的运行数据在运行过程中被损毁,然后就无法继续运行下去了。

上述原因主要是用户通过反复分析,总是找不出程序问题的时候考虑的几点。至于本身程序就没写对导致的,那就还是乖乖回去深造C语言吧。合理利用debug,帮助查找程序中存在的问题。

相关文章

网友评论

      本文标题:2018-11-30

      本文链接:https://www.haomeiwen.com/subject/hbohcqtx.html