完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大侠好,小弟在写单片机的串口通讯的时候需要用到将结构体里面的数据通过串口输出出来,我采用的办法是定义一个结构体指针 然后使用memcpy()来该地址的数据拷贝出来。我想采用for循环来拷贝数据,使用前将指针指向结构体首地址,并且在每次拷贝完成后指针自加1。问题就来了,单片机会死机,感觉是这个指针没有按照我想象中的将结构体里面的数挨着挨着输出出来。只要对结构体的指针进行了位移操作,就会死机。请问如果想挨着挨着输出结构体的所有数据应该怎么做才能达到我的想法呢? 求各位大侠帮帮忙。
|
|
相关推荐
8个回答
|
|
1,结构体定义的时候,前面加__packed关键字。2,指针指向结构体首地址。3,从指针里面依次读取sizeof结构体大小的数据出来,就可以完成你的目标了。
|
|
|
|
结构体就是一个数组,可以这么理解,按照数组的操作来就是了
|
|
|
|
原子哥,您好!我按照您说的添加了关键字__attribute__ ((__packed__)),现在不会死机了,但是输出的数据只有第一个是对的,其余的都不知道是什么意思,请问这个是什么意思呢?
[C] 纯文本查看 复制代码 struct piledatansr { unsigned char bStaNum; unsigned char bDataType; unsigned char WN; unsigned char SOW; }__attribute__ ((__packed__));struct piledatansr piledatansr_1; struct piledatansr *pilepointer; pilepointer=&piledatansr_1; unsigned char msg[250]; piledatansr_1.bStaNum=0xAA; piledatansr_1.bDataType=0x01; piledatansr_1.WN=0x20; piledatansr_1.SOW=0x30; for(x=0;x<4;x++) { memcpy(msg,pilepointer+x,sizeof(piledatansr_1));//将结构体数据导入输出数组中 nmea_send_outmsg(msg, 1, CPU_USAGE_NMEA_MSG);//输出msg的1个字节 } if(x==4) pilepointer=&piledatansr_1; 这样通过串口调试助手看到的数据是AA 10 A5 55 不知道为什么呢?求原子哥指教!谢谢您! |
|
|
|
我就是按照数组的操作的呢,首先将指针指向数组 输出后再+1 他指向的就不是结构体的下一个成员了的呢?
|
|
|
|
memcpy(msg,piledatansr_1,sizeof(piledatansr_1));//将结构体数据导入输出数组中
for(x=0;x<4;x++) nmea_send_outmsg(msg[x], 1, CPU_USAGE_NMEA_MSG);//输出msg的1个字节 |
|
|
|
这个有些问题吧?memcpy的变量是指针,然后那个nmea_send_outmsg 的第一个变量也是指针。
|
|
|
|
copy 1次,for循环显示。
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4467 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
343浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
346浏览 2评论
370浏览 2评论
364浏览 2评论
408浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:03 , Processed in 1.112242 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号