mikrocontroller.net

Forum: Compiler & IDEs Lösung zu Pointern gesucht


Autor: hajote (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
bisher konnte ich durch Lesen in diesem Forum meine Probleme lösen.
Jetzt bitte ich um Hilfe.
Dies ist ein Programmteil, mit dem ich die Funktion testen will.
Das soll in einem größerem Programm laufen, dass auf einem Display 
verschiedene "Tasten" anzeigen soll.
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdlib.h>

// knopf_1 und knopf_2 sollen als Beispiel für die Pixel zweier Tasten sein 
prog_uchar knopf_1[]=
{ 0x11,0x12,0x13,0x14,0x15,0x16};

prog_uchar knopf_2[]=
{ 0x21,0x22,0x23,0x24,0x25,0x26};

uint8_t *knopf;
volatile uint8_t k11, k12, k13;
volatile uint8_t k21, k22, k23;

// Aus dieser Tabelle soll die Auswahl erfolgen
const uint8_t *Disp_Tab[]PROGMEM=
{
   knopf_1,       
   knopf_2
};   

int main(void)
{
// So werden die Daten richtig in k11, k12, k13 hinterlegt
>>>>>>>  knopf= knopf_1;
  //knopf = Disp_Tab[0];
  k11 = pgm_read_byte (&knopf[0]);
  k12 = pgm_read_byte (&knopf[1]),
  k13 = pgm_read_byte (&knopf[2]);

// Bei Auswahl aus der Tabelle, wie ich es gerne hätte, nicht, und Warning. Die markierte Zeile ist Zeile 37
//test.c:37: warning: assignment discards qualifiers from pointer target type 
  //knopf = knopf_2;
>>>>>>>  knopf = Disp_Tab[1];
  k21 = pgm_read_byte (&knopf[0]);
  k22 = pgm_read_byte (&knopf[1]),
  k23 = pgm_read_byte (&knopf[2]);

  return (0);
}
Damit beschäftige ich mich nun bereits mehrere Tage und auch die 
"C-Bibel" hat mir noch nicht helfen können. Mit Pointer stehe ich auf 
Kriegsfuß.
Wie muß ich es anstellen, um Daten z.B aus knopf_2 über Disp_Tab nach 
k21, k22,k23 zu bekommen.

Gruß Jochen

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> knopf = Disp_Tab[1];

Die Tabelle Disp_Tab steht im Flash. Wie kommst du darauf, du könntest 
direkt auf die Inhalte zugreifen? Beim Zugriff auf die "knopf-Daten" 
machst du es doch auch richtig.

Autor: hajote (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan Ernst,

danke für die Antwort.
Ja, das direkte Zugreifen klappt.
Da ich ca.50 "Knöpfe" habe, zu denen mehrere Paramteter gehören, wie
die Position auf dem Display, der aktive Bereich für Touch ..., möchte 
ich nur sagen display(knopf1), knopf1 ist z.B #define knopf1 15, und aus 
dem Array[15] mir die zugehörigen Pointer/Daten holen. In dem 
Testprogramm soll es der Pointer auf die anzuzeigenden Pixel sein, der 
dann in der Anwendung an die Anzeigefunktion übergeben wird. Im 
Testprogramm prüfe ich nur, ob die richtigen Werte in kxx gelangen.
Das Ganze soll der besseren Lesbarkeit und Fehlerreduzierung dienen um 
nicht bei jedem "Knopfwechsel" auf dem Display alle Parameter wiederholt 
anzugeben.
Z.B. display(Knopf1, Position_x, Position_y usw.);
Ich denke dass es einfacher ist diese Parameter in Tabellen(Arrays) 
abzulegen und den Knöpfen einen Wert zuzuordnen, der dann als Index 
genutzt wird.
Deswegen möchte ich es in die Richtung wie in dem Testprogramm für den 
knopf_2. Ist soetwas überhaupt möglich?
Gruß Jochen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.