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

OP #3445583
Lesenswert?
• ▲
▼
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 #3445609
Lesenswert?
• ▲
▼
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 #3445648
Lesenswert?
• ▲
▼
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 #3445675
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.