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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren