完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好。希望大家都能完成。MPLABX V4.01,XC16 V1.32,DSPIC30F2010。请帮助我从EEPROM读取浮点值(长双)。上面的代码从RAM读取长双倍。16位数据可以容易地从EEPROM读取,但不知道如何从EEPROM读取长双。
以上来自于百度翻译 以下为原文 Hello. Hope everyone will be fine. MPLABX V4.01, XC16 V1.32, dsPIC30F2010. Please help me to read a float value(long double) from EEPROM. #include long double _EEDATA() source_eedata=1.79769313e+308L; long double source_ramdata=1.79769313e+308L; long double dest_eedata,dest_ramdata,offset; void main() { // reading RAM dest_ramdata=source_ramdata; // reading EEPROM. TBLPAG=__builtin_tblpage(&source_eedata); offset=__builtin_tbloffset(&source_eedata); //where to go next. while(1); } The above code reads long double from RAM. The 16 bit data could be read easily from EEPROM, but don't know how to read long double from EEPROM. |
|
相关推荐
9个回答
|
|
如在这里的HTTP//www. McCHIP.COM/FUMMS/FUNDSPE/1020892YEP建议的
以上来自于百度翻译 以下为原文 As suggested in here http://www.microchip.com/forums/FindPost/1020892 yep |
|
|
|
谢谢DaRigo,但是找不到任何帮助!
以上来自于百度翻译 以下为原文 Thanks DarioG. but can't find any help from there! |
|
|
|
基本上,首先必须从EEPROM中读取4或8字节(长双倍的大小),并将它们存储到一个字节数组中;之后,您将使用这些指针(如其他线程)将这些字节复制到双变量中。理论上,2个步骤可以被优化为单个步骤。但我以后会这么做
以上来自于百度翻译 以下为原文 Basically, you first must read 4 or 8 bytes (the size of your long double) from the EEprom and store them into an array of bytes; later, you will copy these bytes into the double variable, using a pointer to this one (as per the other thread). In theory the 2 steps can be optimized into a single one but I would do this later |
|
|
|
或使用包含字节数组和浮点版本的联合。
以上来自于百度翻译 以下为原文 Or use a union, containing a byte array and the float version. |
|
|
|
|
|
|
|
另外,我怀疑您的编译器支持长双倍。你可能真的得到了一个8字节的正则双。
以上来自于百度翻译 以下为原文 Additional I doubt your compiler supports a long double. You may be really getting an 8 byte regular double. |
|
|
|
非常感谢你的回复。问题解决。现在示例代码看起来像这样
以上来自于百度翻译 以下为原文 Many Thanks for replies. Problem resolved. Now the example code looks like this #include long double _EEDATA() source_eedata=1.79769313e+308L; void main() { // reading float from EEPROM. unsigned i,*read_eedata_ptr,offset; long double copy_eedata_to_ram,read_eedata; read_eedata_ptr=©_eedata_to_ram; TBLPAG=__builtin_tblpage(&source_eedata); offset=__builtin_tbloffset(&source_eedata); for(i=0;i<4;i++) { *read_eedata_ptr++=__builtin_tblrdl(offset); offset+=2; } read_eedata=copy_eedata_to_ram; while(1); } |
|
|
|
好的,但是在32768中有1的几率,如果16位地址在表页上没有滚动,那么它可能会失败。00:32位数据的FFFE低字,32位数据的高码字。
以上来自于百度翻译 以下为原文 Good, but there is a 1 chance in 32768 that it could fail if the 16bit address rolls over leaving the table page not undated. 00:FFFE low word of 32bit data 01:0000 high word of 32bit data Just saying. |
|
|
|
你完全正确,GOT2015。注意表页地址。一种方法是在EEPROM中指定数据地址,以确保数据不会跨越页面边界。
以上来自于百度翻译 以下为原文 You are absolutely right Gort2015. Care should be taken about table page address. One way is specify address of data in EEPROM so that make sure that the data will not cross the page boundary. _EEDATA() long double __attribute__((address(0x7FFC00))) source_eedata=1.79769313e+308L; |
|
|
|
只有小组成员才能发言,加入小组>>
5238 浏览 9 评论
2028 浏览 8 评论
1950 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3204 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2253 浏览 5 评论
778浏览 1评论
666浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
595浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
677浏览 0评论
576浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 10:08 , Processed in 1.640337 second(s), Total 92, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号