STM32 Arduino开发运行时向2D数组存值失效问题排查
代码问题及修复方案
核心问题列表
- 参数传递方式错误(最主要原因)
你当前HatriX_Signal函数的第三个参数是uint32_t Page,属于值传递,函数内部修改的是该参数的局部临时副本,完全不会影响到全局Page数组的真实值,修改后的值在函数执行完毕就会直接销毁。 - if判断语法错误
if(signal == Temperature_Signal);这行末尾多了一个分号,直接导致if判断失效,不管传入的信号类型是不是温度信号,后面大括号里的代码都会无条件执行。 - 头文件static全局变量定义错误
你在.h头文件里定义了static uint32_t Page[xxx][xxx]和static Thermo_Couple_Input TC_IN;,static修饰的全局变量作用域仅限当前编译单元,这会导致.ino和.cpp两个文件各持有一份独立的Page数组、TC_IN实例,两边操作的根本不是同一个变量。
修复步骤
- 修正
HatriX_Signal函数的参数定义,改为引用传递,这样函数内部的修改会同步到外部变量:
.h文件修改函数声明为:
void HatriX_Signal(uint8_t Signal, uint8_t I2C_Address, uint32_t &Page);
.cpp文件的函数实现同步修改:
void HATRIX::HatriX_Signal(uint8_t signal, uint8_t I2C_Address, uint32_t &Page)
- 删除
if(signal == Temperature_Signal);末尾的分号,修正为:
if(signal == Temperature_Signal)
- 修正头文件全局变量的定义方式:
- 把.h文件里的static变量声明改为
extern:
extern Thermo_Couple_Input TC_IN; extern uint32_t Page[Number_of_Pages][(Number_of_Bytes_Per_Page / 4) - 2];
- 在.cpp文件的全局位置添加变量的真实定义:
Thermo_Couple_Input TC_IN; uint32_t Page[Number_of_Pages][(Number_of_Bytes_Per_Page / 4) - 2];
内容的提问来源于stack exchange,提问作者mustaq_ahm
相关产品推荐
相关产品推荐

