完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
嗨,所以我有一个像这样定义的位字段:然后我们在调试模式下执行以下代码行:lora_message.V001.jj=(uint32_t)0x405F7E01;lora_message.V001.mm=(uint32_t)0x405F7E01;然后,查看手表窗口中存储的值:jj=0x405F7E01;mm=0x5F7E01;(WRONG!两者都是UtiT32×T,使用31位。jj很好,mm缺失了最重要的位。如果我在位字段声明中反转变量,那么mm是好的,jj不是。所以这个问题与位字段中变量的位置有关。你能解释一下发生了什么以及如何处理这个错误吗?(对不起,变量名,主题有点机密,所以我不能填实名)
|
|
相关推荐
4个回答
|
|
|
我正在看II. XC32允许比特字段大于32位宽吗?
|
|
|
|
|
|
不确定,但没有抱怨。
|
|
|
|
|
|
对此我也不确定。不幸的是,这里的编译器手册有点薄:我不知道这里到底发生了什么。所以我所能做的就是提供一些想法和非常疯狂的猜测(我不知道它是否有用,或者它是否令人困惑)。我之所以这样问,是因为如果您有嵌套结构,那么事情就会变得更加复杂,因为这比已经出现的问题更深入到编译器特定的行为中。然后,您是否尝试检查sizeof(MESSAGE_LORA_V001)是否为36字节?例如,您可以将其放入易失性变量并检查它。或者你可以做一些野生的LED闪烁(如果你有一个),如果它是错误的。然后,也许它也可能是一个问题的手表窗口。你是不是试着把MM的值读回正常的UIT32?T,看看这个结果?也许你可以试着用-Wpadded编译,看看是否有警告。我猜你想要一个布局,它有0填充位,像这样:8a a 1 a a 7 bb8 bb2 bb2 bb 6 cc---8dd8 dd8 dd8 dd8 dd8 dd8 dd8 dd8 ee8 ee---8ff5 ff 3 gg6 gg 2 hh7 hh 1 ii--------------------------------------8ii8ii8ii8ii8iii8j8j8jj8jjj7j7----------------------------------------------------------------------------------------------jj 1 kk--------8kk8 kk1 kk 7 ll------2ll 6 mm8 mm8 mm8 mm8 mm8 mm--------------------1mm 7 nn8 nn2 nn 7垃圾桶------考虑到一些字段正在跨越它们自己的存储单元的边界,这也许是个问题。例如GG使用的是16位类型,但不适合FF的16位块。也许使用32位类型会有所不同。对于其他的.gg(uint16_t)也是如此,它将穿过16位..ii(uint64_t),它将穿过128位borderkk(uint32_t),它将穿过64位..ll(uint16_t),它将穿过32位..mm(uint32_t),后者将穿过一个32位..mm(uint32_t)。256位边框。可能是,因此编译器总是将这些数据移动到下一个完全包含它们的存储块中。另一个荒谬的理论是,它可能与缓存页面大小有关,对于您来说可能是256,而缓存页面大小是mm。但是请注意,我不知道是否有我上面描述的东西是真实的,我不知道它是否会引起你的问题。
|
|
|
|
|
|
首先,你张贴的内容不一致。也就是说,假设您有一个名为lora_message的MESAGE_LORA_V001变量,那么就不存在lora_message.V001,更不用说lora_message.V001.jj。我没有花时间尝试复制您使用调试器的经验(我不太喜欢调试调试器或变量的IDE显示)。我没有尝试任何额外的包装或填充。我刚刚使用了你所展示的TyBuffF: ---论坛不让我发布代码片段。参见附件——输出:在2017年8月29日11:01:37PDT上用XC32版本14401编译:lora_message.jj=1080000001=0x405F7E012:lora_message.mm=1080000001=05F7E013:lora_message.jj=1126240237=0x43210FED4:lora_message.mm=1412567294=0x543210FE4,这里没有显示,但我也打印了siZeof(MasaGeLoaLaVv1),得到了36,如预期的(与XC32版本1.43和1.42相同的结果),戴夫。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
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-3 04:59 , Processed in 0.692429 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3802