Hallo zusammen,
ich hab' irgendwie ein Problem mit dem Compiler der IAR Embedded
Workbench für den MSP430. Folgender Code:
1 | if (P1IN & 0x10 && ~P1Old & 0x10) {
|
2 | SD_Init();
|
3 |
|
4 | U08 Buf[128];
|
5 | for (int i = 0; i < 128; i++) {
|
6 | Buf[i] = 0;
|
7 | }
|
8 |
|
9 | SD_Read_Block(0x00000001, Buf);
|
10 | U16 bla = 0;
|
11 | }
|
Damit wird erstmal meine SD-Karte initialisiert und dann 128 Byte
Speicher für meinen Block reserviert. Nun wird der Speicher aber
bereits vor dem Aufruf von SD_Init() reserviert (Ist ja auch richtig
so). Soweit kein Problem, nur: Warum um alles in der Welt will der da
das komplette Array auf den Stack schmeissen? Der Speicher sollte ja
eigentlich reserviert sein, also was macht es für einen Sinn, denn
kompletten Inhalt so nebenbei nochmal zwischenzuspeichern? Mal davon
abgesehen, dass der Stack damit natürlich gleich übervoll ist.
Eigentlich sollte er da den Speicher reservieren, SD_Init() aufrufen
(Dabei wird das Array nirgenwo verändert, wird ja auch net übergeben)
und dann das Array an SD_Read_Block() übergeben, wo es gefüllt wird.
Nur will das ganze Zeug nicht so wie ich will...
Zusammenfassung:
Wie kriege ich es hin, dass ein deklariertes Array bei einem
Funktionsaufruf nicht auf den Stack geschmissen wird?
Danke schonmal im Voraus für Antworten!
PS: Ich weiss, ich hab' C nicht wirklich im Griff, kann also gut sein,
dass ich da einfach einen Denkfehler drin habe.