完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
您好,我使用了以下资源:Device:dsPIC33EP64MC202Debugger:ICD3IDE:MPLAB X-v3.20编译器:XC16-v1.25我的代码没有从函数调用返回。它执行一些调用函数,但是当它调用我的配置时钟函数时,它执行该函数,但是到达末尾后它不返回到下一行的函数调用者,它继续执行文件中最后一个调用函数所在的每个下一个函数。SED被正确地包含,并且在编译期间没有警告。我观察了调用堆栈,并注意到在3次调用之后,它到达发生问题的函数,当它完成被调用的函数时,它不返回,它继续执行当前文件中的下一个函数。但是,有人能帮我解决这个问题吗?丹尼尔,我向你致以最诚挚的问候。
|
|
相关推荐
19个回答
|
|
|
调试程序中的错误?你使用C还是汇编程序?在任何情况下,你能告诉我们返回的代码/拆卸吗?
|
|
|
|
|
|
一个损坏的堆栈?
|
|
|
|
|
|
在逐个调试时,查看反汇编窗口或文件,或程序内存窗口。有回执吗?烟囱呢?你可以在这里发布一个代码片段吗?
|
|
|
|
|
|
我在想,我写的是Flash存储器,这个错误只发生在我用Flash写的时候。
|
|
|
|
|
|
这里是调用的函数(反汇编),这个函数执行,返回之后,出现我在第一篇文章中报告的问题。但我观察到只有当我用闪存写时才发生。我会在这里贴上我用Flash写的代码。
|
|
|
|
|
|
这里是处理闪存的代码。我没有写它,只是调整它用我自己的代码:
|
|
|
|
|
|
好吧,老兄,我做到了,我把它贴在这里,我以前从来没有使用这个论坛,所以我不知道,你能看到答案与我在这里放的代码?我在质疑这一点,因为我不知道是否每个人都能看到所有答案。
|
|
|
|
|
|
|
|
|
不确定你要问什么,但是代码可以看到(虽然我不知道该答复什么)。为了更好的可读性,我只是使用CODE标记重新发布它。
|
|
|
|
|
|
我使用C。我用反汇编程序把我的代码放在这里。但是,我怀疑这个问题只发生在我做Flash编程时,当它不发生时,它不会发生。
|
|
|
|
|
|
这听起来像是Flash编程中的一个错误,杀死了正在调用的代码存储器。
|
|
|
|
|
|
我怎样才能解决这个问题?
|
|
|
|
|
|
我试图改变这一行:.0,PrimoAdDR,0x02200,我认为这是Flash开始写入的地方,对吧?但它不起作用,不会改变什么。
|
|
|
|
|
|
使用闪存来保存非易失性数据吗?这个值在您发布的Flash写入例程中没有任何地方被引用。尖齿。可能存在bean重叠。您可能还希望更改Flash写入例程,以确保写入Program MEMORY区域的尝试在破坏任何执行代码之前被中止。目的地地址和为此目的分配的闪存地址之间的简单比较就足够了。链接器可以通过保留非易失性数据的闪存部分来帮助实现这一点。这是DoeBy在自定义链接器脚本中更改内存段中的值(和区域大小相等)。如果您想确保.Text、.ISR等部分的内容不被写入,这是可取的。
|
|
|
|
|
|
是的,我使用闪存来保存我希望在断电后保留的数据。这些数据从串口接收并存储在Flash中。我之前发布的那些例程被其他代码使用。我会在这里张贴一些。
|
|
|
|
|
|
MikeAtCalidus,你说:链接器可以通过保留闪存的部分来帮助非易失性数据。这是在定制链接器脚本中更改MEMORY部分(以及区域大小的等式)的值。我理解你的意思,但我不知道如何去做。我不知道你是否知道MPLAB X,但是,我能用这个吗?我会在网上搜索一下怎么做,因为这样分开的部分你说的会是一件很好的事情。
|
|
|
|
|
|
有几件事特别突出:不要这样做来对齐内存:在myRowData2InFlash变量的声明中这样做。示例:我不明白为什么要擦除额外的内存页:如果程序代码碰巧位于硬编码的0xC00上,这也是一个灾难。地址!这个逻辑一般看起来很奇怪。我不明白你为什么不把当前的Flash页面读入RAM(就像你已经看到的那样),在RAM中修改它,然后写回Flash。整个FlashPageModify看起来有些过分,再次读回RAM也是如此。另外,不要使用默认的中断来重置看门狗。默认ISR仅在您自己不指定ISR时使用,并且不应该是这样。看门狗应该在主循环中服务,以确保程序逻辑没有锁定在某个地方。你也可以考虑在做闪光灯操作时禁用矿石来维护看门狗。
|
|
|
|
|
|
这个处理闪存的代码不是我的,它是我在网上找到的一个示例代码,我以前从来没有编写过闪存,所以,我只是用它来实现我所需要的。一切都很好,但我在项目中做了一些修改,消除了所有的警告,所以,它开始发生。这里是文件的另一部分,名为TestDATA.HIN文件,缓冲区大小按照您所说的方式初始化。
|
|
|
|
|
|
关于删除多余的页面,我也不知道,在注释中写道,这样做是为了确保在下一次写时只写1页。关于看门狗,我在单独的配置文件中禁用了它。通常,在函数不返回问题之后,它总是在这个缺省ISR中停止,它需要服务看门狗,但是它是一个无限循环,所以,我不知道为什么有人这样做。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
514 浏览 0 评论
5819 浏览 9 评论
2351 浏览 8 评论
2238 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3545 浏览 3 评论
1169浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1123浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
893浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
514浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-17 16:10 , Processed in 1.498848 second(s), Total 110, Slave 93 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
305