完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,我使用MPLABX V3.50、XC16 V1.30和XC16 V1.31、PIC24FJ1024GB606控制器。我声明了两个变量,但是在调试或打印时,我检查它们有不同的值。请参阅附件并告诉我丢失了什么。谢谢。
以上来自于百度翻译 以下为原文 Hi, I am using MPLABX v3.50, XC16 v1.30 and XC16 v1.31, PIC24FJ1024GB606 controller. I declared two variables long double lat= 15.12345678901234, lon= 71.12345678901234; But when I check them while debugging or print them they have different values. Please refer to the attachment and let me know what is it that i am missing. Thanks Attached Image(s) |
|
相关推荐
18个回答
|
|
嗯,即使它们长了一倍,我也不确定你能得到14个十进制数字的精度…
以上来自于百度翻译 以下为原文 Mmmmm, even if they're long double, I am not sure you can get 14 decimal figures precision... |
|
|
|
长双应该是64位,它们之间的偏移是一致的。15位的64位应该足够了。也许手表窗口只显示32位。
以上来自于百度翻译 以下为原文 long double should be 64 bit, and the offset between them agrees. 64 bit should be enough for 15 digits. Maybe the watch window is only showing 32 bits. |
|
|
|
|
|
|
|
|
|
|
|
注意!这个问题有2个方面:DSPIC RESP。XC16将字符串转换为浮点数的二进制表示形式(PC)(?)侧(调试器)-解释一些位模式,以显示一个十进制数字sLink。为了找出问题所在,我建议手动计算“理想”位模式并基于模式进行比较。编译器初始化初始化浮动不是错误的,但也可以。调试器的显示例程……你有这个概念吗?
以上来自于百度翻译 以下为原文 Pay attention! This issue has 2 sides:
It is not unheards of that compilers err on initializing floats, but it could be as well the display routine of the debugger... Do you get the concept? |
|
|
|
在变量窗口中,右键单击值字段下的数字,并指向“显示值”列,将看到IEEE双选择——没有长的双选项。如果从列表中选择十六进制,它将显示较低的位为零。
以上来自于百度翻译 以下为原文 In the Variable window, right click on the number under the Value field and point to Display Value Column As, you will see IEEE Double selected -- there is NO option for long double. If you select Hexadecimal from the list, it will display the lower bits as zero. lat = 0x402E3F35C0000000 lon = 0x4051C7E6C0000000 when they should be lat = 0x402E3F35BA6E8DEA lon = 0x4051C7E6B74DD1BD |
|
|
|
是的,我想我明白你的意思。但是我把这些变量打印到一个串行终端上,这些值与在变量窗口中显示的调试器相同。所以我不认为PC机/调试器有问题。编译器有初始化浮点数据类型的问题。
以上来自于百度翻译 以下为原文 Yes I think I understand what you mean. But I printed the said variables on to a serial terminal, the values are same as that debugger displayed in the variable window. So I don't think there is an issue with PC/debugger. The compiler is having issues initializing the floating point data types. |
|
|
|
我记得一些24位浮点格式从微芯片(不确定XC8或XC16)可能被称为“双”。位模式可能表明这是你目前得到的。
以上来自于百度翻译 以下为原文 I recall some 24 Bit float format from Microchip (not sure whether XC8 or XC16) that might be called 'double'. The bit patterns might indicate this is what you currently got. Regards |
|
|
|
在运行时,您是否尝试将值分配为文字或计算结果?您使用哪种打印格式发送到RS232?最后,它可能是一个编译器错误,你可以提出一个支持票…
以上来自于百度翻译 以下为原文 Did you try assigning the values at run time, either as literal or as result of a calculation? Which print format did you use for sending to RS232? In the end, it could be a compiler bug and you could raise a support ticket... |
|
|
|
我想你可能是对的。下面是添加注释的拆卸:
以上来自于百度翻译 以下为原文 I think you might be correct. Here's the disassembly with added comments: Line Address Opcode Label DisAssy 345 002B0 200000 MOV #0x0, W0 ; lat = 0x402E 3F35 C000 0000 346 002B2 2C0001 MOV #0xC000, W1 347 002B4 23F352 MOV #0x3F35, W2 348 002B6 2402E3 MOV #0x402E, W3 349 002B8 9FBF80 MOV W0, [W15-16] 350 002BA 9FBF91 MOV W1, [W15-14] 351 002BC 9FBFA2 MOV W2, [W15-12] 352 002BE 9FBFB3 MOV W3, [W15-10] 353 002C0 200000 MOV #0x0, W0 ; lon = 0x4051 C7E6 C000 0000 354 002C2 2C0001 MOV #0xC000, W1 355 002C4 2C7E62 MOV #0xC7E6, W2 356 002C6 240513 MOV #0x4051, W3 357 002C8 9FBFC0 MOV W0, [W15-8] 358 002CA 9FBFD1 MOV W1, [W15-6] 359 002CC 9FBFE2 MOV W2, [W15-4] 360 002CE 9FBFF3 MOV W3, [W15-2] |
|
|
|
24位浮点将是XC8。对于XC16,声明类型long double,即显式,是IEEE双精度(64位)。
以上来自于百度翻译 以下为原文 24-bit float would be XC8. For XC16, declaring type long double, explicitly, is IEEE double precision (64 bit). |
|
|
|
“8位编译器允许使用24位浮点和双类型。”第28页XC16C编译器用户指南。这就是你所指的吗?
以上来自于百度翻译 以下为原文 "The 8-bit compilers have allowed the use of 24-bit float and double types." Page 28 XC16 C Compiler User's Guide. Is this what you are referring to ? |
|
|
|
XC16手册中的第8.9部分:所以,你可能需要在你的常量中加上后缀。
以上来自于百度翻译 以下为原文 Section 8.9 of the XC16 manual states: So, you may have to add suffixes to your constants. long double lat= 15.12345678901234L, lon= 71.12345678901234L; |
|
|
|
8位编译器是XC8,而不是XC16。XC16是16位编译器。
以上来自于百度翻译 以下为原文 The 8-bit compiler is XC8, not XC16. XC16 is the 16-bit compiler. |
|
|
|
是的,我确实试着在运行时赋值。这是一样的,我用Strutff()将它们转换成字符串,然后打印出来。
以上来自于百度翻译 以下为原文 Yes, I did try assigning the values at run time. It was the same. I converted them to a string using sprintf() and then printed them. |
|
|
|
所以,你可能需要给你的常量添加后缀。宾果!就是这样!
以上来自于百度翻译 以下为原文 So, you may have to add suffixes to your constants. long double lat= 15.12345678901234L, lon= 71.12345678901234L; Bingo! That is it! |
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
5234 浏览 9 评论
2026 浏览 8 评论
1950 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3201 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2253 浏览 5 评论
771浏览 1评论
659浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
588浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
670浏览 0评论
571浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 14:33 , Processed in 1.523476 second(s), Total 81, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号