Hallo White_Fox, ersteinmal Danke für die Rückmeldung, ich hab das grade mal probiert.
const LED_COUNT = 4; // hier meckert der Compiler mit einem Warning, das wäre ja nicht so schlimm
const int LED_COUNT = 4; // so ist der Warning weg. Aber es ist jetzt quasi eine initialisierte Variable.
TLed LedArray[LED_COUNT]; // damit ist dieses Konstrukt nicht mehr gültig. "variable length array not supported"
Eine Konstante muss ja irgendwie im Speicher abgelegt werden.
Das kann der Compiler vermutlich selbst enscheiden ob er das im RAM oder im Codebereich macht ??
Wenn ich const benutze habe ich anscheinend immer eine "Instanz" im RAM und benötige Speicherplatz,
deshalb meckert der Compiler auch wenn ich die Typangabe weglasse, da er nicht weis wieviel Speicher er benötigt,
somit reserviert er einen "int".
Wie dem auch sei, ein Array benötigt einen "festen" Wert für die Größenangabe.
Dieser feste Wert kann anscheinend nur eine Zahl bzw. ein #define sein ? (meine Vermutung)
Ein #define kennt dann aber der Assembler nicht mehr, wie Du schon schriebst, ist das für den Preprozessor.
Ich weis nicht ob man das irgendwie "übergreifend" declarieren kann.
- - - Aktualisiert - - -
--------------------------------------------
Guten Morgen, es hat mir keine Ruhe gelassen
Ich habe das Problem jetzt so gelöst:
Es gibt eine Variable in der die Grösse des Led Arrays gespeichert wird.
Diese wird vom Compiler selbst eingetragen
Code:
typedef struct
{
U8 green;
U8 red;
U8 blue;
} TLed;
#define LED_COUNT 4 // Anzahl der anzusteuernden RGB Leds
TLed LedArray[LED_COUNT]; // gesamtes Datenarray der Ledkette
// hier NEU: damit ich mit dem Assembler auf die Anazahl Bytes im LedArray zugreifen kann.
unsigned char ArraySize = sizeof(LedArray); // die Groesse des Arrays in Bytes
Auf diese Weise kann ich nun mit
asm("movf _ArraySize,W");
auf die Anzahl der Bytes des LedArrays zugreifen.
Nun brauche ich nur noch an einer Stelle, nämlich den Wert LED_COUNT ändern und die Assemblerfunktion macht es dann auch gleich richtig.
Lesezeichen