N'abend,
Ich hab gerade mal ein paar Bauteile beim Aufräumen gefunden, unter
anderem einen Haufen LEDs und nen kleinen Tiny13.
Nun wollte ich einen kleinen Würfel bauen (also einen Spielwürfel) und
dachte mir das sollte man wohl packen...
Aber anscheinend habe ich entweder so eine Sauklaue beim Programmieren
oder ich mache sonst was falsch, weil meine Hex ist leider über 2,8 KiB
groß (verschiedene Optimierungseinstellungen)...
Wäre jemand so nett meinen Code sich anzugucken? Ist lange her das ich
auf 8-Bit gearbeitet habe (in letzter Zeit nur am PC und da mit C++)...
Danke!
Mein Code siehe Anhang.
Übersetzt mit angepasstem Beispiel Makefile und dann nochmal hier mit:
avr-gcc -mmcu=attiny13 -Os -Wall -std=gnu99 -DF_OSC=4800000
-F_CPU=4800000 -o wuerfel.elf wuerfel.c
avr-objcopy -j .text -j .data -O ihex wuerfel.elf wuerfel.hex
MfG,
Fer_t
Kleines Update, aber immer noch nicht klein genug:
Wenn ich die stdlib raus nehme (für rand()) und mein eigenes definiere
(hier im Forum gefunden), schaffe ich 2,4 KiB:
1 | #define RAND_MAX 65535 // The value of which is the maximum value
|
2 |
|
3 | uint32_t _Randseed = 1;
|
4 |
|
5 | uint16_t rand(void)
|
6 | {
|
7 | _Randseed = _Randseed * 1103515245 + 12345;
|
8 | return ((uint16_t)(_Randseed >> 16) % RAND_MAX);
|
9 | }
|
10 |
|
11 | void srand(uint32_t seed)
|
12 | {
|
13 | _Randseed = seed;
|
14 | }
|
Hab den auch gerade noch einmal modifiziert, damit komme ich auf 1,6 KiB
das scheint mir dann aber auch das Minimum zu sein (durch ändern dieser
Funktion). Auch weiß ich nicht ob die "Güte" der Pseudozufallszahlen
dabei erhalten bleibt...
1 | #define RAND_MAX 255 // The value of which is the maximum value
|
2 |
|
3 | uint16_t _Randseed = 1;
|
4 |
|
5 | uint8_t rand(void)
|
6 | {
|
7 | _Randseed = _Randseed * 48653 + 1234;
|
8 | return ((uint8_t)(_Randseed >> 8) % RAND_MAX);
|
9 | }
|
10 |
|
11 | void srand(uint16_t seed)
|
12 | {
|
13 | _Randseed = seed;
|
14 | }
|
MfG,
Fer_T