完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
大家好,我使用的是:PIC32MX795F512LMPLAB Xdee_em._pic32_v1_0_1(从微芯片网站下载),我试图弄清楚eeprom仿真示例是如何工作的。当我编写u控制器时,我可以写/读到我的Flash。我能够证明这一点,因为当我读取设备内存时,我能够看到我在闪存地址中写入的所有数据(我已经选择的)都在那里。当我回收电源并读取设备内存时,数据仍然在那里。当我重新计算之后试图读取或写入数据时,我的问题就开始了。掌握权力。数据消失了。我对此进行了研究,发现当DataEEInit函数调用DataEEVerifyPage函数时,后者返回值为12。这意味着闪存包含0x0。这不是真的,因为闪存地址只包含我写的数据或0xffffff。如果有人告诉我为什么会发生这种情况,我将非常感激。谢谢你的时间。
|
|
相关推荐
10个回答
|
|
|
嗨,你以前在AN1095“dee_em._pic32”代码上做过一些调试吗?你可以看看这个线程:http://www..hip.com/for./fb.ashx?m=758351参见消息#10中提供的代码。在更改中,有逻辑检查闪存数据存储区域是否被擦除(包含所有0xFF)、是否已经包含有效数据或包含损坏的数据。
|
|
|
|
|
|
嗨,Mysil,谢谢你的答复。我已经试过你提供的链接的代码(dee_em..c),但我还是有这个错误。
|
|
|
|
|
|
嗨,什么是错误,你的程序在做什么?迈西尔
|
|
|
|
|
|
嗨,Mysil,当我编程u控制器,并使用写和读功能,第一次一切都好。当我循环使用电源并尝试读写时,DataEEVerifyPage函数返回12,并擦除我以前存储的所有数据。
|
|
|
|
|
|
嗨,线程中有两个完整的示例程序,它们使用不同的闪存区域存储ee_data。你是按原样运行这个示例程序,还是使用自己的主程序?你写你回收电源,你确定在重新启动调试器时你不允许MPLAB擦除和编程芯片?如果没有指定,MPLAB将擦除所有内容,并在每次启动调试器时对芯片进行编程。参见同一线程中的丁巴茨消息#8,在重新编程MCU时,将MPLAB设置为保留哪些内存地址范围?问候,Mysil
|
|
|
|
|
|
线程中有两个完整的示例程序,它们使用不同的闪存区域存储ee_data。我使用1024的数据大小和4的页数。我保存的闪存地址是0x9D040000,因此我必须在调试器选项中保留地址0x1D040000到0x1D03ffff,我已经这样做了。“您是按原样运行示例程序,还是使用自己的主程序?”不,我已经改变了一点。我的测试代码在我的.(1)循环例程中,而不是像您提供的示例中那样。我正在开发一个新的板,它能够使用CAN信号控制屏幕。我有一个有12个按钮的面板,当我按下按钮9时,我想在我的闪存中写10个值,当我按下按钮5时,我想读这些值。*/Lwitter(AppDATA状态){/*应用程序的初始状态。*/case APP_STATE_INIT:{DataEEInit();appData.state=APP_IDLE;}/*TODO:实现您的应用程序状态机。*/case APP_update_screen:{.(screenId){case(0)://logo{if(read_data_arr 4]==5)//打开LED.{LATAbits.LATA10=1;{}.{LATAbits.LATA10=0;}.(DebounceKeyboard())case(5)://read按钮按下?。{read_request=1;eeprom_emulator();break;case(9)://write按钮被按下?{CAN_Out_Buffer.c[0]=1;DRV_CAN0_ChannelMessageTransmit(1,0x0120,1,CAN_Out_Buffer.c);write_request=1;eeprom_emulator();break;default: }和myeeprom_emulator()函数是:void eeprom_emulator(void){SYS_WDT_TimerClear();if(write_request==1){TickW=_CP0_GET_COUNT();(n=0;n<10;n+){write_value=DataEEWrite(write_data,write_addr)DataEEWwrite(write_data,write_写入_addr);;;如果(write_值> 0 0){write_写值>_____write_data,write_data,write_write_write_write_write_write_write_write_请求=0;_addr_addr(如果(read_请求=1){Ti TickR=.{TickR=..{TickR.{C C C C C TickR=..{TickR=.{.{TickR=..{...{.{.{.{TickR.{.{.{..{P0_GET_COUNT();P0_GET_COUNT();DEEaddr=0;;(n=0;n<写加器;n++++++)的DEEaddr=0;;(n=0;DEDEEaddr=0;DEEaddr=0;(n=0;DEDEDEEaddr=0;DEEaddr=0;;(n=0;n=0;n=0;n=0;n=n=0;n_GET_read_data_addr][read_addr],read_addr],read_addr],read_add读取_addr],read_addr),read_addr);read_add读取_addr(read_add读取_addr(read_addr(T()-TickR;read_request=0;}此外,当我暂停程序、重置和播放时,DataEEVerifyPage()函数仍然返回值12。此外,我注意到我的数据是写在0x9D041xxx(这是第二页)上,而不是写在0x9D040xxxxxxx上。正常吗?谢谢,Marios
|
|
|
|
|
|
嗨,已经在dee_em._pic32和示例代码中进行了一些调试。虽然在DataEEInit()中查找并纠正了错误,但是无法再现您描述的状态。示例代码不完整,因此为了运行示例代码,我进行了更改。e是测试代码中的一些bug:构造为:DEEaddr=0;for(n=0;n
|
|
|
|
|
|
我非常感谢你的工作和建议。我已经尝试了你发布的新例子。我仍然有同样的问题。我附了一些图片来显示内存中的内容。我试过将相同的代码添加到其他板中,结果相同。不幸的是,我不明白为什么会发生这种情况。顺便说一下,我在调试器上保留的地址是0x1D040000到0x1D043fff,而不是0x1D040000谢谢,Marios
|
|
|
|
|
|
|
|
|
|
|
|
您好,Marios在您的项目中可能存在一些包含文件或链接问题,编译器掌握了不同的包含文件,或者链接了与您所想不同的东西,并且可能不同于MPLAB使您相信的东西。无法理解,请打包要运行的项目。在MPLLAB X的“项目”窗格中,指向项目层次结构的根,即PDIP图标,单击鼠标右键并选择:“Package”这将在MPLLAB项目目录中生成.zip文件。发布此zip文件,或者将其发送到我在PM消息或电子邮件。问候,Mysil
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
495 浏览 0 评论
5808 浏览 9 评论
2347 浏览 8 评论
2237 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3542 浏览 3 评论
1151浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1117浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
885浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
496浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-11 09:09 , Processed in 1.041278 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1930