problem: flash pointer übergeben

Gast #3666165
Lesenswert?
• ▲
▼
1
 Codeausschnitt:
2
const uint8_t alpha_table[]PROGMEM={"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?"};
3
const uint8_t hallo[]PROGMEM=  {"HALLO"};
4
const uint8_t welt[]PROGMEM=  {"WELT!"};
5

6
const uint16_t zeichensatz[40][5]PROGMEM=
7
{    
8
{127, 392, 520, 392, 127}, {1023, 529, 529, 297, 198}, ... und noch viele mehr
9
};
10

11
void plott_short_word(uint8_t *field)
12
{
13
  uint8_t found = 0, j = 0;
14
  
15
  for(uint8_t i = 0; i<5;i++)
16
  {
17
    j = 0;
18
    do
19
    {
20
      if((field)==((uint8_t)pgm_read_byte(&alpha_table[j])) || (j==39))
21
      found = 1;
22
      else
23
      j++;
24
    } while (!found);
25
    
26
    field++;
27
    found = 0;
28
    
29
    for(uint8_t m = 0; m<5;m++)
30
    {
31
      output[m+6*i]=(uint16_t)pgm_read_word (&zeichensatz[j][m]);
32
    }
33
  }
34
}
35

36
int main (void)
37
{
38
...
39
plott_short_word(pgm_read_byte(hallo));
40
}
41

42
ausgabe an display über interrupt (funktioniert tadellos)

folgendes: aufgrund von platzproblemen im sram muss ich einige dinge in 
den flash auslagern

nun versuche ich einen pointer auf die zeichenfolge hallo an eine 
funktion zu übergeben, aber irgendwie will das nicht so ganz ...

wenn ich wie im code stehend
1
if((field)==((uint8_t)pgm_read_byte(&alpha_table[j])) || (j==39))
anwende, wird nur das erste zeichen des übergebenen worts ausgeben, die 
anderen zeichen sind einfach die darauf folgenden
z.B. Aufruf
1
plott_short_word(pgm_read_byte(hallo));
Ausgabe: HIJKL

versucht "welt!" auszugeben hat ähnliches ergebnis nur das es mit w 
anfängt

wenn ich aber die if abfrage auf dieses hier ändere
1
if(((uint8_t)pgm_read_byte(&hallo[i]))==((uint8_t)pgm_read_byte(&alpha_table[j])) || (j==39))
funktioniert es aber (was aus meiner ursprünglichen version kam ohne 
eigene funktion)

wo ist mein fehler ich suche schon ne weile (kann gut sein das ich 
gerade ein brett vor dem kopf habe, da ich den halben tag daran 
rumgebastelt habe)
muss aber auch gestehen das ist das erste mal das ich mit pgm arbeite, 
bitte um nachsicht wenn ich grobe fehler gemacht habe
Gast #3666192
Lesenswert?
• ▲
▼
@Detlef Kunz:

stimmt, war ne verzwifelungstat geb ich zu, hatte das aber auch vorher 
schon so gemacht

nur führt das dazu das er keines der zeichen erkennt und die 39 
zuschlägt was ein ? ausgibt

nachtrag zum eigendlichen post
1
if(*(field)==((uint8_t)pgm_read_byte(&alpha_table[j])) || (j==39))
hatte ein * vergessen ...^^

aber weiterhin selbes problem
Persönliche Seite #3666209
Lesenswert?
• ▲
▼
1
const __flash char alpha_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?";
2
const __flash char hallo[] = "HALLO";
3
const __flash char welt[] = "WELT!";
4

5
const __flash uint16_t zeichensatz[40][5] =
6
{    
7
{127, 392, 520, 392, 127}, {1023, 529, 529, 297, 198}, ... und noch viele mehr
8
};
9

10
void plott_short_word (const __flash char *field)
11
{
12
  uint8_t found = 0, j = 0;
13
  
14
  for (uint8_t i = 0; i<5;i++)
15
  {
16
    j = 0;
17
    do
18
    {
19
      if (*field == alpha_table[j] ||  j == 39)
20
         found = 1;
21
      else
22
         j++;
23
    } while (!found);
24
    
25
    field++;
26
    found = 0;
27
    
28
    for (uint8_t m = 0; m<5; m++)
29
    {
30
      output[m+6*i] = zeichensatz[j][m];
31
    }
32
  }
33
}
34

35
int main (void)
36
{
37
...
38
plott_short_word (hallo);
39
}

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.