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

 
 
> WinAVR, проблемы с оптимизацией -O0, xmega, winavr, проблема с драйвером clksys_driver
MrKot
сообщение Dec 1 2009, 07:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 23-07-08
Пользователь №: 39 158



Решил во время отладки включить оптимизацию -O0, но тут компилятор выдал ошибку
constant value required. Покопался и нашел причину ошибки:
драйвер clksys_driver (из апноута), конкретно функция CCPWrite, а еще конкретнее:
Код
asm volatile(
        "movw r30,  %0"    "\n\t"
        "ldi  r16,  %2"    "\n\t"
        "out   %3, r16"    "\n\t"
        "st     Z,  %1"
        :
        : "r" (tmpAddr), "r" (value), "M" (CCP_IOREG_gc), "m" (CCP)
        : "r16", "r30", "r31"
        );

разбил блок на строки оказалась проблема в:

out %3, r16

В асме не силен, по этому прошу помощи знающих людей - в чем может быть проблема? Может быть есть другое решение работы с CCP? (хотя врядли тут без асма обойдешься...)

PS С любой оптимизацией кроме -O0 работает
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DpInRock
сообщение Dec 3 2009, 13:54
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



В xmega на модификацию защищенных регистров отводится ровно 4 цикла.

Код
void CCPWrite( volatile unsigned char * address, unsigned char value )
{
// Move destination address pointer to Z pointer registers.
    asm("movw r30, r16");
#ifdef RAMPZ
    asm("ldi  R16, 0 \n"
            "out  0x3B, R16"
        );
#endif
    asm("ldi  r16,  0xD8 \n"
        "out  0x34, r16  \n"
#if (__MEMORY_MODEL__ == 1)
        "st     Z,  r17  \n");
#elif (__MEMORY_MODEL__ == 2)
        "st     Z,  r18  \n");
#else /* (__MEMORY_MODEL__ == 3) || (__MEMORY_MODEL__ == 5) */
        "st     Z,  r19  \n");
#endif /* __MEMORY_MODEL__ */

}

У меня вот такая хрень работает. Без всяких процентов.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th June 2025 - 21:45
Рейтинг@Mail.ru


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