OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4079|回复: 4

stm32 中int16位数组元素大小端如何解决?

[复制链接]

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2019-3-24
在线时间
37 小时
发表于 2021-1-22 09:25:31 | 显示全部楼层 |阅读模式
5金钱
最近实验发现一种情况,我在向上位机发送负数数据的时候,会出现数组元素有大小端交换的问题。
int16_t    adc[5]={0xff01,0xff02,0xff03,0xff04,0xff05};

之后,在发送指令中如下:

                  for(i=0;i<5;i++)
                        A_B_C.B=adc;
                     for(i=0;i<10;i++)            
                           Send_Stings(USART1,A_B_C.C);
将数组adc中的元素发到上位机去。
(其中,
union  A         
{
    u8  C[50];
    int16_t  B[25];
};
union  A   A_B_C;)  是我定义的一个联合体,用来发送数组元素。)
但是我在串口里得到的数据却不对劲。具体如图所示。   

   对于这个问题 ,我想知道,能不能有解决大小端交换的问题。应为项目中的数组比较大,所以想请教各位哥哥们。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
912
金钱
912
注册时间
2019-7-5
在线时间
189 小时
发表于 2021-1-22 10:29:36 | 显示全部楼层
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-6-10
在线时间
16 小时
发表于 2021-1-22 10:38:19 | 显示全部楼层
发送的时候就直接使用定义好的数据结构发送,强制转换为字节发送,不是就省了很多事了吗?比如
  1. send_data(uart1,(uint8_t *)abc,sizeof(abc));
复制代码
,这样就直接发送了,可以不用定义了联合体吧
回复

使用道具 举报

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2019-3-24
在线时间
37 小时
 楼主| 发表于 2021-1-22 13:34:52 | 显示全部楼层
biaotou 发表于 2021-1-22 10:38
发送的时候就直接使用定义好的数据结构发送,强制转换为字节发送,不是就省了很多事了吗?比如,这样就直接发 ...

嗯嗯 可以 因为我的数据是负数,所以上传的是i16类型的,比如说数组得到的元素是应该是0xff01,但是在数组中实际上却是0x01ff。所以有一个大小端的问题。
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-6-10
在线时间
16 小时
发表于 2021-1-22 14:17:57 | 显示全部楼层
好又多 发表于 2021-1-22 13:34
嗯嗯 可以 因为我的数据是负数,所以上传的是i16类型的,比如说数组得到的元素是应该是0xff01,但是在数 ...

为啥要纠结数组中大小端更换了,我觉得不影响啊,你这边在单片机定义好数据类型以后,上位机定义同样的数据类型,按字节传输,直把数组内存复制上位机同样的数据结构上,就自动传换了,不管数据数组怎么存的。况且真的交换了,那你校验都通不过。除非你单片机和上位机的架构不同,不是arm和x86的架构的,那定义的数据大小端就不同了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 04:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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