реклама на сайте
подробности

 
 
> ATtiny + IAR, Проблемы с записью в EEPROM
Alex_St
сообщение Feb 10 2005, 22:28
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 26-11-04
Из: Одесса, Украина
Пользователь №: 1 240



Вопрос в следующем:
1. В IAR EWAVR 3.10 объявляю переменную
__no_init __eeprom uchar IR_Commands[IR_Max_Commands][IR_Max_Bytes];

Затем пробую в цикле в нее чего-нибудь записать. Например,
uchar i,j;
for (i = 0; i < 4; i++)
for (j = 0; j < 6; j++)
IR_Commands[i][j] = 0x12;
Казалось бы, в ячейки EEPROM 1 - 25 должны быть записаны 0x12.
А получается нечто типа:
:10000000FF1212FFFFFFFFFFFFFFFFFFFFFFFFFFDA
:10001000FFFFFFFFFF121212121212FFFFFFFFFF7E
:10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:00000001FF

Записанные программатором данные читаются нормально.

Причем в IAR 2.28 + AT90S2313 все работало нормально.
В чем может быть соль?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alex_St
сообщение Feb 11 2005, 12:20
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 26-11-04
Из: Одесса, Украина
Пользователь №: 1 240



Интересный факт - в опциях IAR ставлю Target device = AT90S2313 - все работает нормально. Но размер кода несколько больше. Ставлю Target = ATtiny2313 - появляются глюки с eeprom.

2 All: Помогите, плз, решить проблему!
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Feb 11 2005, 13:10
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(Alex_St @ Feb 11 2005, 15:20)
Помогите, плз, решить проблему!
*


Што тут посоветуешь - если хода нет, надо с бубей..

Хотя для начала я бы поостерегся и сделал так:

#define IR_Max_Commands xxx
#define IR_Max_Bytes yyy

__no_init __eeprom uchar IR_Commands[IR_Max_Commands][IR_Max_Bytes];

uchar i,j;
for (i = 0; i < IR_Max_Commands; i++)
{
for (j = 0; j < IR_Max_Bytes; j++)
{
IR_Commands[i][j] = 0x12;
}
}

excl.gif ассемблерный листинг посмотреть не помешает. excl.gif
и сравнить с листингом для 90S2313.
Может быть и ошибка в неадере ATtiny 2313 blink.gif

А вообще, если это глючит при смене процессора - начал бы с чего
попроще:


1.IR_Commands[0][0] = 0x12; // Так работает ?

2. а так ?
IR_Commands[0][0] = 0x12;
IR_Commands[0][1] = 0x12;
IR_Commands[5][5] = 0x12;

3. а так:
IR_Commands[0][0] = 0x12;
IR_Commands[0][1] = 0x12;
..
IR_Commands[3][5] = 0x12;

4. а так :
for (i = 0; i < IR_Max_Commands; i++)
{
for (j = 0; j < IR_Max_Bytes; j++)
{
IR_Commands[i][j] = 0x12; ofiget_nafik_kakoj_delay ();
}
}
smile.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
Alex_St
сообщение Feb 11 2005, 13:39
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 26-11-04
Из: Одесса, Украина
Пользователь №: 1 240



Цитата(-Tумблер- @ Feb 11 2005, 15:10)
Што тут посоветуешь - если хода нет, надо с бубей..

Хотя для начала я бы поостерегся и сделал так:

#define IR_Max_Commands xxx
#define IR_Max_Bytes yyy

__no_init __eeprom uchar IR_Commands[IR_Max_Commands][IR_Max_Bytes];

uchar i,j;
for (i = 0; i < IR_Max_Commands; i++)
{
for (j = 0; j < IR_Max_Bytes; j++)
{
IR_Commands[i][j] = 0x12;
}
}

Результат тот же.

Цитата
excl.gif  ассемблерный листинг посмотреть не помешает. excl.gif
и сравнить с листингом для 90S2313.
Может быть и ошибка в неадере ATtiny 2313  blink.gif


Посмотрим. Но в листинге для тини ничего криминального не нашел.
Хотя он получился довольно путанный. Надо поподробнее посмотреть.

Цитата
А вообще, если это глючит при смене процессора - начал бы с чего
попроще:


1.IR_Commands[0][0] = 0x12;  // Так работает ?


Да.

Цитата
2. а так ?
IR_Commands[0][0] = 0x12; 
IR_Commands[0][1] = 0x12; 
IR_Commands[5][5] = 0x12; 

3. а так:
IR_Commands[0][0] = 0x12; 
IR_Commands[0][1] = 0x12; 
..
IR_Commands[3][5] = 0x12; 


Да.

Цитата
4. а так :
for (i = 0; i < IR_Max_Commands; i++)
{
for (j = 0; j < IR_Max_Bytes; j++)
{
IR_Commands[i][j] = 0x12; ofiget_nafik_kakoj_delay ();
}
}
smile.gif
*


А так не работает.

Вариант
#define IR_Max_Commands xxx
#define IR_Max_Bytes yyy

__no_init __eeprom uchar IR_Commands[IR_Max_Commands][IR_Max_Bytes];

uchar i,j;
for (i = 0; i < IR_Max_Commands; i++)
{
IR_Commands[i][j] = i * 0x10;
}

работает отлично, а на вариант

#define IR_Max_Commands xxx
#define IR_Max_Bytes yyy

__no_init __eeprom uchar IR_Commands[IR_Max_Commands][IR_Max_Bytes];

uchar i,j;
for (i = 0; i < IR_Max_Commands; i++)
{
for (j = 0; j < IR_Max_Bytes; j++)
{
IR_Commands[i][j] = i * 0x10 +j;
}
}


в еепроме остается следующее:
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
:100010000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFED
:10002000FFFFFFFF303132333435FFFFFFFFFFFFAB
:10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:00000001FF


Возникает ощущуние, что он как-то путает индексы и пишет все в одно и то же место в 3й строке.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 20:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016