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

 
 
> 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
Ответов
Сергей Борщ
сообщение Dec 1 2009, 08:11
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



-O0 - это не оптимизация, это ее полное отключение. В вашем случае адрес регистра CCP описан как математическое выражение, которое компилятор может вычислить при включенной оптимизации, но вынужден оставить выражением и считать на этапе выполнения, поскольку оптимизацию даже выражений вида 1+1 вы запретили.
Цитата(MrKot @ Dec 1 2009, 09:07) *
PS С любой оптимизацией кроме -O0 работает
Вот и не отключайте ее. Без оптимизации код разбухает и становится медленнее в разы и не имеет ничего общего с тем кодом, который будет у вас работать в боевом устройстве. Просто запомните, что -O0 включать не нужно никогда. Для AVR используйте -Os или -О2. Обычно лучшие результаты дает -Os.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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