Fortsetzung der Diskussion von 32KB ist weniger als 16KB:
Nachdem ich bis jetzt alle Erweiterungen mit der Standard Konfiguration (16 KB RAM) programmiert habe, brauche ich jetzt mal mehr RAM und habe auf 32 KB RAM umgeschaltet.
Die Projekte mit der Standard Konfiguration (16 KB RAM) sind teilweise sehr komplex, aber nie hat der Compiler sich geweigert mit dem Fehler ‚program too big‘.
Ändere ich bei funktionierenden Projekten die Einstellung auf 32 KB, weigert sich bei fast allen der Compiler mit dem Fehler.
Ich habe verstanden, dass der Programm-Flash Speicher mit 256 KB mit der Umschaltung nicht größer wird. Im Gegenteil, er wird kleiner, weil der Bluetooth Stack mehr Platz braucht.
Wie groß ist der Unterschied durch den Bluetooth Stack? Ich kann mir nicht vorstellen, mit meinen komplexen 16 KB Projekten den Platz für den Programmcode, der durch den Bluetooth Stack eingespart wird, nicht erreicht oder überschritten zu haben. Mit 16 KB Daten Speicher scheint der Programm Speicher praktisch unbegrenzt zu sein. Ich bin jedenfalls noch nie an die Grenze gekommen.
Es besteht jetzt das Dilemma, entweder Programm-Speicher zu haben oder Daten-Speicher.
Dazu kommt der Fehler mit den Array-Grenzen (max. 32 Array-Elemente oder Buffer.length 240), der bei beiden Einstellungen 32 KB und 64 KB identisch auftritt.
Die Array-Grenzen können zwar mit
"yotta": {
"config": {
"microbit-dal": {
"bluetooth": {
"enabled": 0
}
}
}
}
aufgehoben werden. Diese Einstellung bei der 32 KB Konfiguration ausprobiert,
"bluetooth": {
"enabled": 0,
"pairing_mode": 1,
"partial_flashing": 1,
"dfu_service": 1,
"event_service": 1,
"device_info_service": 1
},
führt aber nicht dazu, dass der oben genannte Bluetooth-Stack auch nur 1 Byte Programm Speicher frei macht.
Ich könnte jetzt noch mehr Nullen rein schreiben, ohne zu wissen was passiert. In der Konfiguration rum basteln kann aber nicht die Lösung sein.
Also wie kann ich mit 32 KB RAM trotzdem genug Programm Speicher bekommen?
Was auch immer der Sinn von ‚bluetooth enabled‘ ist, A+B+RESET funktioniert ja trotzdem immer, um mit dem iPad zu koppeln. Worauf ich notfalls verzichten würde, weil Programm 25 aus dem Flash geladen werden kann. Ich kann auch auf andere neue Features verzichten, wenn sie mir den Programmspeicher weg nehmen und eigene Projekte unmöglich machen.
Wenn der Programm Speicher fehlt, ist die Projekteinstellung 32 KB RAM für Daten für mich komplett unbrauchbar.
Möglicherweise liegt hier einfach ein Fehler in MakeCode vor, denn es weigert sich ja der Compiler mit dem Fehler ‚program too big‘. Der Code ist nie auf dem Calliope angekommen und vielleicht wäre dort genug Speicher vorhanden und niemand hat’s gemerkt.
Mein Tipp ist: Die Konfigurationen
"pairing_mode": 1,
"partial_flashing": 1,
"dfu_service": 1,
"event_service": 1,
"device_info_service": 1
sollen ja bewirken, dass der Compiler unterschiedlich viel Code erzeugt. Die Berechnung, wieviel Programmspeicher jede Option von den 256 KB Flash weg nimmt, funktioniert nicht. Und die Fehlermeldung ‚program too big‘ ist der Fehler. Kann man die Compiler-Fehlermeldung ignorieren?
FG Lutz