Hi, ich will einen 328 ohne Bootloader flashen und allen Speicher zur Verfügung haben.
Das Flashen per USBasp klappt auch einwandfrei aus der IDE, jedoch kommt die Meldung, das "Maximum sind 30.720 Bytes", und keine 32768. Was belegt da die 2k? Der nicht mehr verwendete Bootloader?
Wie kriege ich das him, dass ich alle 32k Flash zur Verfügung habe. Mein alter Kumpel Google hat Tausende Ergebnisse ausgespuckt, bin aber nicht wirklich fündig geworden.
Die Begrenzung müsste aus der board.txt kommen. Die vollen 32KB wirst du aber auch nicht erreichen, da auch kein Bootloader 256 Byte belegt. Um erst einmal überhaupt den 2KB Bootloader Bereich auf 256Byte zu beschränken muss du die Fuses verändern.
Wie sschultewolter bereits schrieb, kann man den für einen Bootloader reservierten Speicher zwar verringern, jedoch nicht komplett freigeben.
Unter http://www.engbedded.com/fusecalc findest du einen Fuse-Calculator. Wenn du zuerst deinen Atmega328P einstellst, kannst du als nächstes im Bereich "Boot Flash section size" den geringsmöglichen Wert (256 words, nicht Bytes ;)) wählen, ein Klick auf "Apply" berechnet dann die gewünschten Fusebits, mit denen dein Mikrocontroller geflsht werden muss.
Der Bootloader befindet sich im Flash, nicht im RAM! Knapper Flash ist nicht vorteilhaft, aber deutlich harmloser als knapper RAM! Beim RAM musst du aufpassen, denn dieser verändert sich mit der Laufzeit des Programmes. Ein größer Punkt, wieso viele Anfänger oder auch Fortgeschritten Projekte für eine gewissen Zeit problemlos laufen und erst nach eingen Stunden / Tage zu problemen führen, bei denen nichts mehr vom MCU erledigt wird.
sth77:
Wie sschultewolter bereits schrieb, kann man den für einen Bootloader reservierten Speicher zwar verringern, jedoch nicht komplett freigeben.
Hallo,
wenn BOOTRST auf Null gesetzt wird und das komplette Lock-Byte auf 0xFF sollte der komplette Flash frei sein und kein Bootloader verwendet werden. Die Einstellungen von BOOTSZ0 und BOOTSZ1 haben dann keine Wirkung.
Der Sketch verwendet 32.222 Bytes (99%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 182 Bytes (8%) des dynamischen Speichers, 1.866 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
Der Pro Mini hats gefressen, und auf der seriellen kommt Text raus, bis sich es dann irgendwann mal aufhängt. Da dies ja kein RAM brauchen sollte, dürfte es daran nicht liegen, eher an den 99% Flash.
So wie es aussieht, ist es doch nicht der 328, der abschmiert, sondern mein PC. Das Fenster der seriellen Schnittstelle hat Zeichen verschluckt, das schrieb ich dem AVR zu.
Mit Putty probiert, nach kurzer Zeit PC ganz abgestürzt. Mehrmals probiert, immer wenn Putty kurze Zeit Daten mit 115200 bekommt, friert der PC ein. Mist!
Hab mal delays und blink mit reingemacht und überwache das ganze mal.
Sicher das der Atmega dann noch arbeitet? Las eine Led einfach im Sekundentakt aufblinken. Zeichen verschlucken liegt vermutlich an falschen Einstellungen bzw. Genauigkeiten.
Der Pro Mini hat nur einen Resonator. Diese sind nicht so genau wie Quarze. 1-5% Sollte für UART meist unproblematisch sein. Jedoch kommen da noch je nach Einstellung 2.1 - 3.5% an Fehlern hinzu!
Schachmann:
wenn BOOTRST auf Null gesetzt wird und das komplette Lock-Byte auf 0xFF sollte der komplette Flash frei sein und kein Bootloader verwendet werden. Die Einstellungen von BOOTSZ0 und BOOTSZ1 haben dann keine Wirkung.
Das ist des Pudels Kern !
In einem anderen Thread von mir hatte ich auch die Behauptung aufgestellt das man die Bootloadersektion nicht ganz auf null setzen kann.
Da keiner wiedersprochen hat war ich der Meinung dies sei richtig - bis gerade eben