You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实例,两边操作的根本不是同一个变量。

修复步骤

  1. 修正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)
  1. 删除if(signal == Temperature_Signal);末尾的分号,修正为:
if(signal == Temperature_Signal)
  1. 修正头文件全局变量的定义方式:
  • 把.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:09:03