Wie PROGMEM Konstante in .h Datei auslagern?

#2166914
Lesenswert?
• ▲
▼
Hallo Rufus,

wo finde ich eigentlich etwas kurzes darüber,
was denn da zum guten Stil gehört  ?

Marc Mk schrieb:
> Zur besseren Übersicht möchte ich Konstanten in eine .h Datei auslagern.
>
> In der .c Datei vor main() funktioniert das:
>   volatile uint8_t Werte[] PROGMEM = {1,2,3,4,5};
>
> Wie kann ich das in eine .h Datei auslagern ?



Hallo Marc,
wie Rufus schon schrieb:
 -> Weshalb "volatile" bei Konstanten ?
 -> "volatile" ist doch hauptsächlich für globale Variablen und IRQ
(Der erzeugte Assembler-Code verwendete LDS - aus RAM !)

 -> für meine Projekte nutze ich "static const ... PROGMEM ..."
(Der erzeugte Assembler-Code verwendet dann auch LPM aus FLASH !)

Egal, ob es nun so gehört oder nicht - es funktioniert zumindest.
(Winavr & Avr-Simulator)

main.c:
1
#include <avr/io.h>
2
#include <avr/pgmspace.h>
3
#include "progmemconst.h"
4

5
int main()
6
{
7

8
  unsigned char counter;
9

10
  while(1)
11
  {
12
    for (counter = 0; counter < 6; counter++)
13
    {
14
      PORTA = pgm_read_byte(&Werte[counter]);
15
    }
16

17
  }
18

19

20
}

progmemconst.h:
1
#ifndef _PROGMEMCONST_H_
2
#define _PROGMEMCONST_H_
3

4
#include <avr/pgmspace.h>
5

6
static const uint8_t Werte[] PROGMEM = {1,2,3,4,5};
7

8
#endif
OP #2166927
Lesenswert?
• ▲
▼
Wow, das ging schnell!

Ja, "volatile" habe weil ich es im IRQ setzen möchte.

Mit extern kommt der Fehler:
error: 'Werte' has both 'extern' and initializer

Mit static findet er es nicht:
.c:20: error: 'Werte' undeclared (first use in this function)

Aber grundsätzlich müsste es doch gehen, in der .h Datei kann ich auch 
die Register setzen?

Antwort schreiben

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.

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.