ich eine ausführbare Datei für ein Embedded-Gerät (ein STM32) in C. schreibe funktioniert Nach einigen Debuggen, ich habe es auf diese Funktion reduziert:verderbte Argumente
char * parse(char * start)
{
int i = 0;
char command[20];
print(start);
}
Aus irgendeinem Grunde, wenn ich rufe Mit dieser Funktion ist das Argument start
fehlerhaft. Jetzt kann ich es arbeiten, wenn ich die command
Initialisierung auf Kommentar:
char * parse(char * start)
{
int i = 0;
// char command[20];
print(start);
}
Mit command
kommentierte heraus, es funktioniert gut. Ich dachte mir, dass mir vielleicht der Arbeitsspeicher ausgehen würde. Aber das Programm ist winzig, und nach dem Überprüfen des Stack-Pointer-Registers kann ich bestätigen, dass ich noch viel RAM-Speicher übrig habe.
Was könnte hier schiefgehen? Ein gebrochener Compiler? (Ich verwende eine neu kompilierte Version von GCC für den ARM namens Yagarto.)
Was macht 'print()'? Ich vermute, dass Ihr Bug stattdessen darin enthalten sein könnte (oder es wird gefüttert Eingabe kann es nicht behandeln). – pmdj
'print' druckt nur die Zeichenfolge, die bei' start' beginnt. Aber das ist irrelevant. GDB zeigt mir, dass "Start" in beiden Fällen einen anderen Wert hat, wenn ich einen Breakpoint setze. – Randomblue
Was genau GCC-Version und Compiler/Linker Flags verwenden Sie? –