数组过大导致无法输出,请问各位老师有什么好的建议-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 520|回复: 9

[未解决] 数组过大导致无法输出,请问各位老师有什么好的建议

[复制链接]
发表于 2022-5-21 19:23 | 显示全部楼层 |阅读模式
  我的目的是用max9814芯片采集音频信息,但是对采样率有较大的要求,所以采用数组的方式存储每次的读取值,最后统一输出。  

  但是在输出的过程中,我发现在数组小于200时可以输出,但在数组大于200时,串口就会什么也不输出,请问各位老师这个问题要如何解决?
代码如下:(其中时间信息是要每一次输出的时间值,便于计算)
  1. #ifndef cbi
  2. #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
  3. #endif
  4. #ifndef sbi
  5. #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
  6. #endif
  7. // the setup routine runs once when you press reset:
  8. int n=0;
  9. unsigned long myTime;
  10. void setup() {
  11.   // initialize serial communication at 9600 bits per second:
  12.   Serial.begin(9600);
  13.   analogReference(INTERNAL); //调用板载1.1V基准源

  14. // set prescale to 16
  15. sbi(ADCSRA,ADPS2) ;
  16. cbi(ADCSRA,ADPS1) ;
  17. cbi(ADCSRA,ADPS0) ;  
  18. }


  19. void loop() {
  20.   int i;
  21.   float voltage;
  22.   int a[1000];
  23. // int b[500];
  24.   int r;
  25.   unsigned long elsp=millis();
  26.   for (i=0;i<1000;i++)
  27.     {
  28.       // read the input on analog pin 0:
  29.       myTime = millis();
  30.       r = analogRead(A0);
  31.       a[i]=r;
  32.       //b[i]=myTime;
  33.     }
  34.    for (i=0;i<1000;i++){ // initialize elements of array n to 0
  35.       //Serial.print (b[i]) ;
  36.       //Serial.print(',');
  37.       Serial.println(a[i]) ;}
  38.   delay(10000);
  39. }
复制代码


发表于 2022-5-21 19:51 | 显示全部楼层
用的啥芯片?  16位AD?
 楼主| 发表于 2022-5-21 20:00 | 显示全部楼层
Highnose 发表于 2022-5-21 19:51
用的啥芯片?  16位AD?

芯片是max9814麦克风放大模块 是16位AC
发表于 2022-5-22 01:52 | 显示全部楼层
你把数组声明放到外面,上传时就会发现内存不够,UNO大概 900 可以成功上传,然后已经不能正常工作。
屏幕截图 2022-05-22 014858.png

发表于 2022-5-22 10:48 | 显示全部楼层
一个int 4个字节, 超界了吧
发表于 2022-5-22 13:03 | 显示全部楼层
UNO 只有 2KB 的内存(SRAM),换算到 16bit 的 int 也就 1024 个,太大了就溢出。

非要用大内存,可以换 MEGA(8KB)、F103(20KB)或者8266 (80KB)


 楼主| 发表于 2022-5-22 14:55 | 显示全部楼层
kpj001 发表于 2022-5-22 01:52
你把数组声明放到外面,上传时就会发现内存不够,UNO大概 900 可以成功上传,然后已经不能正常工作。

好的 谢谢您
发表于 2022-5-22 15:40 | 显示全部楼层
来个ESP32搭配IIS或者DMA,或者换芯片用ESP8266的IIS
 楼主| 发表于 2022-5-22 15:46 | 显示全部楼层
XlinliY.Zhang 发表于 2022-5-22 15:40
来个ESP32搭配IIS或者DMA,或者换芯片用ESP8266的IIS

我计算了一下,理论上我需要五个通道,每个通道均需要十万以上个数据.......所以可能换芯片也解决不了,也许我可能需要弃用数组这个方式了
发表于 2022-5-22 19:42 | 显示全部楼层
渊右语 发表于 2022-5-22 15:46
我计算了一下,理论上我需要五个通道,每个通道均需要十万以上个数据.......所以可能换芯片也解决不了, ...

IIS多麦克风不就行了,上个NXP或者STM都有这能力,实在不行K210、K510、FPGA也行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2025-1-1 19:59 , Processed in 0.084565 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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