menü fürs display

OP #337609
Lesenswert?
• ▲
▼
Hallo,

ich steuere über einen Atmega32 ein Display an. Der Atmega soll später
verschiedene Routinen ausführen und dazu brauch ich ein Menü. Habe hier
im Forum mehrere Ansätze zu struct-Aufbauten gesehen, habe auch
verschiedenes probiert. Doch bis jetzt hab ich es nicht geschaft, in
eine struct zu schreiben, noch sie auszulesen. Wenn ich also
meinetwegen eine struct wie folgt habe:

typedef struct def_menue
{
  const unsigned char text;
  int8_t previous;
  int8_t next;
  int8_t now;
} menue;

wie kann ich jetzt z.B. den ersten Eintrag mit meinetwegen "Uhrzeit"
erstellen? Und dann z.B. Uhrzeit.next einen Wert zuweisen?

Das allein reicht ja anscheinend nicht:

const menue Uhrzeit PROGMEM={"hallo",1,2,3};

Kann mir das vielleicht einer erklären? Wäre sehr nett!

dnm
OP #337611
Lesenswert?
• ▲
▼
so funktioniert es nicht. Wenn dort def_menu dortsteht, kommt der fehler
"def_menue" undeclared, aber auch "menue" führt nicht zum erfolg. so
hab ichs jetzt:

#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/delay.h>
#ifndef F_CPU
#define F_CPU 8000000UL     /* Quarz mit 8Mhz  */
#endif

typedef struct def_menue
{
  const unsigned char text;
  int8_t previous;
  int8_t next;
  int8_t now;
} menue;

int main(void)
{
menue myMenue[10]; //Jetzt hast Du 10*dein def_menue

myMenue[0].text = "Hallo Welt";
myMenue[0].next = 1;

}

beim compilieren:
-------- begin --------
avr-gcc (GCC) 3.4.6
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.


Linking: test.elf
avr-gcc -mmcu=atmega32 -I. -gstabs   -Os -funsigned-char
-funsigned-bitfields -f
pack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=
-std=gnu99 -Wp
,-M,-MP,-MT,test.o,-MF,.dep/test.elf.d    --output test.elf
-Wl,-Map=test.map,--
cref    -lm
C:/Programme/WinAVR/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/cr 
tm32.o:
In function `__vectors':
../../../../../avr-libc-1.4.4/crt1/gcrt1.S:51: undefined reference to
`main'
make: *** [test.elf] Error 1
OP #337614
Lesenswert?
• ▲
▼
also es muß wirklich ein Fehler sein, der mir im Moment nicht auffällt.
Es lässt sich nicht compilieren?!

stimmen die includes?
das makefile? (im anhang)
hab den avr-gcc 3.4.6
was könnt das sein?

Programm leicht abgeändert/vereinfacht:

#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/delay.h>
#ifndef F_CPU
#define F_CPU 8000000UL     /* Quarz mit 8Mhz  */
#endif

struct menue
{
  const unsigned char text;
  int8_t previous;
  int8_t next;
  int8_t now;
} ;

int main(void)
{
struct menue myMenue[10]; //Jetzt hast Du 10*dein def_menue

myMenue[0].text = "Hallo Welt";
myMenue[0].next = 1;

}
Angehängte Dateien:
OP #337615
Lesenswert?
• ▲
▼
ok. im makefile stimmte der SCR= nicht
hier jetzt ein "anständiger" Fehler:

Compiling: test.c
avr-gcc -c -mmcu=atmega32 -I. -gstabs   -Os -funsigned-char
-funsigned-bitfields
 -fpack-struct -fshort-enums -Wall -Wstrict-prototypes
-Wa,-adhlns=test.lst  -st
d=gnu99 -Wp,-M,-MP,-MT,test.o,-MF,.dep/test.o.d test.c -o test.o
test.c: In function `main':
test.c:21: error: assignment of read-only member `text'
test.c:21: warning: assignment makes integer from pointer without a
cast
make: *** [test.o] Error 1
Gast #337617
Lesenswert?
• ▲
▼
Also, Du deklarierst text als "const" (und somit als "read-only")
und änderst es dann doch. Erklärt den ersten Fehler. Außerdem
deklarierst Du text als "char" (also als einzelnen Buchstaben) und
nicht als "char *" (Zeiger auf Buchstaben / String). Erklärt die
zweite Warnung.

Sicher, dass Du nicht ein C-Buch lesen möchtest?
OP #337618
Lesenswert?
• ▲
▼
"Sicher, dass Du nicht ein C-Buch lesen möchtest?"

Hallo Christian, du hast recht, in solchen Dingen hab ich noch
Nachholbedarf, nur bin ich so lange vor dem PC gesessen, dass ich die
einfache Lösung nich mehr gesehen hatte. Die PROGMEM option hat mich
dann völlig aus dem Konzept geworfen. Jetzt klappt alles und ich dank
euch nochmal! Hab ja auch wieder was dazu gelernt!

Schönen Tag noch!

dnm

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.