Forum: Compiler & IDEs Pointer / Array


von Benjamin K. (benjaminklimmek)


Lesenswert?

Hallo Zusammen,

ich stehe gerade vor einem kleinen Problem, aber ich hoffe ja das Ihr 
mir mal wieder eine Hilfestellung geben könnt.

Ich habe mir einen Quellcode angesehen und bin der Meinung das in diesem 
Quellcode ein BUG sitzt. Aber Vielleicht belehrt Ihr mich ja eines 
besseren.

Also jemand hat das so geschrieben:
1
rom char* ASCII1 = {0x00 , 0x00 , 0x00 , 0x00 , 0x00,  // space // 32  - 43
2
        0x00 , 0x06 , 0x5F , 0x06 , 0x00,       // !
3
        0x07 , 0x03 , 0x00 , 0x07 , 0x03,       // ''
4
        0x24 , 0x7E , 0x24 , 0x7E , 0x24,       // #
5
        0x24 , 0x2B , 0x6A , 0x12 , 0x00,       // $
6
        0x63 , 0x13 , 0x08 , 0x64 , 0x63,       // %
7
        0x36 , 0x49 , 0x56 , 0x20 , 0x50,       // &
8
        0x00 , 0x07 , 0x03 , 0x00 , 0x00,       // '
9
                     0x00 , 0x3E , 0x41 , 0x00 , 0x00,       // (
10
        0x00 , 0x41 , 0x3E , 0x00 , 0x00,       // )
11
              0x08 , 0x3E , 0x1C , 0x3E , 0x08,       // *
12
        0x08 , 0x08 , 0x3E , 0x08 , 0x08};      // +

Ich bin der Meinung das ich keinen Pointer direkt auf ein Array legen 
kann. Vielleicht habe ich ja unrecht, aber dann erklärt mir doch mal 
bitte wieso der Programmierer dort nicht die Feldgröße definiert hat und 
wie der Pointer weiß das er das Ende erreicht hat!?

Ich habe den Pionter mal Probehalber von AVRstudio kompilieren lassen 
und tausende Fehlermeldungen bekommen!? Stehe gerade auf dem 
Schlauch.... Ich meine klar den Befehl "rom" habe ich weggelassen... den 
kennt der compiler nicht, aber den Rest müsste er doch kennen!

Danke schon mal vorab!!

Gruß
Benjamin

von Karl H. (kbuchegg)


Lesenswert?

Benjamin Klimmek wrote:

> Ich bin der Meinung das ich keinen Pointer direkt auf ein Array legen
> kann. Vielleicht habe ich ja unrecht, aber dann erklärt mir doch mal
> bitte wieso der Programmierer dort nicht die Feldgröße definiert hat und
> wie der Pointer weiß das er das Ende erreicht hat!?
>

Weil der Compiler viel zuverlässiger und fehlerfreier die
Anzahl der Initialisierungen abzählen kann, als es der Programmierer
macht.

> Ich meine klar den Befehl "rom"

Ich schätze mal, dass genau dieses "rom" den Unterschied ausmacht.
Bei solchen Sachen gibt es immer irgendwelche compilerspezifischen
Erweiterungen.

Im WinAvr müsste es, wie du richtig vermutest mit einem
Array und PROGMEM realisiert werden.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.