硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1139|回复: 18
收起左侧

[有问必答] STM32F4宏定义被异常修改?怪现象请教

[复制链接]

14

主题

207

回帖

254

积分

高级会员

积分
254
发表于 2022-9-26 18:03:47 | 显示全部楼层 |阅读模式
平台:STM32F407
现象:宏定义  #define PC_SIG_PROGRAM_VERSION                "MyProgram_20220926_V10"
         将PC_SIG_PROGRAM_VERSION宏定义初始化给结构体中变量uint8_t  ProgramVersion[40];即     Sig.ProgramVersion = PC_SIG_PROGRAM_VERSION,
         打印结构体中ProgramVersion变量,其第21字节即ProgramVersion[20]会显示异常,为原有值+1,比如上述1会变成2,若写1的位置换成S,则打印出来是T,仿真也是这样。
         不通过宏定义,直接将"MyProgram_20220926_V10"初始化给结构体中变量uint8_t  ProgramVersion[40];即    Sig.ProgramVersion = "MyProgram_20220926_V10",  则打印出来正常。
         可以确定程序中其他位置未对ProgramVersion变量进行操作。
问题:会是哪里影响到的?是否有排查思路?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2022-9-26 18:34:17 | 显示全部楼层
这个直接定义个指针变量就行,这种宏定义本身"MyProgram_20220926_V10"已经占用了Flash空间,使用更方便。
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-9-27 08:39:59 | 显示全部楼层
eric2013 发表于 2022-9-26 18:34
这个直接定义个指针变量就行,这种宏定义本身"MyProgram_20220926_V10"已经占用了Flash空间,使用更方便。

本想宏定义代码更方便查看,现在看来不能用了。
但这种情况想不明白,怎么会被异常修改,并且是规律的异常被修改。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2022-9-27 13:24:48 | 显示全部楼层
龙之谷 发表于 2022-9-27 08:39
本想宏定义代码更方便查看,现在看来不能用了。
但这种情况想不明白,怎么会被异常修改,并且是规律的异 ...

是不是别的地方访问溢出了,很大概率。
回复

使用道具 举报

78

主题

693

回帖

927

积分

金牌会员

积分
927
发表于 2022-9-27 15:47:21 | 显示全部楼层
不是平台的原因,是编译器的原因。使能C99试试。
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-9-27 16:09:42 | 显示全部楼层
eric2013 发表于 2022-9-27 13:24
是不是别的地方访问溢出了,很大概率。

不使用宏定义就正常,访问溢出有可能出现这种情况吗
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-9-27 16:11:20 | 显示全部楼层
庄永 发表于 2022-9-27 15:47
不是平台的原因,是编译器的原因。使能C99试试。

查了下,C99 Mode一直是勾选的
回复

使用道具 举报

78

主题

693

回帖

927

积分

金牌会员

积分
927
发表于 2022-9-27 16:48:08 | 显示全部楼层
龙之谷 发表于 2022-9-27 16:11
查了下,C99 Mode一直是勾选的

什么编译器,我试试
回复

使用道具 举报

6

主题

641

回帖

659

积分

金牌会员

积分
659
QQ
发表于 2022-9-28 07:57:44 | 显示全部楼层
试了一下,没有楼主的问题,应该还是楼主工程其它部分代码影响了
回复

使用道具 举报

610

主题

3063

回帖

4913

积分

至尊会员

积分
4913
发表于 2022-9-28 08:53:28 | 显示全部楼层
你可以吧 #define PC_SIG_PROGRAM_VERSION                "MyProgram_20220926_V10"  

改成 #define PC_SIG_PROGRAM_VERSION                "MyProgram_20220926_V10\0"  试试看

回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-10-4 18:37:37 | 显示全部楼层
庄永 发表于 2022-9-27 16:48
什么编译器,我试试

最近比较忙,没登录论坛
使用MDK uVision V5.26.2.0
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-10-4 18:38:16 | 显示全部楼层
yklstudent 发表于 2022-9-28 07:57
试了一下,没有楼主的问题,应该还是楼主工程其它部分代码影响了

过一阵有时间了我再排查下
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-10-4 18:40:24 | 显示全部楼层
hpdell 发表于 2022-9-28 08:53
你可以吧 #define PC_SIG_PROGRAM_VERSION                "MyProgram_20220926_V10"  

改成 #define PC ...

过几天排查这个问题时我试试
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-11-8 10:34:57 | 显示全部楼层
问题已解决:数组越界导致,开发过程中,配套模块协议数组扩大了,我这边.c程序仅在程序中对应处理,未在.h结构体定义处扩大数组空间,之所以前面反应直接赋值不出现问题可能是直接赋值测试少或出现概率低,后期发现也出错了。
感谢各位帮助,工作比较忙,一直想回复,总是没时间。
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-11-8 10:35:37 | 显示全部楼层
eric2013 发表于 2022-9-26 18:34
这个直接定义个指针变量就行,这种宏定义本身"MyProgram_20220926_V10"已经占用了Flash空间,使用更方便。

已解决,见14楼,感谢
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-11-8 10:35:50 | 显示全部楼层
庄永 发表于 2022-9-27 15:47
不是平台的原因,是编译器的原因。使能C99试试。

已解决,见14楼,感谢
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-11-8 10:36:04 | 显示全部楼层
yklstudent 发表于 2022-9-28 07:57
试了一下,没有楼主的问题,应该还是楼主工程其它部分代码影响了

已解决,见14楼,感谢
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
 楼主| 发表于 2022-11-8 10:36:14 | 显示全部楼层
hpdell 发表于 2022-9-28 08:53
你可以吧 #define PC_SIG_PROGRAM_VERSION                "MyProgram_20220926_V10"  

改成 #define PC ...

已解决,见14楼,感谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2022-11-8 10:42:52 | 显示全部楼层
龙之谷 发表于 2022-11-8 10:34
问题已解决:数组越界导致,开发过程中,配套模块协议数组扩大了,我这边.c程序仅在程序中对应处理,未在.h ...

回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 01:46 , Processed in 0.307625 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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