Forum: Compiler & IDEs Lösung zu Pointern gesucht


von hajote (Gast)


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.
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4
#include <stdlib.h>
5
6
// knopf_1 und knopf_2 sollen als Beispiel für die Pixel zweier Tasten sein 
7
prog_uchar knopf_1[]=
8
{ 0x11,0x12,0x13,0x14,0x15,0x16};
9
10
prog_uchar knopf_2[]=
11
{ 0x21,0x22,0x23,0x24,0x25,0x26};
12
13
uint8_t *knopf;
14
volatile uint8_t k11, k12, k13;
15
volatile uint8_t k21, k22, k23;
16
17
// Aus dieser Tabelle soll die Auswahl erfolgen
18
const uint8_t *Disp_Tab[]PROGMEM=
19
{
20
   knopf_1,       
21
   knopf_2
22
};   
23
24
int main(void)
25
{
26
// So werden die Daten richtig in k11, k12, k13 hinterlegt
27
>>>>>>>  knopf= knopf_1;
28
  //knopf = Disp_Tab[0];
29
  k11 = pgm_read_byte (&knopf[0]);
30
  k12 = pgm_read_byte (&knopf[1]),
31
  k13 = pgm_read_byte (&knopf[2]);
32
33
// Bei Auswahl aus der Tabelle, wie ich es gerne hätte, nicht, und Warning. Die markierte Zeile ist Zeile 37
34
//test.c:37: warning: assignment discards qualifiers from pointer target type 
35
  //knopf = knopf_2;
36
>>>>>>>  knopf = Disp_Tab[1];
37
  k21 = pgm_read_byte (&knopf[0]);
38
  k22 = pgm_read_byte (&knopf[1]),
39
  k23 = pgm_read_byte (&knopf[2]);
40
41
  return (0);
42
}
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

von Stefan E. (sternst)


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.

von hajote (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.