Witam
mam problem z przykładem programu z dvd dot lcd
błąd polega na wyswietlaniu bledów tego typu
Kod:
15:07:03 **** Incremental Build of configuration Release for project 04_LCD ****
make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
../main.c:22:9: error: variable 'znak_termo' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
../main.c: In function 'main':
../main.c:33:2: warning: passing argument 1 of 'lcd_str_P' discards 'const' qualifier from pointer target type [enabled by default]
../LCD/lcd44780.h:172:6: note: expected 'char *' but argument is of type 'const char *'
../main.c:35:2: warning: passing argument 1 of 'lcd_str_P' discards 'const' qualifier from pointer target type [enabled by default]
../LCD/lcd44780.h:172:6: note: expected 'char *' but argument is of type 'const char *'
../main.c:44:22: error: 'znak_buzka' undeclared (first use in this function)
../main.c:44:22: note: each undeclared identifier is reported only once for each function it appears in
make: *** [main.o] Error 1
15:07:09 Build Finished (took 5s.390ms)
na każdej wersji eclipse i avr gcc i avrdude
plik main.c
Kod:
/*
* main.c
*
* Created on: 2010-03-31
* Autor: Mirosław Kardaś
*/
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include "LCD/lcd44780.h"
// poniższą linijkę czasami trzeba wpisać w eclipse przed definicjami
// zmiennych w pamięci EEPROM, żeby nie podkreślał składni jako błędnej
#define EEMEM __attribute__((section(".eeprom")))
const char PROGMEM tab1[] = {"FLASH"};
char EEMEM tab2[] = {"EEPROM"};
uint8_t znak_L[] = {16,16,18,20,24,16,31,0}; // wzór znaku litery Ł w pamięci RAM
uint8_t znak_o[] EEMEM = {4,32,14,17,17,17,14,0}; // wzór znaku litery ó w pamięci EEPROM uint8_t znak_buzka[] PROGMEM = {14,17,27,17,17,21,17,14}; // wzór znaku buźki w pamięci FLASH
uint8_t znak_termo[] PROGMEM = {4,10,10,10,17,31,31,14}; // wzór znaku termometru w pamięci FLASH
volatile uint8_t pwm1, pwm2, pwm3;
int main(void)
{
DDRD |= (1<<PD0);
PORTD |= (1<<PD0);
lcd_init();
lcd_str_P(tab1); // napis z pamięci FLASH
lcd_locate(0,10);
lcd_str_P( PSTR("Linia1") ); // napis z pamięci FLASH
lcd_locate(1,0);
lcd_str_E(tab2); // napis z pamięci EEPROM
lcd_locate(1,10);
lcd_str("Linia2"); // napis z pamięci RAM
// załadowanie znaków do pamięci CGRAM
lcd_defchar(0x80, znak_L);
lcd_defchar_E(0x81, znak_o);
lcd_defchar_P(0x82, znak_buzka);
lcd_defchar_P(0x83, znak_termo);
// wyświetlenie własnych znaków na LCD
lcd_locate(0,7);
lcd_str("\x80\x81");
lcd_locate(1,8);
lcd_str("\x82");
lcd_locate(1,7);
lcd_str("\x83");
while(1);
}
Dodam ze jeszcze nie jestem w książce nad tym , ale user chata zaproponował ten program do testu lcd , który chciałem przetestować ale nieda skompilować sie ;(.