Witam,
Nie jestem zbyt doświadczony w programowaniu w C dla AVR. Stawiam dopiero pierwsze kroki,więc popełniam (choć staram się nie popełniać
) wiele błędów wynikających ze zwykłej niewiedzy. Stanąłem więc przed kolejnym problemem, z którym nie potrafię jak na razie sobie poradzić.
Chciałem poćwiczyć ze strukturami,więc napisałem na prędce coś takiego:
Jak widać zadeklarowałem prostą strukturę w pamięci eeprom. Jej pierwsze trzy elementy są od razu inicjowane. Następnie chciałem zmienić te elementy programowo. Z elementem a (char) i elementem b (int) nie ma problemu. Schody zaczynają się dopiero ze stringiem.
analogicznie spróbowałem najpierw :
i otrzymałem przykrą wiadomość, że : the expression must be a modifiable lvalue
W zwykłym C uczyłem się ,że zadziała
Niestety Codevision wywala mi błąd :
function argument #1 of type 'eeprom unsigned char [11]' is incompatible with required parameter of type 'unsigned char *'
W końcu spróbowałem:
też bez powodzenia.
Jak poprawnie przekazać nową wartość do pola c w tej strukturze ??
Dla wytrawnego programisty problem na pewno jest trywialny,ale niestety ja dopiero się uczę...
Pomóżcie, bo mi się świąteczne jajko w żolądku chce cofnąć....
Pozdrawiam !
Andrzej.
Nie jestem zbyt doświadczony w programowaniu w C dla AVR. Stawiam dopiero pierwsze kroki,więc popełniam (choć staram się nie popełniać
Chciałem poćwiczyć ze strukturami,więc napisałem na prędce coś takiego:
#include <mega32.h>
#include <stdio.h>
#include <lcd.h>
#include <string.h>
#include <stdlib.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
char lcd_buffer[33];
char test []="123456";
eeprom struct eeprom_structure {
char a;
int b;
char c[11];
} se[10]= {
{'a',1,"pierwszy"},
{'b',2,"drugi"},
{'c',3,"trzeci"}
};
void main(void)
{
lcd_init(16);
se[0].a='h'; //nowa wartośc .a
se[0].b=10; //nowa wartość .b
//Trzy próby - żadna z nich nie działa.. :(
//strcpy(se[0].c ,"nowy_tekst");
//strcpy(se[0].c,test);
//se[0].c="nowy tekst";
sprintf(lcd_buffer,"%c %u %s",se[0].a,se[0].b,se[0].c);
lcd_puts(lcd_buffer);
while (1);
}
Jak widać zadeklarowałem prostą strukturę w pamięci eeprom. Jej pierwsze trzy elementy są od razu inicjowane. Następnie chciałem zmienić te elementy programowo. Z elementem a (char) i elementem b (int) nie ma problemu. Schody zaczynają się dopiero ze stringiem.
analogicznie spróbowałem najpierw :
se[0].c="nowy tekst";
i otrzymałem przykrą wiadomość, że : the expression must be a modifiable lvalue
W zwykłym C uczyłem się ,że zadziała
strcpy(se[0].c ,"nowy_tekst");
Niestety Codevision wywala mi błąd :
function argument #1 of type 'eeprom unsigned char [11]' is incompatible with required parameter of type 'unsigned char *'
W końcu spróbowałem:
strcpy(se[0].c ,test);
też bez powodzenia.
Jak poprawnie przekazać nową wartość do pola c w tej strukturze ??
Dla wytrawnego programisty problem na pewno jest trywialny,ale niestety ja dopiero się uczę...
Pomóżcie, bo mi się świąteczne jajko w żolądku chce cofnąć....
Pozdrawiam !
Andrzej.
