hk007
August 17, 2015, 3:02pm
1
Hi
heut steh ich wieder vor einem Problem.
Ich habe eine Software geschrieben, bei der ich die Länge eines char-arrays nicht fest, sondern über eine Variable definieren will.
Erst habe ich den Code nur in der loop() entwickelt:
uint32 start = 0x6b000;
const uint32 buflen = 0x300;
char buf[buflen] = {0};
Hat so weit geklappt.
Nun wollte ich den code in ein Unterprogramm verfrachten.
void flashdump (uint32 start, const uint32 buflen)
{
char buf[buflen] = {0};
..
}
Aber da mault jetzt der Compiler.
--> error: variable-sized object 'buf' may not be initialized
Und da bin ich wieder an der Grenze meiner C-Kenntnisse.
Kann mir da jemand weiterhelfen?
Übergib direkt den buf, und buflen.
void flashdump (uint32_t start, byte* buf, uint16_t buflen);
const uint16_t buflen = 0x300;
byte buf[buflen];
void setup() {
uint32_t start = 0x6b000UL;
flashdump(start, buf, buflen); // hast du so großen Speicher ?
}
bei der ich die Länge eines char-arrays nicht fest, sondern über eine Variable definieren will.
Die Länge des Arrays ist fest, und das ist gut so
Die Größe von statischen Arrays muss zur Compile-Zeit feststehen. Daher kannst du keine Arrays variabler Größe innerhalb von Funktionen erzeugen.
Schau dir mal die C Standard String Funktionen an. Die haben immer einen Parameter für das Array.
combie
August 17, 2015, 3:22pm
4
Man könnte auch ein Funktionstemplate basteln.
Macht evtl bei wenigen verschiedenen und konstanten buflen Sinn.
hk007
August 17, 2015, 3:49pm
5
@all ,
danke für die Infos. Habt mir gezeigt, wie es geht, und dass ich eh den falschen Denkansatz habe.
Es macht keinen Sinn den Buffer für den gesamten Bereich zu definieren, sondern den Buffer kleiner und fest definiert. Dafür x-mal verwenden, bis ich am Ende des Speicherdumps bin.
Thx nochmal