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