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

 
 
 
Reply to this topicStart new topic
> IAR 3.10 долго пишит в еепром, 25 мсек 4 Байта
arttab
сообщение Nov 2 2006, 07:56
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



не понял почему так получается.
пишу из одного масива в озу в другой мисив в еепром. оба unsigned char
компилятор использует __eeput16_8 (почему не __eeput8_8 не понял).
Мега8 на 8МГц. должно быть не более 1 мсек на байт
это если пишу в цикле:
while (i)
{*(ub) = *(uc);
uc++;
ub++;
i--;}


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
arttab
сообщение Nov 2 2006, 08:19
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Блин, по даташиту 8,5 мсек. а один "байт быстропишится" так как в буфер. а так (4-1)*8,5мсек= 25 мсек. Буфер есть на 1 байт.
Понял.

Вопрос только почуму компилятор использует __eeput16_8, почему не __eeput8_8


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 2 2006, 08:46
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(arttab @ Nov 2 2006, 15:19) *
Блин, по даташиту 8,5 мсек. а один "байт быстропишится" так как в буфер. а так (4-1)*8,5мсек= 25 мсек. Буфер есть на 1 байт.
Понял.
Вопрос только почуму компилятор использует __eeput16_8, почему не __eeput8_8
Скомпилил только что вот такой текст:

Код
UCHAR sram[32];
UCHAR __eeprom eeprm[32];

__C_task main(void)
{
   UCHAR *sramp = sram;
    UCHAR __eeprom *eeprmp = eeprm;
   UCHAR i = 32;

    while(i--)
               *eeprmp++ = *sramp++;

}
То же самое на асме:

Код


  26              while(i--)
     27                *eeprmp++ = *sramp++;
   \                     ??main_1:
   \   0000000C   8100               LD      R16, Z
   \   0000000E   01A9               MOVW    R21:R20, R19:R18
   \   00000010   ........           CALL    __eeput8_16
   \   00000014   9631               ADIW    R31:R30, 1
   \   00000016   5F2F               SUBI    R18, 255
   \   00000018   4F3F               SBCI    R19, 255
     28              
   \                     ??main_0:
   \   0000001A   2F01               MOV     R16, R17
   \   0000001C   2F10               MOV     R17, R16
   \   0000001E   951A               DEC     R17
   \   00000020   2300               TST     R16
   \   00000022   F7A1               BRNE    ??main_1


У меня ИАР версии 4.10А... А что Вас смущает? Не нравится местная функция, напишите свою. Делов то там не много)


--------------------
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 2 2006, 09:28
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(arttab @ Nov 2 2006, 10:19) *
Вопрос только почуму компилятор использует __eeput16_8, почему не __eeput8_8

Согласно документации атмега8 содержит 512 байт еепром, потому и адрес ячейки должен быть двухбайтовый (__eeput8_8 для однобайтовых адресов, т. е. для еепром размером 256 байт).
Go to the top of the page
 
+Quote Post
arttab
сообщение Nov 2 2006, 10:06
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



меня смутило вот что:
; __eeput16_8
;
; To write one int to the internal eeprom using 8-bit addresses
;
; Inputs:
; P0...P1 - The int to write to the eeprom.
; Q0 - The address of the int to write
P0...P1 это типа данные, Q0 адрес


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 2 2006, 12:25
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Действительно странно.
В версиях 3.20d и 4.20a всё нормально.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 2 2006, 13:16
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(IgorKossak @ Nov 2 2006, 19:25) *
Действительно странно.
В версиях 3.20d и 4.20a всё нормально.
Обратите внимание: в кодах, что приводил я выше не __eeput16_8 , а __eeput8_16 , для которой:



Код
;----------------------------------------------------------
; __eeput8_16
;
; [b]To write one char to the internal eeprom using 16-bit addresses[/b]
;
; Inputs:
;   P0  - The char to write to the eeprom.
;   Q0...Q1 - The address of the char to write
;
; Outputs:
;   Q0...Q1 - The address of the next char
;
; SIZE: 8 bytes

    RSEG    CODE:CODE:NOROOT(1)
__eeput8_16:
    IN  T0,SREG
    RCALL   ?eewait
    OUT EEDR,P0
    RJMP    ?eeput16


Из фала avr\src\lib\eeprom.s90... Текст компилился для М16


--------------------
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 2 2006, 17:03
Сообщение #8


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



arttab, проверьте тип указателей ub и uc.
Go to the top of the page
 
+Quote Post
arttab
сообщение Nov 3 2006, 03:39
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



unsigned char __eeprom* ub;
unsigned char* uc;
unsigned char i=4;

Использую подключенй к проекту eeprom.s90
Прикрепленные файлы
Прикрепленный файл  eeprom.zip ( 3.59 килобайт ) Кол-во скачиваний: 55
 


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 3 2006, 07:41
Сообщение #10


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(arttab @ Nov 3 2006, 05:39) *
unsigned char __eeprom* ub;
unsigned char* uc;
unsigned char i=4;

Тогда всё ещё более странно.
Цитата(arttab @ Nov 3 2006, 05:39) *
Использую подключенй к проекту eeprom.s90

Не смотрел в архиве, но подключать eeprom.s90 к проекту нужно только если Вы его правите под свои нужды (скажем, для поддержки ОС).
В предкомпилированном виде этот файл уже присутствует во всех библиотеках.

Ба! Так это ж мой файл!
Не думал, что станет популярным.

Кстати, arttab, почему бы Вам не перейти на версию поновее.
Последняя наиболее стабильная из троек была 3.20D.
4.20A тоже ничего.
Go to the top of the page
 
+Quote Post
arttab
сообщение Nov 7 2006, 03:34
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Файл дествительно Ваш, IgorKossak. Смотрел дизасемблер - все устроило кроме непонятки с __eeput16_8. Настройки проекта лень переносить под 4.12. А так новое уже на неи белаю. Спасибо всем за советы, пришлось сделать отложенный ответ и указывать время сколько меня не беспокить мастеру, пока я пишу.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:59
Рейтинг@Mail.ru


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