ну дак как можно присвоить это объявление в авр сдуии.Аlex писал(а):Это не функция, а объявление переменной в области eeprom.
Вот к чему приводят фичи компиляторов
AVR studio в вопросах и ответах
- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
- Реклама
Скорее всего никак. Это фишка CVAVR.
Курите хелп на тему чтения и записии в eeprom. Возможно, в студии есть встроенная библиотека для еепром.
Курите хелп на тему чтения и записии в eeprom. Возможно, в студии есть встроенная библиотека для еепром.
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
сделал
ошибка компиляции, вообщем не работает 
Код: Выделить всё
unsigned char Key EEMEM = 3;
void pass() {
unsigned char pas[3];
if (Key[6]==255) {
Key[0]='z';
Key[1]='z';
Key[2]='z';
}
putchar('E'); putchar('n'); putchar('t'); putchar('e'); putchar('r'); putchar(' ');
putchar('l'); putchar('a'); putchar('s'); putchar('t'); putchar(' ');
putchar('k'); putchar('e'); putchar('y');
putchar(13);
putchar(10);
pas[0]=getchar(); putchar('*');
pas[1]=getchar(); putchar('*');
pas[2]=getchar(); putchar('*');
putchar(13);
putchar(10);
if (
pas[0]==Key[0]&&
pas[1]==Key[1]&&
pas[2]==Key[2])
{
putchar('E'); putchar('n'); putchar('t'); putchar('e'); putchar('r'); putchar(' ');
putchar('n'); putchar('e'); putchar('w'); putchar(' ');
putchar('k'); putchar('e'); putchar('y');
putchar(13);
putchar(10);
Key[0]=getchar(); putchar(Key[0]);
Key[1]=getchar(); putchar(Key[1]);
Key[2]=getchar(); putchar(Key[2]);
putchar(13);
putchar(10);
putchar('n'); putchar('e'); putchar('w'); putchar(' ');
putchar('k'); putchar('e'); putchar('y'); putchar(' ');
putchar(Key[0]);
putchar(Key[1]);
putchar(Key[2]);
putchar(13);
putchar(10);
}
else {
putchar('I'); putchar('n'); putchar('c'); putchar('o'); putchar('r'); putchar('e'); putchar('c'); putchar('t'); putchar(13);putchar(10);
}
}
int main(void)
{
temp=Key[0]^Key[1]^Key[2];
while(1)
{
}
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
так может быть:
на всякий почитать: http://samou4ka.net/page/chtenie-i-zapi ... m-v-winavr
Код: Выделить всё
#include <avr/io.h>
#include <avr/eeprom.h>
unsigned char EEMEM Key[10];
int main(void)
{
if (eeprom_read_byte(&Key[6])==255) {
PORTB &= ~(1<<PB4);}
}
- Реклама
- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
что то не выходит нечего
мне нужно прочитать с памяти и записать пасс в кодвижене это проще сделать, тут же не понятно нечего. хелп ми 
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
а что непонятно?
Код: Выделить всё
Теперь объявим переменную в EEPROM и поработаем с ней:
unsigned char eeVar EEMEM = 200;//byte
Чтение/запись байта
unsigned char myVar;
myVar = eeprom_read_byte(&eeVar);//читаем содержимое переменной
myVar = 100;//изменяем значение
eeprom_write_byte(&eeVar, myVar); // записываем новые данные в EEPROM- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
непонятно то что непонятно как это будет с моим кодом выглядеть, вообще не врубаюсь нечерта 
Неужели не лень писать столько букавок лишних?
Можно ж сделать функцию использовать так :
и выводить сразу целой строкой 
точно так же можно сравнивать строки
Код: Выделить всё
putchar('I'); putchar('n'); putchar('c'); putchar('o'); putchar('r'); putchar('e'); putchar('c'); putchar('t'); putchar(13);putchar(10); Код: Выделить всё
fputstr("Incorrect"); точно так же можно сравнивать строки
Код: Выделить всё
if(strequal(key,pass)){ /*тут делаем все что нужно*/}
Последний раз редактировалось vitalik_1984 Пн ноя 25, 2013 22:37:50, всего редактировалось 1 раз.
А я говорил:kotriks писал(а):непонятно то что непонятно как это будет с моим кодом выглядеть, вообще не врубаюсь нечерта
Аlex писал(а):Вот к чему приводят фичи компиляторов
Учитесь ручками управлять ресурсами МК, а не встроенными фичами в компилятор, тогда будет вам Щастье
kotriks, Выложили бы сразу архив с программой вам бы его за пару кило денерыбы с радостью портировали в студию.
А как же спортивный интерес, научиться, понять, .... Так можно и готовое устройство заказать/купить 
- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
сделал так но при запроссе пароля при нажатии первого любово символа в окне эмуля протеуса ошибка
не даёт ввести вообщем.
помогите люди добрые.
Код: Выделить всё
unsigned char EEMEM Key[10];
unsigned char EEMEM Key[] = {
'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'};
void pass() {
unsigned char pas[10];
unsigned int i,value;
//if (Key[6]==255) {
if (eeprom_read_byte(&Key[i])==255){
Key[0]='z';
Key[1]='z';
Key[2]='z';
Key[3]='z';
Key[4]='z';
Key[5]='z';
Key[6]='z';
Key[7]='z';
Key[8]='z';
Key[9]='z';
}
putchar('E'); putchar('n'); putchar('t'); putchar('e'); putchar('r'); putchar(' ');
putchar('l'); putchar('a'); putchar('s'); putchar('t'); putchar(' ');
putchar('k'); putchar('e'); putchar('y');
putchar(13);
putchar(10);
/*
pas[0]=getchar(); putchar(pas[0]);
pas[1]=getchar(); putchar(pas[1]);
pas[2]=getchar(); putchar(pas[2]);
pas[3]=getchar(); putchar(pas[3]);
pas[4]=getchar(); putchar(pas[4]);
pas[5]=getchar(); putchar(pas[5]);
pas[6]=getchar(); putchar(pas[6]);
pas[7]=getchar(); putchar(pas[7]);
pas[8]=getchar(); putchar(pas[8]);
pas[9]=getchar(); putchar(pas[9]);
putchar(13);
putchar(10);
*/
value = eeprom_read_byte( &pas[0] ); putchar(pas[0]);
eeprom_write_byte( &pas[0], value =getchar()); //getchar();
value = eeprom_read_byte( &pas[1] );
eeprom_write_byte( &pas[1], value ); putchar(pas[0]);
value = eeprom_read_byte( &pas[2] );
eeprom_write_byte( &pas[2], value ); putchar(pas[0]);
value = eeprom_read_byte( &pas[3] );
eeprom_write_byte( &pas[3], value ); putchar(pas[0]);
value = eeprom_read_byte( &pas[4] );
eeprom_write_byte( &pas[4], value ); putchar(pas[0]);
value = eeprom_read_byte( &pas[5] );
eeprom_write_byte( &pas[5], value ); putchar(pas[0]);
value = eeprom_read_byte( &pas[6] );
eeprom_write_byte( &pas[6], value ); putchar(pas[0]);
value = eeprom_read_byte( &pas[7] );
eeprom_write_byte( &pas[7], value ); putchar(pas[0]);
value = eeprom_read_byte( &pas[8] );
eeprom_write_byte( &pas[8], value ); putchar(pas[0]);
value = eeprom_read_byte( &pas[9] );
eeprom_write_byte( &pas[9], value ); putchar(pas[0]);
}
}
помогите люди добрые.
Какая ? На какой строке кода она вылезает ?в окне эмуля протеуса ошибка
Нельзя вот так давать огромный кусок кода и говорить "не работает, помогите"
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
что не работает?

Спойлер
Код: Выделить всё
#include <avr/io.h>
#include <avr/eeprom.h>
unsigned char EEMEM Key[10]={'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'};
unsigned char pas[10];
#define F_CPU 8000000UL
#define BAUD 9600l
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
void uinit (void){
UCSR0C |= (3<<UCSZ00);
//Baudrate (high und low byte)
UBRR0H = (unsigned char)(UBRR_VAL>>8);
UBRR0L = (unsigned char)UBRR_VAL;
UCSR0B |= (1<<RXCIE0) | (1<<TXEN0) | (1<<RXEN0);
}
void uputc(unsigned char c){
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0=c;
}
unsigned char ugetc(){
while (!(UCSR0A & (1<<RXC0)));
return UDR0;
}
int main(void)
{
uinit();
uputc('E'); uputc('n'); uputc('t'); uputc('e'); uputc('r'); uputc(' ');
uputc('l'); uputc('a'); uputc('s'); uputc('t'); uputc(' ');
uputc('k'); uputc('e'); uputc('y');
uputc(13);
uputc(10);
while (1)
{
pas[0]=ugetc(); uputc(pas[0]);
pas[1]=ugetc(); uputc(pas[1]);
pas[2]=ugetc(); uputc(pas[2]);
pas[3]=ugetc(); uputc(pas[3]);
pas[4]=ugetc(); uputc(pas[4]);
pas[5]=ugetc(); uputc(pas[5]);
pas[6]=ugetc(); uputc(pas[6]);
pas[7]=ugetc(); uputc(pas[7]);
pas[8]=ugetc(); uputc(pas[8]);
pas[9]=ugetc(); uputc(pas[9]);
uputc(13);
uputc(10);
}
}Спойлер

- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
а где ввод старого пароля чтобы сверяло zzzzzzzzzz ввожу и он просто пишет не правильный пас и не даёт ввести новый чтобы его сменить
Код: Выделить всё
if (Key[6]==255) {
Key[0]='z';
Key[1]='z';
Key[2]='z';
Key[3]='z';
Key[4]='z';
Key[5]='z';
Key[6]='z';
Key[7]='z';
Key[8]='z';
Key[9]='z';
}- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Непонятна задача:
1 прочитать пароль из еепром
2 ждать ввода пароля
3 если пароль введен правильно - ввести новый пароль и записать его в еепром
так?
1 прочитать пароль из еепром
2 ждать ввода пароля
3 если пароль введен правильно - ввести новый пароль и записать его в еепром
так?
- Сообщения: 274
- Зарегистрирован: Чт апр 28, 2011 15:08:58
да так. в кодвижене это работает нормально если стоит такoleg110592 писал(а):Непонятна задача:
1 прочитать пароль из еепром
2 ждать ввода пароля
3 если пароль введен правильно - ввести новый пароль и записать его в еепром
так?
Код: Выделить всё
eeprom unsigned char Key[10];
void pass() {
unsigned char pas[10];
if (Key[6]==255) {
Key[0]='z';
Key[1]='z';
Key[2]='z';
Key[3]='z';
Key[4]='z';
Key[5]='z';
Key[6]='z';
Key[7]='z';
Key[8]='z';
Key[9]='z';
}
putchar('E'); putchar('n'); putchar('t'); putchar('e'); putchar('r'); putchar(' ');
putchar('l'); putchar('a'); putchar('s'); putchar('t'); putchar(' ');
putchar('k'); putchar('e'); putchar('y');
putchar(13);
putchar(10);
pas[0]=getchar(); putchar('*');
pas[1]=getchar(); putchar('*');
pas[2]=getchar(); putchar('*');
pas[3]=getchar(); putchar('*');
pas[4]=getchar(); putchar('*');
pas[5]=getchar(); putchar('*');
pas[6]=getchar(); putchar('*');
pas[7]=getchar(); putchar('*');
pas[8]=getchar(); putchar('*');
pas[9]=getchar(); putchar('*');
putchar(13);
putchar(10);
if (
pas[0]==Key[0]&&
pas[1]==Key[1]&&
pas[2]==Key[2]&&
pas[3]==Key[3]&&
pas[4]==Key[4]&&
pas[5]==Key[5]&&
pas[6]==Key[6]&&
pas[7]==Key[7]&&
pas[8]==Key[8]&&
pas[9]==Key[9])
{
putchar('E'); putchar('n'); putchar('t'); putchar('e'); putchar('r'); putchar(' ');
putchar('n'); putchar('e'); putchar('w'); putchar(' ');
putchar('k'); putchar('e'); putchar('y');
putchar(13);
putchar(10);
Key[0]=getchar(); putchar(Key[0]);
Key[1]=getchar(); putchar(Key[1]);
Key[2]=getchar(); putchar(Key[2]);
Key[3]=getchar(); putchar(Key[3]);
Key[4]=getchar(); putchar(Key[4]);
Key[5]=getchar(); putchar(Key[5]);
Key[6]=getchar(); putchar(Key[6]);
Key[7]=getchar(); putchar(Key[7]);
Key[8]=getchar(); putchar(Key[8]);
Key[9]=getchar(); putchar(Key[9]);
putchar(13);
putchar(10);
putchar('n'); putchar('e'); putchar('w'); putchar(' ');
putchar('k'); putchar('e'); putchar('y'); putchar(' ');
putchar(Key[0]);
putchar(Key[1]);
putchar(Key[2]);
putchar(Key[3]);
putchar(Key[4]);
putchar(Key[5]);
putchar(Key[6]);
putchar(Key[7]);
putchar(Key[8]);
putchar(Key[9]);
putchar(13);
putchar(10);
putchar(13);
putchar(10);
reboot();
} else {
putchar('I'); putchar('n'); putchar('c'); putchar('o'); putchar('r'); putchar('e'); putchar('c'); putchar('t'); putchar(13);putchar(10);
}
}
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
так пойдет?
Спойлер
Код: Выделить всё
#include <avr/io.h>
#include <avr/eeprom.h>
unsigned char EEMEM Key[10]={"zzzzzzzzzz"};
#define F_CPU 8000000UL
#define BAUD 9600l
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
void uinit (void){
UCSR0C |= (3<<UCSZ00);
//Baudrate (high und low byte)
UBRR0H = (unsigned char)(UBRR_VAL>>8);
UBRR0L = (unsigned char)UBRR_VAL;
UCSR0B |= (1<<RXCIE0) | (1<<TXEN0) | (1<<RXEN0);
}
void uputc(unsigned char c){
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0=c;
}
unsigned char ugetc(){
while (!(UCSR0A & (1<<RXC0)));
return UDR0;
}
void uputs (unsigned char *s){ //string send
while(*s) uputc(*s++);
}
void SetDefaultPassword()
{
unsigned char i;
if(eeprom_read_byte(&Key[6]) == 255) {
for(i=0; i<10; i++) {
eeprom_write_byte(&Key[i], 'z');
}
}
}
void GetPassword()
{
unsigned char pas[10], i;
SetDefaultPassword();
uputs((unsigned char*)"Enter last key\n\r");
for(i=0; i<10; i++) {
pas[i]=ugetc(); uputc('*');
}
uputc(13);
uputc(10);
if(
pas[0]==eeprom_read_byte(&Key[0])&&
pas[1]==eeprom_read_byte(&Key[1])&&
pas[2]==eeprom_read_byte(&Key[2])&&
pas[3]==eeprom_read_byte(&Key[3])&&
pas[4]==eeprom_read_byte(&Key[4])&&
pas[5]==eeprom_read_byte(&Key[5])&&
pas[6]==eeprom_read_byte(&Key[6])&&
pas[7]==eeprom_read_byte(&Key[7])&&
pas[8]==eeprom_read_byte(&Key[8])&&
pas[9]==eeprom_read_byte(&Key[9]) ) {
uputs((unsigned char*)"Enter new key\n\r");
for(i=0; i<10; i++) {
eeprom_write_byte(&Key[i], ugetc());
uputc(eeprom_read_byte(&Key[i]));
}
uputc(13);
uputc(10);
uputs((unsigned char*)"new key ");
for(i=0; i<10; i++) {
uputc(eeprom_read_byte(&Key[i]));
}
uputc(13);
uputc(10);
}
else {
uputs((unsigned char*)"Incorect\n\r");
}
}
int main(void)
{
uinit();
while (1)
{
GetPassword();
}
}


