struct initialisierung

Gast #1215179
Lesenswert?

Hallo miteinander,

Tools: LINUX, AVR-GCC , Atmega8,

kann mir jemand sagen wo in folgendem Code (Fragment) der Wurm drin ist.

#define HumTabEntries 11

typedef struct {
  uint8_t perc;
  uint16_t sfreq;
  uint8_t ppl;
} sHumTabEntry;

static const PROGMEM sHumTabEntry HumTab[11] =
{
{0,7351,13},
{10,7224,13},
{20,7100,12},
{30,6976,12},
{40,6853,12},
{50,6728,12},
{60,6600,13},
{70,6468,13},
{80,6330,14},
{90,6186,14},
{100,6033,15}
};

....

int main(){
  for (muxCount = 0; muxCount < HumTabEntries; muxCount++){
    lcd_clrscr();
    lcd_puts("c: ");
    itoa(muxCount,sstring,10);
    lcd_puts(sstring);
    lcd_putc(' ' );
    lcd_putc(' ' );
    lcd_puts("%: ");
    itoa(HumTab[muxCount].perc,sstring,10);
    lcd_puts(sstring);
    lcd_putc(' ' );
    lcd_putc(' ' );
    lcd_putc('\n');

    lcd_gotoxy(0,1);
    lcd_puts("frq: ");
    ltoa(HumTab[muxCount].sfreq,sstring,10);
    lcd_puts(sstring);
    lcd_putc(' ' );
    lcd_putc(' ' );

    lcd_puts("ppl: ");
    itoa(HumTab[muxCount].ppl,sstring,10);
    lcd_puts(sstring);
    lcd_putc(' ' );
    lcd_putc(' ' );

  }
}

Danke
#1215192
Lesenswert?

Um auf Werte im Flash (PROGMEM) zugreifen zu können, musst Du schon die 
entsprechenden Funktionen aus der pgmspace.h verwenden. Das geht nicht 
direkt. Was Du da angezeigt bekommst, sind vermutlich irgendwelche 
Werte, die zufällig an Adressen im SRAM stehen, die den Flash-Adressen 
Deiner Flash-Variablen entsprechen.
Gast #1215202
Lesenswert?

Sorry, das komplette Programm ist etwas umfangreich, um den Fehler zu 
finden habe ich aber alles ausgeklammert was nicht benoetigt wird.

hier der Teil der uebrig geblieben ist.

#include <stdlib.h>
#include <stdint.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "lcd.h"


#define FALSE 0
#define TRUE  1

#define ADC_ref 4980  // 5V on Aref => 5000 mV for Int arithmetic
#define ADC_maxval 1024
#define HumTabEntries 11

typedef struct {
  uint8_t perc;
  uint16_t sfreq;
  uint8_t ppl;
} sHumTabEntry;

static const PROGMEM sHumTabEntry HumTab[11] =
{
{0,7351,13},
{10,7224,13},
{20,7100,12},
{30,6976,12},
{40,6853,12},
{50,6728,12},
{60,6600,13},
{70,6468,13},
{80,6330,14},
{90,6186,14},
{100,6033,15}
};


int main(void)
{
  uint8_t muxCount = 0;
  uint8_t dspCount = 0;
    char sstring[20];

  initPorts();


  /* initialize display, cursor off */
  lcd_init(LCD_DISP_ON);

        /* clear display and home cursor */
        lcd_clrscr();

        /* put string to display (line 1) with linefeed */
        lcd_puts("Hello\n");

  _delay_ms(100);
/*
  adc_init();
  initTimer0();
  initExtInt0();
*/
  PORTD |= (1<<PD0);
  PORTD |= (1<<PD1);

//  sei();
      for (;;) {
  for (muxCount = 0; muxCount < HumTabEntries; muxCount++){
    lcd_clrscr();
    lcd_puts("c: ");
    itoa(muxCount,sstring,10);
    lcd_puts(sstring);
    lcd_putc(' ' );
    lcd_putc(' ' );
    lcd_puts("%: ");
    itoa(HumTab[muxCount].perc,sstring,10);
    lcd_puts(sstring);
    lcd_putc(' ' );
    lcd_putc(' ' );
    lcd_putc('\n');

    lcd_gotoxy(0,1);
    lcd_puts("frq: ");
    ltoa(HumTab[muxCount].sfreq,sstring,10);
    lcd_puts(sstring);
    lcd_putc(' ' );
    lcd_putc(' ' );

    lcd_puts("ppl: ");
    itoa(HumTab[muxCount].ppl,sstring,10);
    lcd_puts(sstring);
    lcd_putc(' ' );
    lcd_putc(' ' );
    _delay_ms(1000);
    _delay_ms(1000);
    _delay_ms(1000);
  }

  lcd_clrscr();
  lcd_puts("ready");
    _delay_ms(1000);
    _delay_ms(1000);
    _delay_ms(1000);
  }

}

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