mikrocontroller.net

Forum: Compiler & IDEs PGM_P Array - darf ich das so?


Autor: Josef Kaeufl (josefk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

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

#define STRINGLIB_H_



#include <avr/pgmspace.h>

extern const char checksum00[] PROGMEM;

extern const char checksum01[] PROGMEM;

#endif
//stringlib.c
#include "stringlib.h"

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

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

#define ERRORBITMAP_H_

#include <stdint.h>

#include <avr/pgmspace.h>

#include "stringlib.h";

extern char *errortext;

typedef struct{


      //checksum

      uint8_t      ebm_testchecksum;


}struct_errorbitmap;

extern PGM_P p_errortext_checksum0[]; 
#endif

//errorbitmap.c
#include "errorbitmap.h"

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

#include <avr/pgmspace.h>

#include <string.h>
#include "errorbitmap.h"

char *errortext;
errorbitmap.ebm_testchecksum = 0;
int main(void)
{
 errorbitmap.ebm_testchecksum = lesevoneepromirgendwas();
 //ausgabe
 text_p(p_errortext_checksum[errorbitmap.ebm_testchecksum]);
 return 0;
}

Das sollte mal abbilden, was ich mache. text_p() erwartet Pointer zum 
Falsh.
Mach ich dabei etwas falsch? Ich bin gerade auf Bugsuche :(

Autor: Josef Kaeufl (josefk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja.

ich habe natürlich in meiner global.h
struct_errorbitmap errorbitmap;
angelegt.
Die global.h wird überall, wo nötig, eingebunden.

Autor: T. H. (pumpkin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Werner B. (werner-b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da die Zeiger auch im Progmem stehen, versuchs mal mit..
text_p(pgm_read_word(&p_errortext_checksum[errorbitmap.ebm_testchecksum]));

Autor: Josef Kaeufl (josefk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.