Forum: Compiler & IDEs struct initialisierung


von JG (Gast)


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

von JG (Gast)


Lesenswert?

Ach ja, was auf dem Display ausgegeben wird, sind wunderschoene Zahlen, 
jedoch nicht die die ich erwarte.

von Simon K. (simon) Benutzerseite


Lesenswert?

Komplette Programme bitte. Wie ist sstring definiert?

von Johannes M. (johnny-m)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Du liest aus dem SRAM statt aus dem Progmem.

von JG (Gast)


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);
  }

}

von JG (Gast)


Lesenswert?

@Johannes M. (johnny-m)
@Jörg Wunsch

Klar doch, huuu bin ich bloed.


danke euch beiden

Ju

von Simon K. (simon) Benutzerseite


Lesenswert?

Jörg Wunsch wrote:
> Du liest aus dem SRAM statt aus dem Progmem.

Huuuch, stimmt. Das hätte auch mir auffallen können :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.