Guten Abend/Nacht, so habe gestern den ganzen Tag ein Programm geschrieben, welches mir die Timerwerte mit bestimmten Werten versieht. So, nun passt mein Array aber nicht mehr auf den Controller^^ Aber was ich nicht verstehe: Device: atmega32 Program: 7570 bytes (23.1% Full) (.text + .data + .bootloader) Data: 18090 bytes (883.3% Full) (.data + .bss + .noinit) Das zeigt mir AvrStudio 5 an. Aber wieseo ist das Programm nur zu 23% voll und .data zu 883%? Kann ich mein Array irgendwie anders speichern, so dass es drauf passt??? lg otto
Otto schrieb: > Aber wieseo ist das Programm nur zu 23% voll und .data zu 883%? Weil Dein Programm ins Flash kommt (32k), und die veränderlichen Daten ins RAM (2k). Otto schrieb: > Kann ich mein Array irgendwie anders speichern, so dass es drauf > passt??? Nein. Vermutlich nicht. Nicht auf dieses Ding. Wie sieht die Array-Deklaration aus?
huh super, schnell!! sieht gerade so aus: uint32_t array[4434] = { 0x4ffff, 0x34c4a, 0x29896, 0x265b9, 0x24c4a, 0x23d08, 0x232dc, 0x22b98, 0x22625, 0x221e8, ... }; Was heißt denn veränderliche Daten? Hab ich schon gelesen konnte aber nix damit anfangen. Und 32k höhrt sich doch nach viel an, kriegt ich das da denn nicht rein?
Nö, ins Ram passen nur 2kb :) Ins Flash kommt das Programm und unter umständen Daten die SEHR SEHR selten verändert werden oder statisch sind. Z.b. Bilder oder Schriftarten für ein grafik Display. Die Daten im Flash können auch verändert werden....aber das Flash macht nur eine bestimme Anzahl von Schreibzyklen mit ( gelesen werden kann es unbegrenzt)
Achso und zum Zweck des ganzen. Es soll ein Stroboskop Licht werden. Hab da eine nette Formel im Atm32 Datenblatt gefunden um den ocr-Wert von einer bestimmten Frequenz zu bekommen. Dann hab ich mir ein Programm geschrieben, was diesen Werte ausrechnet und den besten Vorteiler dazu findet. Nun wollte ich das ganze aufspielen und dann mit nem Pointer das array "abfahren". Momentan wird der ocr Wert in Echtzeit berechnet, was aber ziemlich "ruckelig" ist. @Eumel: Ja die müssen nicht geändert werden! Einfach einmal drauf. Wie geht das?
Konstante Daten sollten im Flash bleiben. Aufgrund der praktischen Harvard-Architektur ist beim AVR hierfür mehr erforderlich als nur das Schlüsselwort const, das auf Controllern mit der von-Neumann-Architektur genügen würde. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29
Otto, schau mal hier oben links im AVR Tutorial im Kapitel über LCDs. Da wird beschrieben, wie man einen konstanten Text im Flash speichert und dann ausgibt. Da müsste alles drinstehen was du brauchst.
Otto schrieb: > Was heißt denn veränderliche Daten? Sorry, hatte ich überlesen - bzw. aus dem RAM-Bedarf geschlossen. Wenn Du einen ARM hättest, dann würde ein const in Deiner Deklaration ausreichen. Für atmega ist PROGMEM Dein Helfer. Was machst Du mit 32-Bit-Werten? Ich sehe nur 2,5 Byte pro Wert.
Hallo, danke für Eure Hilfe!! Habe es nun geschaft, mittels "#include <avr/pgmspace.h>" und "PROGMEM" alles in den Flash zu bekommen!! sieht jetzt so aus: Program: 25306 bytes (77.2% Full) (.text + .data + .bootloader) Data: 354 bytes (17.3% Full) (.data + .bss + .noinit) Nun noch mal zum uint32_t, ja es sind immer nur 2,5Bytes! Aber ein uint16_t wäre ja zu klein. Wie bekomm ich denn genau die 2,5Bytes? Lg Otto
brauchst du wirklich alle 4434 mwerte ? oder hast du das mal eben nur auf vorat gebaut? ich meine für ein strobo licht .. das ist eher mit kanonen auf spatzen und so ..
@fdssd Nun ja das sind alle Möglichkeiten mit 1Mhz Quarz und den 5 Vorteilern von 0.1 bis 10kHz. Ja ich will das Stroboskop Licht ja auch nehmen um z.B. Lüftergeschwindikeit zu messen oder so. So richtig funktionieren wird das dann nur bis so 500Hz, weil ab da die "Frequenzschritte" zu groß werden. Aber ich fand, dass es eine nette Idee ist :)
Otto schrieb: > Aber ein uint16_t wäre ja zu klein. > Wie bekomm ich denn genau die 2,5Bytes? Mit einem struct, welches z. B. 1x uint16_t und 1x uint8_t hat. Oder 3x uint8_t. Danach ein array mit diesem struct.
Otto schrieb: > @fdssd Nun ja das sind alle Möglichkeiten mit 1Mhz Quarz und den 5 > Vorteilern von 0.1 bis 10kHz. Das kann man doch sicher auch zur Laufzeit ausrechnen, oder nicht? Ob der µC nach dem Umschalten der Frequenz erst nach 1 oder 10ms reagiert (weil er mit rechnen beschäftigt ist), ist bei einem Stroboskop ja wohl zweitrangig. Auf der anderen Seite: Für nicht benutztes Flash gibts kein Geld zurück.
> So richtig funktionieren wird das dann nur bis so 500Hz, > weil ab da die "Frequenzschritte" zu groß werden. Das geht durchaus noch feiner. Du brauchst dazu einen Timer, der einen PWM Modus mit variabler Obergrenzen hat.
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.