Arduino 没有 运行 高值

Arduino does not run with high values

我有下面的代码 (cod01),我需要将其转换为 Arduino (cod02) 的代码。它涉及 Eratosthenes Sieve 算法(从上限寻找素数)。 cod01 工作完美,并且已经用高于 1000000 的值进行了测试并且始终运行。我将它转换为 Arduino,但它只能工作到 1768 年。我需要它工作到 2000 年,有人可以帮助我吗?

//cod01
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define MAX 7
 
int main(){
  int i,j;
  int limite;
  char ehprimo[MAX];
  int cont=0;

  for(i=2;i<MAX;i++) ehprimo[i]=1;
  limite = (int)sqrt(MAX);
  for(i=2;i<=limite;i++){
    if(ehprimo[i]){
      for(j=i*i;j<MAX;j=j+i)
        ehprimo[j] = 0;
    }
  }

  for(i=2;i<MAX;i++){
    if(ehprimo[i]){
      printf("%d\t",i);
    }
  }
return 0;
}

.

//cod02
#define MAX 2000
  
  int i,j;
  int limite;
  char ehprimo[MAX];
  int cont=0;

void setup() {

  Serial.begin(9600);
  
  for(i=2;i<MAX;i++) ehprimo[i]=1;
  limite = (int)sqrt(MAX);
  for(i=2;i<=limite;i++){
    if(ehprimo[i]){
      for(j=i*i;j<MAX;j=j+i)
        ehprimo[j] = 0;
    }
  }

   for(i=2;i<MAX;i++){
    if(ehprimo[i]){
      Serial.print("\t");
      Serial.print(i);
    }
  }
  
}

void loop() {

}

您的代码只需要大量 RAM。

A​​rduino Uno(带有 ATmega328P µC)只有 2048 字节 SRAM。

如果您使用以下行预留 2000 字节

#define MAX 2000
char ehprimo[MAX];

堆栈和 Arduino 框架所剩无几。

您必须减少内存消耗或选择具有更多 SRAM 的 µC。