搜索
bottom↓
回复: 13

union能一多组数组对应一个数组吗?

[复制链接]

出390入22汤圆

发表于 2020-9-26 13:43:47 | 显示全部楼层 |阅读模式
如题,有多组参数数组有char,int,想在同一内存对应一个char数组写入到24c储存器中,行吗?如果行请示范一下,麻烦了,我上学没学单片机,只是看了本C语言的数,诸如指针强制转换都不明白是怎么回事,

出500入109汤圆

发表于 2020-9-26 14:06:33 来自手机 | 显示全部楼层
内存对齐后,使用不同类型指针指向起始地址就行

出0入22汤圆

发表于 2020-9-26 14:21:41 | 显示全部楼层
来来来,我给你一步到胃
1.声明部分
  1. typedef union uniSET
  2. {
  3.         struct
  4.         {
  5.                 signed short                         A[4];
  6.                 signed short                         B[4];
  7.                 signed short                         C[4];
  8.                 unsigned char                         d;
  9.                 unsigned int                         e;
  10.                 unsigned int                         f;
  11.         }pset;
  12.         unsigned char                                 storage[64];
  13. }*pSET;
复制代码


2.定义部分
  1. union uniSET set;
复制代码


3.存储读写部分
  1. STMFLASH_Read(FLASH_SAVE_ADDR,(u32*)set.storage,sizeof(set.storage)/4);
复制代码

以及
  1. STMFLASH_Write(FLASH_SAVE_ADDR,(u32*)set.storage,sizeof(set.storage)/4);
复制代码


4.使用部分

  1. set.pset.A[0]=ad.get_avg(0);
  2. set.pset.d=123;
复制代码

出390入22汤圆

 楼主| 发表于 2020-9-26 14:43:58 | 显示全部楼层
zxq6 发表于 2020-9-26 14:21
来来来,我给你一步到胃
1.声明部分

谢谢啦,我就是首了一本C语言的书就写程序,好多东西不明白,谢谢了

出200入2554汤圆

发表于 2020-9-26 16:15:50 来自手机 | 显示全部楼层
union 内嵌 struct 即可,但是需要确定字节对齐问题,vs 是 pragma pack 命令,其他的编译器自己查

出0入442汤圆

发表于 2020-9-26 16:21:29 | 显示全部楼层
t3486784401 发表于 2020-9-26 16:15
union 内嵌 struct 即可,但是需要确定字节对齐问题,vs 是 pragma pack 命令,其他的编译器自己查 ...

pack vc和gcc和clang都支持,我估计应该是c++扩展规范的一部分。

出0入213汤圆

发表于 2020-9-28 20:28:50 | 显示全部楼层
刚从2000寻开发饺子机含样机的帖子来的,想项目怎样了

出0入4汤圆

发表于 2020-9-28 21:40:31 | 显示全部楼层
jyrpxj 发表于 2020-9-28 20:28
刚从2000寻开发饺子机含样机的帖子来的,想项目怎样了


1年半了

出0入0汤圆

发表于 2020-9-29 09:24:39 | 显示全部楼层
t3486784401 发表于 2020-9-26 16:15
union 内嵌 struct 即可,但是需要确定字节对齐问题,vs 是 pragma pack 命令,其他的编译器自己查 ...


union 内嵌 struct 考虑大小端就可以了吧,字节对齐有影响嘛

出200入2554汤圆

发表于 2020-9-29 13:45:10 | 显示全部楼层
ziziy 发表于 2020-9-29 09:24
union 内嵌 struct 考虑大小端就可以了吧,字节对齐有影响嘛

也就是内存对齐,LZ 应用是用结构体描述协议,对齐太重要了

出0入17汤圆

发表于 2020-9-29 15:04:40 | 显示全部楼层
想顺便问一下楼主,饺子机做的怎么样了?

出0入0汤圆

发表于 2020-9-29 15:15:42 | 显示全部楼层
ziziy 发表于 2020-9-29 09:24
union 内嵌 struct 考虑大小端就可以了吧,字节对齐有影响嘛

struct内部只有一种数据类型就不用考虑对齐问题,有多种数据类型就要考虑
有坛友发过贴,是按最长的数据类型对齐的
比如:
struct
{
uint8_t a;
uint32_t b;
}c;

c是占8个字节的。

出390入22汤圆

 楼主| 发表于 2021-2-18 08:26:33 | 显示全部楼层
zxq6 发表于 2020-9-26 14:21
来来来,我给你一步到胃
1.声明部分

老兄,另一个文件调用这个数组,怎么办呢?我网上搜了搜也没看明白,您能再示范一下吗?谢谢啦

出0入22汤圆

发表于 2021-2-21 20:43:42 | 显示全部楼层
liudingding 发表于 2021-2-18 08:26
老兄,另一个文件调用这个数组,怎么办呢?我网上搜了搜也没看明白,您能再示范一下吗?谢谢啦 ...

其他文件需要使用这个结构体,只需要先
  1. extern union uniSET set;
复制代码

然后就可以像本文件一样的调用了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 16:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表