Hi,
das PROGMEM bringt mich noch um, alles was früher mal geklappt hat macht jetzt Schwirigkeiten.

Code:
#include <avr/io.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h> 
#include "uart.h"  // Peter Fleury

#ifndef __ATTR_PROGMEM__
 #define __ATTR_PROGMEM__ __attribute__((__progmem__))
#endif

#ifndef  PROGMEM
 #define PROGMEM __ATTR_PROGMEM__
#endif

S8 sTx[16];

typedef struct PROGMEM Norm
{
    prog_U8 faktor;   
    prog_U8 decimal;
             
    const prog_S8 sNormUnit[NORM_UNIT_MAXLEN];
    const prog_S8 sNormName[NORM_NAME_MAXLEN];
}norm_t; 

/*** ---- Normalization ------------- Faktor Decimal  Unit    Name ------ ***/
norm_t Norm_Voltage1 = {      1,      0, {"V"},  {"VOLTAGE 1"} };
norm_t Norm_Voltage2 = {      1,      3, {"mV"}, {"VOLTAGE 2"} };

norm_t* PROGMEM NormArray[] =
{ (norm_t*)&Norm_Voltage1, (norm_t*)&Norm_Voltage2 };


void foo(void)
{
    norm_t* p_norm;

     p_norm = (norm_t*) NormArray[0];

     uart_puts( (S8*) p_norm->sNormName );   // Da kommt nur mist raus


   uart_puts( (S8*) ((norm_t*)NormArray[0])->sNormName );  // Da auch



}
Offensichtlich habe ich Probleme mit Pointern in den Progmem Bereich.
Und das nicht nur bei Strings sondern auch Werte kommen falsch raus.

Code:
void foo(void)
{
      uart_puts( itoa( NormArray[i]->factor, sTx, 10) );
}
mit den Pointern tu ich mir einfach schwer.
Weiß hier jemand weiter?

Oder kennt einer ein Beispiel für Constanten und deren Benutzung im PROGMEM bereich?

gruß christoph