Ten temat pojawia się tu od czasu do czasu ale żadna z porad nie jest skuteczna w moim przypadku. Od paru godzin już męczę się z wpisaniem czegokolwiek pod EEPROM. I udało mi się to ale jedynie w asemblerze w którym mam już pewne doświadczenie. Próbowałem zarówno EEMEM jak i inne funkcje z nagłówka eeprom.h ale nic z tego.
Najbardziej obiecujący lecz także niedziałający listing w C:
Gdzie plik config.h
Po wywołaniu debugera daję na podgląd rejestrów EEPROM no i widzę że ładnie się rejestry przestawiają ale jak dochodzi do linijki:
To AVR Studiu za cholerę nie chce zmienić bitu EEWE. W asemblerze się wszystko udaje i bit zmienia swoją wartość ale w C nie chce. Dokładnie taka sama reakcja następuje kiedy program dochodzi do linijki:
I flaga nie chce zmienić wartości.
Problem dotyczy tylko tych dwóch flag i niczego więcej. Czy to jakiś błąd AVR Studio ? No bo przecież wszystko robię dobrze.
Na koniec dodam że stosowane funkcje eeprom.h kompilowały się bez błędów ale również nie działały i to nie ważne jaki ustawiłem parametr optymalizacji, próbowałem wszystkich.
Pomóżcie bo możliwe że sam nie dam rady.
Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
Najbardziej obiecujący lecz także niedziałający listing w C:
Code:
#include <avr/io.h>
#include "config.h"
#include <avr/eeprom.h>
int main(void)
{
int bOFdat;
int bOFdat1;
unsigned char B1 = 0b00001111;
unsigned char B2 = 0b01010101;
unsigned int A1 = 0x03;
unsigned int A2 = 0x02;
EEPROM_write(A1,B1);
EEPROM_write(A2,B2);
bOFdat = EEPROM_read(A1);
bOFdat1 = EEPROM_read(A2);
}
Gdzie plik config.h
Code:
void EEPROM_write (unsigned int uiAddres, unsigned char ucData)
{
while(EECR &(1<<EEWE));
EEDR=ucData;
EEAR=uiAddres;
EECR=(1<<EEMWE);
EECR=((1<<EEMWE)|(1<<EEWE));
}
unsigned char EEPROM_read(unsigned int uiAddress)
{
while(EECR & (1<<EERE));
EEAR = uiAddress;
EECR = (1<<EERE);
return EEDR;
}
Po wywołaniu debugera daję na podgląd rejestrów EEPROM no i widzę że ładnie się rejestry przestawiają ale jak dochodzi do linijki:
Code:
EECR=((1<<EEMWE)|(1<<EEWE));
To AVR Studiu za cholerę nie chce zmienić bitu EEWE. W asemblerze się wszystko udaje i bit zmienia swoją wartość ale w C nie chce. Dokładnie taka sama reakcja następuje kiedy program dochodzi do linijki:
Code:
EECR = (1<<EERE);
I flaga nie chce zmienić wartości.
Problem dotyczy tylko tych dwóch flag i niczego więcej. Czy to jakiś błąd AVR Studio ? No bo przecież wszystko robię dobrze.
Na koniec dodam że stosowane funkcje eeprom.h kompilowały się bez błędów ale również nie działały i to nie ważne jaki ustawiłem parametr optymalizacji, próbowałem wszystkich.
Pomóżcie bo możliwe że sam nie dam rady.
Proszę umieszczać listingi programów w znacznikach "Code". [c_p]