C 在函数内部创建数组并在外部使用

C 在函数内部创建数组并在外部使用,c,embedded,i2c,C,Embedded,I2c,我在做一个项目,我使用微控制器的I2C接口。 开始时,我想扫描I2C总线上的传感器,因为我不知道有多少传感器连接在一起(不同的地址) 根据找到的设备的地址,我想创建一个具有设备特定参数的结构 是否可以在扫描函数之外使用结构? 或者有没有更好的方法在运行时解决这个问题,比如创建一个全局数组并添加一个boolfound 我想要一些像: struct sensorA sensorA[]; struct sensorB sensorB[]; for (int i = 0; i < 127; i

我在做一个项目,我使用微控制器的I2C接口。 开始时,我想扫描I2C总线上的传感器,因为我不知道有多少传感器连接在一起(不同的地址)

根据找到的设备的地址,我想创建一个具有设备特定参数的结构

是否可以在扫描函数之外使用结构? 或者有没有更好的方法在运行时解决这个问题,比如创建一个全局数组并添加一个
boolfound

我想要一些像:

struct sensorA sensorA[];
struct sensorB sensorB[];


for (int i = 0; i < 127; i++){
  err_code = send_i2c_dummy(address);
  if (err_code == 0) { ​//found device
   ​ switch(address){
      case 0x10:
        // append element to array sensorA;
        break;
      case 0x11:
        // append element to array sensorA;
        break;
      case 0x66:
        // append element to array sensorB;
        break;
      case 0x67:
        // append element to array sensorB;
        break;
      default: 
        printf("found unknown device\n");
        break;
    }
  }
}
struct sensorA sensorA[];
结构传感器B传感器B[];
对于(int i=0;i<127;i++){
错误代码=发送i2c虚拟(地址);
如果(错误代码==0){​//发现装置
​ 交换机(地址){
案例0x10:
//将元素附加到阵列传感器A;
打破
案例0x11:
//将元素附加到阵列传感器A;
打破
案例0x66:
//将元素附加到阵列传感器B;
打破
案例0x67:
//将元素附加到阵列传感器B;
打破
违约:
printf(“找到未知设备\n”);
打破
}
}
}
可以这样做吗:


uint32_t create_SensorA_array(){

  uint8_t i;
  i = get_number_of_sensorA()
  struct sensorA array[i] = malloc(i * sizeof(struct sensorA));

  return array;
}


uint8_t get_number_of_sensorA(){
  uint8_t number = 0;

  uint8_t addresses[4]= {0x10,0x11,0x12,0x13};
  for(i = 0; i <= 4; i++){
    err_code = send_i2c_dummy(address);
    if (err_code == 0) {
      number++;
    }
  }

  return number;
}


uint32\u t创建传感器阵列(){
uint8_t i;
i=获取传感器A()的编号
struct sensorA数组[i]=malloc(i*sizeof(struct sensorA));
返回数组;
}
uint8无法获取传感器A()的编号{
uint8_t编号=0;
uint8_t地址[4]={0x10,0x11,0x12,0x13};

对于(i=0;i这不是设计低级别嵌入式系统的方式。在运行时不会“创建”任何内容,而是在编译时确定允许出现哪些场景。
malloc
从未使用过,因为在单核微控制器系统中使用它没有任何意义

在这种情况下,听起来您只需要一个固定数量的静态分配数据集,对应于您的程序支持的最大数量的“传感器”。再加上标记“此传感器存在”、bool标记、大小计数器等的方法


您不能有无限的数量-您需要在设计阶段的早期指定支持的最大数量,然后根据规格选择合适的微控制器。

sensorA[]sensorA;sensorB[]sensorB;
它不是C语言。我不理解你的担心。你没有从函数返回任何指针。从
malloc
获取的动态内存在函数退出后仍然有效。所以只需返回它。你真的尝试过吗?你有没有遇到具体问题?没有,我还没有尝试过。我只是想知道,这是否有效做这件事的正确方法。@0\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu