Compiler & IDEs
›
Thread
struct initialisierung
J
JG
Gast
01.04.2009 16:26
#1215179
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
J
JG
Gast
01.04.2009 16:28
#1215184
Ach ja, was auf dem Display ausgegeben wird, sind wunderschoene Zahlen,
jedoch nicht die die ich erwarte.
Komplette Programme bitte. Wie ist sstring definiert?
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.
Du liest aus dem SRAM statt aus dem Progmem.
J
JG
Gast
01.04.2009 16:38
#1215202
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);
}
}
J
JG
Gast
01.04.2009 16:40
#1215204
@Johannes M. (johnny-m)
@Jörg Wunsch
Klar doch, huuu bin ich bloed.
danke euch beiden
Ju
Jörg Wunsch wrote:
> Du liest aus dem SRAM statt aus dem Progmem.
Huuuch, stimmt. Das hätte auch mir auffallen können :-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
Noch kein Account?
Die Registrierung ist kostenlos und dauert nur eine Minute.
Jetzt registrieren