PGM_P Array - darf ich das so?

OP #900579
Hallo zusammen,

ich wollte nur kurz fragen, ob ich folgendes so definieren und 
deklarieren darf...
1
//stringlib.h
2
#ifndef STRINGLIB_H_
3

4
#define STRINGLIB_H_
5

6

7

8
#include <avr/pgmspace.h>
9

10
extern const char checksum00[] PROGMEM;
11

12
extern const char checksum01[] PROGMEM;
13

14
#endif
1
//stringlib.c
2
#include "stringlib.h"
3

4
const char checksum00[] PROGMEM = "keine Fehler";
5

6
const char checksum01[] PROGMEM = "falsche Checksumme";
1
//errorbitmap.h
2
#ifndef ERRORBITMAP_H_
3

4
#define ERRORBITMAP_H_
5

6
#include <stdint.h>
7

8
#include <avr/pgmspace.h>
9

10
#include "stringlib.h";
11

12
extern char *errortext;
13

14
typedef struct{
15

16

17
      //checksum
18

19
      uint8_t      ebm_testchecksum;
20

21

22
}struct_errorbitmap;
23

24
extern PGM_P p_errortext_checksum0[]; 
25
#endif
1
//errorbitmap.c
2
#include "errorbitmap.h"
3

4
PGM_P p_errortext_checksum0[] = {checksum00,checksum01};
1
//main.c
2
#include <avr/io.h>
3

4
#include <avr/pgmspace.h>
5

6
#include <string.h>
7
#include "errorbitmap.h"
8

9
char *errortext;
10
errorbitmap.ebm_testchecksum = 0;
11
int main(void)
12
{
13
 errorbitmap.ebm_testchecksum = lesevoneepromirgendwas();
14
 //ausgabe
15
 text_p(p_errortext_checksum[errorbitmap.ebm_testchecksum]);
16
 return 0;
17
}

Das sollte mal abbilden, was ich mache. text_p() erwartet Pointer zum 
Falsh.
Mach ich dabei etwas falsch? Ich bin gerade auf Bugsuche :(
Persönliche Seite #900917
Ich kann erstmal keinen Fehler entdecken. Wo hängt es denn genau? 
Vermutlich klappt text_p nicht, wenn das der Fall ist überprüfe

  errorbitmap.ebm_testchecksum = lesevoneepromirgendwas();

Für weiteres bringt die Glaskugel nicht viel. Kleiner Tip: in der 
pgmspace.h sind wesentlich übersichtlichere Typen wie prog_char etc 
definiert.
OP #901542
Hmm. Das dann lese ich ja 
p_errortext_checksum[errorbitmap.ebm_testchecksum] in den SRAM, oder? 
text_p erwartet aber einen Pointer ins Flash.

Generell muss ich sagen, wußte ich nicht ob das obige funktioniert. 
Leider hängt mein Programm ein bißchen, wie im 
Beitrag "Langzeittest der Software" zu sehen ist, und ich weiß 
nicht wo.

Es kann also durchaus sein, dass obiger Code problemlos funktioniert. 
Ich wollte nur mal nachfragen.
So wie es momentan aussieht funktioniert das alles auch. Muß wohl doch 
woanders liegen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.