Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR 3.10 долго пишит в еепром
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
arttab
не понял почему так получается.
пишу из одного масива в озу в другой мисив в еепром. оба unsigned char
компилятор использует __eeput16_8 (почему не __eeput8_8 не понял).
Мега8 на 8МГц. должно быть не более 1 мсек на байт
это если пишу в цикле:
while (i)
{*(ub) = *(uc);
uc++;
ub++;
i--;}
arttab
Блин, по даташиту 8,5 мсек. а один "байт быстропишится" так как в буфер. а так (4-1)*8,5мсек= 25 мсек. Буфер есть на 1 байт.
Понял.

Вопрос только почуму компилятор использует __eeput16_8, почему не __eeput8_8
prottoss
Цитата(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А... А что Вас смущает? Не нравится местная функция, напишите свою. Делов то там не много)
IgorKossak
Цитата(arttab @ Nov 2 2006, 10:19) *
Вопрос только почуму компилятор использует __eeput16_8, почему не __eeput8_8

Согласно документации атмега8 содержит 512 байт еепром, потому и адрес ячейки должен быть двухбайтовый (__eeput8_8 для однобайтовых адресов, т. е. для еепром размером 256 байт).
arttab
меня смутило вот что:
; __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 адрес
IgorKossak
Действительно странно.
В версиях 3.20d и 4.20a всё нормально.
prottoss
Цитата(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
IgorKossak
arttab, проверьте тип указателей ub и uc.
arttab
unsigned char __eeprom* ub;
unsigned char* uc;
unsigned char i=4;

Использую подключенй к проекту eeprom.s90
IgorKossak
Цитата(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 тоже ничего.
arttab
Файл дествительно Ваш, IgorKossak. Смотрел дизасемблер - все устроило кроме непонятки с __eeput16_8. Настройки проекта лень переносить под 4.12. А так новое уже на неи белаю. Спасибо всем за советы, пришлось сделать отложенный ответ и указывать время сколько меня не беспокить мастеру, пока я пишу.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.