完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
一个绝对令人困惑的问题。这在调试模式(dsPIC33EP512GP504,ICD3)中完全正常工作。我已经将使用减少到一个调用转换一个固定长整数。这是代码片段:nchars=sprintf(TEMPBUFFER,“%lu”,123456);NORMtx.(TEMPBUFFER,nchars);这是连续调用的结果,每个响应命令“OS?”TEMPBUFFER输出到UART:OS吗?12345 6OS?12345 6OS?12345 6OS?12345 6OS?12345 OS?12个12OS?12345 OS?12345 OS?12345 OS?12345 OS?345 OS?345 OS?345 OS?345 OS?345 OS?345 OS?5OS?5OS?我不能调试它,因为调试模式中一切正常!调用SaveTFF似乎加载了大约5种不同的库例程。没有提供源代码。如果有帮助的话,我已经上传了MAP文件(如.txt)。Cosmo Little
|
|
相关推荐
16个回答
|
|
|
嗯,更好的源代码…
|
|
|
|
|
|
我现在用Microchip提出了这个问题。
|
|
|
|
|
|
有一次,你需要一个堆来使用PROTF库函数。今天可能是这样,也可能不是真的。值得一试。
|
|
|
|
|
|
什么是堆?如果有必要,为什么链接器不加载它呢?
|
|
|
|
|
|
堆是一块可分配的内存。想MalCube()。大多数人不想要它。链接器不知道你需要多少。
|
|
|
|
|
|
有趣的是,数字都在1-6之间,就像原始输出一样。这有点像Spultf和UART函数之间的缓冲索引错误或竞争条件。如果它是一些随机数据,人们会期望随机值。这个电话多久打一次?
|
|
|
|
|
|
谢谢你的回复1/-我尝试了512字节的堆,这在所有2/-微芯片支持送我一个测试程序。这也在生产模式中表现失常,产生大量的垃圾输出。我附上了这个项目。微芯片认为这是一个硬件问题,与锁相环,但我然后运行处理器关闭FRC时钟与完全相同的结果。测试程序每次在生产模式中从处理器复位时生成垃圾输出。调试模式下的行为正常。附件是调试和生产中的UART输出。
DeMoDebug .TXT(0.55 KB)-下载67次DimoOfStudio.txt(1.52 KB)-下载82次 |
|
|
|
|
|
这个项目有点奇怪。它和main.c有相对链接,但是和._bit s.c有绝对链接,所以在我的PC上加载失败。
|
|
|
|
|
|
当你在发送程序中轮询时,为什么要启用发送中断?
|
|
|
|
|
|
我不完全理解MPLABX如何使用相对路径和绝对路径来工作。我已经附加了配置文件和主文件。微芯片重写了例程NORMtxbuffer以使用polling我的原始版本使用了带有中断的循环传输缓冲区,我还附上了我的原始项目。这仍然表现在我原来的帖子中。我已经尝试了一切,甚至删除了对SaveTFF的所有调用。我在UART输出中偶尔会出现错误,甚至当我只复制一个字符串到TEMPBUFFER时。同样,调试模式下的所有操作都正常。我用示波器检查了UART输出,波特率正好是96K,波形看起来正常。如果我知道调试和生产之间有什么不同,我可能会取得一些进展。查看地图文件,在两种模式下都会加载完全相同的程序内存。数据存储器在调试模式中保留了一些数据,这些数据把我的变量放在不同的位置,但是如果链接器不能定位数据,它肯定会发出错误消息。
主C。(10.74 KB)-下载144次A7000 0.x.Zip(241.24 KB)-下载32次 |
|
|
|
|
|
在我看来,好像有什么东西在定期重置PIC。输出数据从序列开始就发送几个正确的字符,然后是垃圾,然后是从开始再发送正确的数据。连接到MCLR引脚的是什么?
|
|
|
|
|
|
亲爱的瑞克,当我看到你的回复时,我确信你已经找到了解决办法!我只将~MCLR管脚连接到ICD头,用于18F处理器,其中MCLR管脚可以使用配置位断开连接。我立即添加了一个10K拉到VDD。不幸的是,这没什么区别。在ICD连接的调试期间,在ICD连接的生产期间,以及在ICD断开的生产期间,我都监视MCLR管脚。即使在与ICD连接的生产模式中,ICD在保持和释放复位时多次切换MCLR管脚。然而,MCLR引脚在调试和生产运行期间保持较高。没有任何重置处理器的迹象,至少在MCLR上没有。我在调试和生产模式下附加了最新的UART输出。复位肯定恢复正确的操作一个更多的命令。当我发送一系列错误命令时,这些命令总是正确地响应“!”‘R’,‘!’在下一个正确的命令“OS”中,字符似乎在缓冲区中留下了什么?很明显,我在调试模式中检查了传输缓冲区内容,所有的都和预期的一样。我可能要编写一个例程来将RAM转储到UART,这样我就可以在生产模式下检查各种缓冲区和变量。
A7000 0PROD.TXT(0.53 KB)-下载90次 |
|
|
|
|
|
看门狗?布朗出去了?
|
|
|
|
|
|
你检查过这部分的勘误表了吗?一些UART模块具有传输问题。
|
|
|
|
|
|
解决这个问题的巨大进步!我发现即使源代码不运行,添加一些源代码也会完全改变行为。我已经添加了两个函数来将RAM转储给UART,但我从不调用这些函数。当我禁用这些函数的编译时,如果使用了IF 0和α},我就得到了UART以前所报告的问题。然而,如果我编译这些函数,我会得到与UART完全不同的问题。在这种情况下,我在调试模式中得到错误的字符,并在生产模式下正确操作。我的结论是,UART有一个硬件问题,它非常依赖于加载到程序或数据存储器中的确切数据。调试和生产之间的假定差异是一种“红色鲱鱼”。硅勘误表列出了UART的一个问题,但是这是中断选择位UTX1SEL&LT;1:0Gt=01。我使用这些位=10的模式,其描述为:·如果UTXISEL<1:0>=10,则当字符被传输到UxTSR寄存器并且传输缓冲区为空时设置UxTXIF位。因为当前传输操作一结束,我写的下一个字符就立即传输到U1TSR。我还尝试了模式UTX1SEL=00,描述为:·如果UTXISEL<1:0>=00,则当字符从传输缓冲区传输到UART时,设置UxTXIF位。X发送移位寄存器(UXTSR)或发送缓冲器是空的。这意味着至少一个位置在发送缓冲器中是空的,这对行为没有影响。我将把这些新发现提交给微芯片。也许他们可以确认UART的任何问题。
|
|
|
|
|
|
不顾前哨!问题完全是我的错。设置UART TX缓冲区时,我使用了:无符号字符UART tx.[64]u.((aligned(64));/*tx缓冲区是圆形的*/我的错误是字节和字之间的混淆,所以缓冲区实际上与需要的字节数的一半对齐。在将语句更改为无符号字符UARTtx.[64]u.((aligned(128));/*tx buffer是圆形的*/我现在在调试和生产模式下都获得了稳定的结果。显然,缓冲区的实际位置取决于定义了多少其他变量,如果下一个有效地址位是1或0,那么这纯属偶然。如果0,一切都有效。如果为1,则缓冲指针与实际缓冲器完全错位。我只是运气不好,它总是在调试模式下工作。以前使用MPLAB和汇编程序时,我定义所有具有特定来源和大小的数据存储器,因此不会有任何混淆。无论如何,感谢所有帮助过这个的人。UART中断仍然存在一个可能的问题。我会让Microchip确认我使用的模式是可以的。Cosmo Little
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5795 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1125浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 19:35 , Processed in 0.999447 second(s), Total 104, Slave 87 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
53181