首页 > 解决方案 > Arduino 不以高值运行

问题描述

我有下面的代码(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() {

}

标签: carduinoarduino-unoarduino-ide

解决方案


您的代码只需要大量 RAM。

Arduino Uno(带有 ATmega328P µC)只有 2048 字节 SRAM。

如果您保留 2000 字节的行

#define MAX 2000
char ehprimo[MAX];

没有足够的堆栈和 Arduino 框架。

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


推荐阅读