问题描述
我有下面的代码(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。
Arduino Uno(带有ATmega328P µC)仅具有2048字节SRAM。
如果您在行中保留2000字节
#define MAX 2000
char ehprimo[MAX];
堆栈和Arduino框架所剩无几。
您必须减少内存消耗或选择具有更多SRAM的µC。