|
WinAVR: Cовмещение Си и ассемблера |
|
|
|
Feb 9 2012, 11:23
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Здраствуйте ! Использовал пример из статьи: http://we.easyelectronics.ru/AVR/avr-gcc-s...om-proekte.html"AVR-GCC: Совмещение C и ассемблера в одном проекте ". Начал править makefile, которым я обычно пользуюсь, но при указании Assembler source files... получил error: Oops, ASRC not found ! Не понимаю что не так делаю ! В чем может быть проблема ?
|
|
|
|
|
 |
Ответов
|
Feb 19 2012, 14:58
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Непонимаю смысл вставки: Код asm volatile("" : "+r" (Cnt_Dl)); В конкретном случае проблема "заоптимизации" решается вставкой volatile перед register uint16_t Cnt_Dl asm("r18");Так что в данном случае квалификатор работает, посмотрю как будет дальше ...
|
|
|
|
|
Feb 19 2012, 17:51
|

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

|
QUOTE (MaxiMuz @ Feb 19 2012, 16:58)  Непонимаю смысл вставки: CODE asm volatile("" : "+r" (Cnt_Dl)); Она говорит о том, что в результате этой вставки значение Cnt_Dl изменится и, следовательно, компилятор должен использовать новое значение, а не полагаться на знание старого. QUOTE (MaxiMuz @ Feb 19 2012, 16:58)  В конкретном случае проблема "заоптимизации" решается вставкой volatile перед register uint16_t Cnt_Dl asm("r18"); Удивительный человек. В документации ясно сказано - volatile совместно с register работает непредсказуемо, использовать такую связку нельзя. Нет же, мы аккуратно разложим грабли и любовно отполируем ручку, видимо, чтобы получить по лбу побольнее. Добавлено: извиняюсь, полистал документацию и не нашел явного упоминания запрета связки register volatile. Гугля по фразе "gcc register volatile" выдает кучу ссылок на формы и баг-репорты gcc, но ни одной ссылки на документацию. Пройдя по этим ссылкам можно узнать, что эта связка не работает, что компилятор по -Wall и/или -Wextra должен на такую конструкцию выдавать проедупреждение "volatile register variables don%'t work as you might wish" и что лечить это не собираются.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 19 2012, 18:19
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Цитата(Сергей Борщ @ Feb 19 2012, 20:13)  Удивительный человек. В документации ясно сказано - volatile совместно с register работает непредсказуемо, использовать такую связку нельзя. Нет же, мы аккуратно разложим грабли и любовно отполируем ручку, видимо, чтобы получить по лбу побольнее. Где именно это сказанно в документации ?? Согласитесь что применительно к программе-компилятору слово "непредсказуемо" имеет условный смысл! Программа работает по определенному алгоритму , и пусть этот работа этого алгоритма не задокументирована. Но нельзя сказать что здесь имеет место случайность  .. Так вот я сейчас провожу исследование  , как именно влияет на задействование (оптимизацию ) регистровых переменных применение или неприменение volatile . За что конечно не могу сказать спасибо создателям этого компилятора. Но тем не менее уже проследил некоторые закономерности работы. Испробованы пока не все случаи... Хочу потом все это оформить в удобочитаемую форму. Если вам будет интересно , я первому сообщу как будет готово. п.с. Да действительно соглашусь , volatile применительно к регис.перем. не хрена ни работает так, как описано в официальной документации. Пока единственное что могу добавить что его применение здесь всеже в некоторых случаях оправданно.
|
|
|
|
|
Feb 20 2012, 08:54
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (MaxiMuz @ Feb 20 2012, 02:19)  Где именно это сказанно в документации ?? Согласитесь что применительно к программе-компилятору слово "непредсказуемо" имеет условный смысл! Программа работает по определенному алгоритму , и пусть этот работа этого алгоритма не задокументирована. Но нельзя сказать что здесь имеет место случайность  .. Почему же? Программа компилятор - тоже программа, также может быть написана абы как. Она может принимать решения в зависимости от контекста - Вашей программы. Вот и получается случайность.
--------------------
Выбор.
|
|
|
|
|
Feb 21 2012, 19:40
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Цитата(haker_fox @ Feb 20 2012, 11:54)  Она может принимать решения в зависимости от контекста - Вашей программы. Вот и получается случайность. Контекста какого ? названия переменных, количество их упоминания, или всеже использование р.п. в стандартных конструкциях (for, if, case, и т.д.) , в выражениях присваивания или же в мат.выражениях ? Сейчас столкнулся с следующей проблемой! в заголовочном файле пишу: Код #ifdef __ASSEMBLER__ ...... # define GenCnt r19 ...... #else /* !ASSEMBLER */ ...... register uint8_t GenCnt asm("r19"); ...... #endif /* ASSEMBLER */ компилятор мне говорит что переменная, обьявленная в Си, может быть затерта. Но я так понимаю это относится именно к Сишному куску программы. Заглянул в код , а там в Ассемблерном куске регистор r19 везде заменен на r16 , который уже используется совместно в другом месте! После того как я заменил Makefile на файл из стандарт.папки asmdemo все нормально скомпилировалось. На что следует обратить внимание в этом файле ? Что может влиять на использование регистровых переменных в асме ?
|
|
|
|
Сообщений в этой теме
MaxiMuz WinAVR: Cовмещение Си и ассемблера Feb 9 2012, 11:23 demiurg_spb Makefile в студию... Feb 9 2012, 11:35 haker_fox QUOTE (MaxiMuz @ Feb 9 2012, 19:23) Здрас... Feb 9 2012, 12:35 MaxiMuz Цитата(haker_fox @ Feb 9 2012, 15:35) А В... Feb 9 2012, 16:06  demiurg_spb Это ваш реальный мейкфайл из проекта?
В вашем теку... Feb 9 2012, 16:15   MaxiMuz Цитата(demiurg_spb @ Feb 9 2012, 19:15) Э... Feb 9 2012, 16:20    demiurg_spb Цитата(MaxiMuz @ Feb 9 2012, 19:20) Да, в... Feb 10 2012, 05:40     Сергей Борщ QUOTE (demiurg_spb @ Feb 10 2012, 07:40) ... Feb 10 2012, 12:00  haker_fox QUOTE (MaxiMuz @ Feb 10 2012, 00:06) Счит... Feb 12 2012, 06:05   MaxiMuz Цитата(haker_fox @ Feb 12 2012, 09:05) Эт... Feb 12 2012, 16:45   MaxiMuz Цитата(haker_fox @ Feb 12 2012, 09:05) Эт... Feb 14 2012, 11:50 MaxiMuz Цитата(haker_fox @ Feb 9 2012, 15:35) Здр... Feb 14 2012, 11:05  demiurg_spb потому что по умолчанию всё берётся из текущего ка... Feb 14 2012, 11:39   MaxiMuz Цитата(demiurg_spb @ Feb 14 2012, 14:39) ... Feb 14 2012, 11:44    demiurg_spb Что задаётся?
Чтобы искалось в других каталогах?
И... Feb 14 2012, 11:46  haker_fox QUOTE (MaxiMuz @ Feb 14 2012, 19:05) в AS... Feb 15 2012, 00:49 MaxiMuz Да, вручную все добавляется и успешно собирается д... Feb 10 2012, 08:39 MaxiMuz В демо-проекте "совмещение Си и ассемблера... Feb 11 2012, 18:18 Сергей Борщ QUOTE (MaxiMuz @ Feb 11 2012, 20:18) Где ... Feb 11 2012, 21:06 ReAl Я давно в makefile проекта перестал вписывать отде... Feb 12 2012, 11:16 haker_fox QUOTE (ReAl @ Feb 12 2012, 19:16) Я давно... Feb 13 2012, 13:58  ReAl Цитата(haker_fox @ Feb 13 2012, 15:58) Мн... Feb 14 2012, 16:45 MaxiMuz новый вопрос:
Для обращения к байтовой регистрово... Feb 12 2012, 18:03 demiurg_spb Цитата(MaxiMuz @ Feb 12 2012, 21:03) А ка... Feb 13 2012, 05:19 _Ivana Спасибо за упоминание про Makefile. Только что пыт... Feb 13 2012, 19:01 haker_fox QUOTE (_Ivana @ Feb 14 2012, 03:01) пропи... Feb 14 2012, 02:12 MaxiMuz Всем спасибо за разьяснение в особенности haker_fo... Feb 15 2012, 17:58 Сергей Борщ QUOTE (MaxiMuz @ Feb 15 2012, 19:58) В че... Feb 15 2012, 20:42  MaxiMuz Цитата(Сергей Борщ @ Feb 15 2012, 23:42) ... Feb 16 2012, 08:20   Сергей Борщ QUOTE (MaxiMuz @ Feb 16 2012, 10:20) поче... Feb 16 2012, 09:31     Сергей Борщ Я никогда не использовал регистровые переменные, н... Feb 21 2012, 23:53 slavik.ksu здравствуй те уважаемые форумчане!
Перехожу н... Feb 22 2012, 06:08 demiurg_spb КодISR ( USART_RX_vect )
{
switch ... Feb 22 2012, 06:36 slavik.ksu Оказывается в конструкции switch строка выполняетс... Feb 22 2012, 06:42 slavik.ksu Оказывается в конструкции switch строка выполняетс... Feb 22 2012, 06:43 ReAl Смотря что имеется ввиду под словом «выполняется»
... Feb 22 2012, 07:49 MaxiMuz Цитата(Сергей Борщ @ Feb 22 2012, 02:53) ... Feb 22 2012, 07:50 MaxiMuz Цитата(MaxiMuz @ Feb 22 2012, 10:50) Так ... Feb 22 2012, 10:02 ReAl Кстати, да.
Если кто-то из модераторов перенесёт в... Feb 22 2012, 11:16
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|