OpenEdv-开源电子网

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

关于串口发送数组指针值的一些C语言问题

[复制链接]

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2019-9-9
在线时间
20 小时
发表于 2022-6-1 09:54:27 | 显示全部楼层 |阅读模式
10金钱
今天在调试的时候发现一个神奇的现象,就是数组指针在函数中操作赋值后,直接采用串口发送, 如不进行取址再指向的话,那么发送出去的串口数据就是0x00,百思不得其解,想来和朋友们一起讨论一下原因
代码如下:
void tx_volt_data(u8 *pu8data, u16 u16volt)
{
        pu8data[0] = 0xFE;
        pu8data[1] = 0xFE;
       
        pu8data[2] = (uint8_t)(u16volt>>8);
        pu8data[3] = (uint8_t)u16volt;

       pu8data[4] = 0xD0;

        for( f = 0; f< 5; f++)
        {
                UART0_SendData8(*(&pu8data[f]));
                while(!(UART0_SendFlag));        //等待发送完成
                UART0_SendFlag = 0;               
        }
}


如果写成  UART0_SendData8(pu8data[f]);的话,发送的数据都是0,只有上述写法才能发送出正确的数据,这是为什么呢?感觉两个应该是同一个地址值,用VS测试了一下是没错的,不太理解哈哈

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

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
914
金钱
914
注册时间
2018-7-18
在线时间
384 小时
发表于 2022-6-1 10:33:55 | 显示全部楼层
pu8data 这个参数既然是在函数内部赋值 为什么写成通过形参输入,直接在函数内定义变量就行, UART0_SendData8(pu8data[f]);这个之所以会出问题,感觉是tx_volt_data()的第一个参数的变量定义出问题了,导致数组访问越界了    之前写过类似的 没有你这个问题
for(i=0;i<tbuf.length;i++)
{
        uart_sendbyte(tbuf.buf[i]);
}
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2019-9-9
在线时间
20 小时
 楼主| 发表于 2022-6-1 11:35:52 | 显示全部楼层
wwhh 发表于 2022-6-1 10:33
pu8data 这个参数既然是在函数内部赋值 为什么写成通过形参输入,直接在函数内定义变量就行, UART0_SendD ...

感谢回复,是的是的,仔细检查后发现应该是数组越界的问题, 因为这里操作5个数,就定义了一个大小5的数组,我把数组改大这个问题就解决了,但理论上5个数组应该也是可以的,哈哈哈不知道为啥
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2022-6-1 11:39:07 | 显示全部楼层
UART0_SendData8(pu8data[f]);应该没问题,就看你传递的指针是不是指向了不该指向的地方.
专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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