OpenEdv-开源电子网

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

stm32 程序运行的过程中,字符串莫名被改掉

[复制链接]

21

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-5-7
在线时间
80 小时
发表于 2022-1-13 13:35:30 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 撑好 于 2022-1-13 13:58 编辑

如题,在代码中定义了全局字符串char str[10] = "wt31",但是在数据发送过程中,并且在不断电的情况下,有时候是正常的接收到“wt31”,有时候收到“wt+2个乱码字符”,一般如果源字符串的值被改写了,应该不会变回来了,但是我的情况是一会儿正常一会儿出问题,请问大家有没有什么想法和建议去检查到这个bug?
我的字符串是作为参数传给另一个函数的,在另一个函数里发送出去的,试了直接在另一个函数里直接等于“wt31”,但是一样会出问题

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

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2021-8-2
在线时间
10 小时
发表于 2022-1-13 13:49:00 | 显示全部楼层
是不是线接触不良?另外把字符串设置成常值变量试试
回复

使用道具 举报

21

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-5-7
在线时间
80 小时
 楼主| 发表于 2022-1-13 13:57:22 | 显示全部楼层
namae 发表于 2022-1-13 13:49
是不是线接触不良?另外把字符串设置成常值变量试试

我是用的4G模块发送的,抓包确认的数据有异常,我试了直接把字符串赋值给另一个变量,和参数传给另一个变量,都会出现问题
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-1-13 14:04:53 | 显示全部楼层
没代码不好说
专治疑难杂症
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2020-8-19
在线时间
335 小时
发表于 2022-1-13 14:32:25 | 显示全部楼层
你可以直接在串口里面打印出来看看是否有问题
回复

使用道具 举报

21

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-5-7
在线时间
80 小时
 楼主| 发表于 2022-1-13 14:40:13 | 显示全部楼层
bin133 发表于 2022-1-13 14:32
你可以直接在串口里面打印出来看看是否有问题

这个比较奇怪就是,三个板子跑这个代码,只有一个板子时不时出错,一样的代码
回复

使用道具 举报

7

主题

70

帖子

0

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2020-6-24
在线时间
241 小时
发表于 2022-1-13 15:40:24 | 显示全部楼层
撑好 发表于 2022-1-13 14:40
这个比较奇怪就是,三个板子跑这个代码,只有一个板子时不时出错,一样的代码

这种情况软件没问题,硬件出问题了,可能是串口相关引脚接触不良
回复

使用道具 举报

21

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-5-7
在线时间
80 小时
 楼主| 发表于 2022-1-13 15:59:55 | 显示全部楼层
qq1198228505 发表于 2022-1-13 15:40
这种情况软件没问题,硬件出问题了,可能是串口相关引脚接触不良

但是奇怪的是,每个时间发了三次数据,其他的发送没有出错,只有这个字符串出错,而且每次只错后面两个字符
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-1-13 16:19:50 | 显示全部楼层
检查程序中其它地方对数组的操作有没有越界,比如:
char str1[10] = "abc";
char str[10] = "wt31";

str1[12]=5;//越界
str1[13]=6;
就有可能改变str的内容.
专治疑难杂症
回复

使用道具 举报

21

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-5-7
在线时间
80 小时
 楼主| 发表于 2022-1-13 16:29:21 | 显示全部楼层
本帖最后由 撑好 于 2022-1-13 16:32 编辑
LcwSwust 发表于 2022-1-13 16:19
检查程序中其它地方对数组的操作有没有越界,比如:
char str1[10] = "abc";
char str[10] = "wt31";

如果出现越界的话,str这个数组里面的值就不会是“wt31”了吧?但是我这个好像出错之后,又能变成正确的值,其他并没有赋值成“wt31”的语句,只有第一次初始化的时候哦,还有一点,比如这次变成 "wtab"那么后面的每次出错都是变成这个值(不断电的情况下),但是断电之后,就会变成其他的了
回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1013
金钱
1013
注册时间
2014-4-7
在线时间
98 小时
发表于 2022-1-14 09:43:02 | 显示全部楼层
1. 从现象中看全局的字符串的内容没有改变
2. Debug最终发送的接口,发送错误时的那个字符的地址,错误时地址肯定不是全局字符串里的地址。
3. 查看这个地址为什么改变了
在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

21

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-5-7
在线时间
80 小时
 楼主| 发表于 2022-1-14 14:21:47 | 显示全部楼层
亲亻尔嘴 发表于 2022-1-14 09:43
1. 从现象中看全局的字符串的内容没有改变
2. Debug最终发送的接口,发送错误时的那个字符的地址,错误时 ...

好的,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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