LED (Spiel-)Würfel Code zu groß?

OP #3445583
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
Angehängte Dateien:
Gast
Hi Fer_t

die .hex-Datei ist wesentlich größer, als das Progamm tatsächliche Bytes 
im Ram benötigt - die Datei ist ja auch im Intel-Hex-Format.

Ich hab das Programm mal schnell mit AVR-Studio übersetzt und das sagt 
mir (mit Optimierung O1), dass die Progam Memory Usage mit 876 bytes bei 
85,5% liegt.

--jmp
OP
jmp schrieb:
> Ich hab das Programm mal schnell mit AVR-Studio übersetzt und das sagt
> mir (mit Optimierung O1), dass die Progam Memory Usage mit 876 bytes bei
> 85,5% liegt.

Vielen Dank!


Dank dir hab ich auch mal nach Möglichkeiten unter Linux geguckt und bin 
auf folgendes gestoßen:
Beitrag "avr-gcc Speicherbelegung anzeigen lassen"

Da wird mit angezeigt:
1
AVR Memory Usage:
2
-----------------
3
Device: attiny13
4

5
Program:     554 bytes (54.1% Full)
6
(.text + .data + .bootloader)
7

8
Data:         11 bytes (17.2% Full)
9
(.data + .bss + .noinit)

Kommt das hin? Also Aufruf mit meiner zuletzt genannten Variante 
(eigenes rand() mit uint16 und uint8).


Der Code schein sonst keine Probleme zu machen... Oder sieht noch jemand 
einen Fehler? ;)

MFG,
Fer_T



PS:
Was bedeutet diese Warnung?
/usr/bin/avr-ld: warning: -z relro ignored.

Danke ;)
Gast
Hi,

Mit der ersten rand()-Funktion erhalte ich:

Program Memory Usage   :  650 bytes   63,5 % Full
Data Memory Usage  :  13 bytes   20,3 % Full

Mit der zweiten komme ich auf:
Program Memory Usage   :  550 bytes   53,7 % Full
Data Memory Usage  :  11 bytes   17,2 % Full

Die Warnung gibt's bei mir nicht, keine Ahnung was die bedeutet.

--jmp

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.