Hallo! Ich definiere folgende arrays mit 256 werten: typedef struct PWM_ { unsigned char r[256]; unsigned char g[256]; unsigned char b[256]; } PWM; PWM pwm_conf[2] = { { { 255,254,253,252,251,250,249,248,247,...,0 }, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 }, { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0} }, { { 255,254,253,252,251,250,249,248,247,....0 }, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 }, { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0} } }; Wenn ich nun im main program per UART (baud 9600, datenbits 8, paritaet keine, stoppbits 1) zB pwm_conf[1].r[2] ausgebe, bekomme ich richtigerweise 253 zurueckgeliefert. Wenn ich nun aber zu pwm_conf weitere 2 arrays hinzufuege, kommt auf der uart nur mehr schrott raus - zB ü2ü2ü2ü2ü2ü2 array schaut zB so aus: PWM pwm_conf[4] = { { { 255,254,253,252,251,250,249,248,247,...,0 }, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 }, { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0} }, { { 255,254,253,252,251,250,249,248,247,....0 }, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 }, { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0} }, { { 255,254,253,252,251,250,249,248,247,....0 }, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 }, { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0} }, { { 255,254,253,252,251,250,249,248,247,....0 }, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 }, { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0} } }; Kann mir vielleicht jemand weiterhelfen, warum dies so ist? Vielen Dank, Thomas
typedef struct PWM_ { unsigned char r[256]; unsigned char g[256]; unsigned char b[256]; } PWM; PWM pwm_conf[4] = { 768 x 4 ist nun mal mehr als 2kB RAM.
Ahhh, das leuchtet ein -danke fuer die schnelle Antwort! Ich werde wahrs. sonst keine möglichkeit haben die Werte am uC zu speichern? EEPROM ist auch zu klein. Jetzt habe ich nur noch die moeglichkeit einen anderen uC zu nehmen bzw die Daten extern einzulesen (zB Flash datenspeicher). Oder gibt es noch was anderes?
Tom Eichw schrieb:
> Oder gibt es noch was anderes?
Was ist mit dem internen Fash? Oder sollte das etwa durch den
Programm-Code schon voll sein?
> Was ist mit dem internen Fash? Oder sollte das etwa durch den > Programm-Code schon voll sein? Das enthält jetzt schon die ganze Initialisierung (die Daten müssen ja irgendwie ins Ram kommen), kann also nicht voll sein. Wenn man die Ram-Zugriffe aufs Flash verlegt, ändert sich an der Flashgröße fast nichts und das Ram wird frei.
Hallo Tom, musst du die Werte eigendlich in einem Array ablegen ? Wenn die Werte diese sind die du im Beispiel angegeben hast, dann empfehle ich dir die Werte im Controller zu berechnen. Grüße !
Patrick De zordo schrieb: > Hallo Tom, > musst du die Werte eigendlich in einem Array ablegen ? > > Wenn die Werte diese sind die du im Beispiel angegeben hast, > dann empfehle ich dir die Werte im Controller zu berechnen. > > Grüße ! Die Werte schauen anders aus, sind leider nicht 1,2,3..usw. Die Werte werden mit Matlab berechnet um RGB leds anzusteuern. Die formel dazu kenne ich noch nicht, macht ein Freund. Aber vielleicht kann ich sie im uC nachbilden.
Hazeh Zimmerer schrieb: >> Was ist mit dem internen Fash? Oder sollte das etwa durch den >> Programm-Code schon voll sein? > > Das enthält jetzt schon die ganze Initialisierung (die Daten müssen ja > irgendwie ins Ram kommen), kann also nicht voll sein. Der flashspeicher liegt nur bei ~6kb. > Wenn man die > Ram-Zugriffe aufs Flash verlegt, ändert sich an der Flashgröße fast > nichts und das Ram wird frei. wie macht man das?
Tom Eichw schrieb: >> Wenn man die >> Ram-Zugriffe aufs Flash verlegt, ändert sich an der Flashgröße fast >> nichts und das Ram wird frei. > > wie macht man das? seufz http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29
Justus Skorps schrieb: > *seufz* > http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29 :-) Ich bin leider kein uC Experte, dafuer gibts ja dieses tolle Forum! Auf jeden Fall, hab ich heute wieder was gelernt und vor allem funktioniert es jetzt! mein aufruf lautet nun: const PWM pwm_conf[4] PROGMEM = { ..} die werte lese ich dann mit: pgm_read_byte() vielen dank nocheinmal an justus!
> die werte lese ich dann mit: pgm_read_byte()
So war's gedacht und Du hast Dich selbst dahin durchgebissen. Du wirst
auch festgestellt haben, dass sich der Flashverbrauch kaum geändert hat,
denn die Arrays wurden vorher von dort ins Ram kopiert, verbrauchten
also bereits denselben Platz. Gratulation zum Lernerfolg (nicht
ironisch, sondern ernst gemeint).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.