2016-07-21 12 views
1

Derzeit arbeite ich mit Arduino Nano. Wenn ich meinen c Code in Arduino IDE kompiliere, habe ich unten Fehler.Arduino nano: Speicherstabilitätsproblem

enter image description here

Programm Upload erfolgreich und arbeitet gut, dann, was ist der Grund für diesen Fehler? Beeinflusst es wirklich die Leistung von arduino nano?

+0

Der Compiler kann nicht wissen, welche lokalen Variablen, Funktionsparameter und Rückgabeadressen auf dem Stack zur Laufzeit benötigt werden. Diese werden ohne Gnade mit globalen Variablen interferieren, wenn der Platz nicht ausreicht. Produzieren völlig unvorhersehbare Ergebnisse. – datafiddler

+0

das ist eine Warnung über die "Wahrscheinlichkeit", nicht genügend Speicherplatz (meist nicht genug Stack-Speicherplatz) für das Programm ordnungsgemäß zu haben, können Sie erheblich helfen, das Programm ordnungsgemäß durch Erstellen einer Software-Architektur, die sehr breit ist, statt sehr tief. – user3629249

Antwort

0

Beeinflusst es wirklich die Leistung von arduino nano?

Ich habe auch die gleichen Fehler während Kompilieren seine Warnung wie Sie gesagt ur Hochladen, erfolgreich getan Wenn das Hochladen dann erfolgreich getan gibt es keine Performance-Problem. Wenn Sie diesen Fehler löschen möchten, müssen Sie reduzieren einige Speicherauslastung Ihres Codes, nur Optimieren Sie Ihren Code, verwenden Sie lokale Variablen so viel wie möglich. Wenn Sie Konstanten haben, verwenden Sie stattdessen #define, Gruppenwiederholungsaufrufe in eine Funktion.

+0

Normalerweise entfernt das ** F ** - Makro den größten Teil unnötigen RAM-Schadens. ** Serial.println (F ("jeder konstante Text kann aus dem wertvollen RAM herausgehalten werden")); ** – datafiddler

+1

Nicht zu vergessen String-Objekte, die mehr Platz benötigen und dynamischen Speicher verwenden, wodurch zwei Gründe für Instabilität kombiniert werden. – datafiddler

+1

> _wenn Sie Konstanten haben, verwenden Sie stattdessen #define_ ... oder verwenden Sie das Schlüsselwort ** const **. Ähnlicher Optimierungseffekt, aber ** const ** bewahrt Datentypinformationen. – datafiddler

2

Diese Warnung tritt auf, weil der Compiler nicht weiß, wie viel dynamischer Speicher von Ihrem Programm zugewiesen werden sollte. Bitte schauen Sie sich Ihr Programm bei Dynamische Zuordnung, Lokale Variablenzuordnung ... an

Beeinflusst es wirklich die Leistung von arduino nano?

Wie gesagt "Stabilitätsprobleme können auftreten". Ich war in der Vergangenheit damit konfrontiert und das Projekt lief irgendwann mit Verzögerung ab.

1
int freeRam() { 
    extern int __heap_start, *__brkval; 
    int v; 
    return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
} 

rufen Sie diese Funktion z.

 Serial.println(freeRam());
auf der tiefsten Ebene Ihrer Funktionen oder wo auch immer Sie wollen.

Und verwenden Sie nicht malloc() oder C++ new, um "Stabilitätsprobleme" zu vermeiden, da es keine Ausnahmebehandlung oder andere Fehlerprüfung bei der dynamischen Speicherzuweisung gibt.