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

 
 
> 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, 16:27
Сообщение #2


Гуру
******

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



Ну, именно так рекомендует Атмел поступать. Вместе с IAR.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 3 2009, 17:33
Сообщение #3


Гуру
******

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



Цитата(DpInRock @ Dec 3 2009, 18:27) *
Вместе с IAR.
О! Вот оно что. Сразу бы и говорили. У ИАРа никаких процентов и нету. Поэтому встретив асм-вставку его оптимизатор поднимает лапки. А чтобы это обойти, они вынуждены вводить интринсик-функции даже на такое элементарное действие, как __no_operation(). Так и получается - сначала асм, выключающий оптимизатор, в следующей версии - интринсики. В теме совсем другой компилятор указан.


--------------------
На любой вопрос даю любой ответ
"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 Текстовая версия Сейчас: 20th August 2025 - 04:02
Рейтинг@Mail.ru


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