Технический форум по робототехнике.
Michael_K » 19 сен 2010, 14:47
Кто знает, как в WinAVR из основной программы передать переменную в прерывание через регистр?
Сергей » 19 сен 2010, 15:13
Требуется на асме или на Си? Чем не устраивает вариант глобальной static volatile?
Michael_K » 19 сен 2010, 19:35
Прерывание оптимизирую.
Если использовать volatile, то получается ЖУТКИЙ код.
Мало того, что обращение к переменной занимает лишние 5 тактов (и регистр), так еще и этих обращений становится не в меру много. Кроме того, прерывание распухает за счет пушей и попов и т.д.
Регистров навалом - грех не использовать!
Программа пишется на си... прерывание возможно позже перепишу на асме, пока вроде си хватает, но не все бантики еще привязаны.
Вопрос вдогонку... (первый вопрос остается в силе!!!)
Задрал меня гнусный асм... У кого-то есть опыт линковки нормального ассемблера с гнусными объектниками?
blindman » 19 сен 2010, 19:59
1. Переменную объявить как регистровую во
всех компилируемых модулях
2. В прерывании это работает, вне прерываний оптимизатор обращения к такой переменной может выкинуть (volatile не поможет). Можно сделать так:
- Код: Выделить всё • Развернуть
// R4:R5
#define variable (*((volatile int*)4))
3. Про использование внешних библиотек, в том числе стандартных, можно забыть
Michael_K » 19 сен 2010, 20:14
1. Это само собой, хотя пока использую только "безопасные" r2-r7
2. Вот он их и выкидывает, собака...
Спасибо, сейчас попробую.
3. Ну... это только теоретически (на "безопасные" регистры никто вроде бы не покушается

)
(проверяю lss)
Добавлено спустя 10 минут 11 секунд:Работает!
(хотя код и жутковат, впрочем ожидаемо...)
blindman » 19 сен 2010, 20:18
Michael_K писал(а):на "безопасные" регистры никто вроде бы не покушается
Еще как покушается. А завтра компилятор обновите, и ваще все накроется

Michael_K » 19 сен 2010, 20:29
Ну, в любом случае, деваться некуда

Компиляторы я храню с проектами - знаем мы эти приколы,
когда порядок передачи аргументов "вдруг" меняется на противоположный...
Duhas » 20 сен 2010, 08:57
Да придет АСМ и спасет всех нас от греха!
звиняйте, не удержался 
Michael_K » 20 сен 2010, 09:45
Гнусный асм спасет только ручная компиляция...
Они меня даже на багзилле "забанили", а потом багзиллу винавровскую и вовсе закрыли

опенсорсники, млин - все через коленку

avr123.nm.ru » 20 сен 2010, 09:58
CVAVR это сила !
Michael_K » 20 сен 2010, 10:02
дада... рассказывайте

З.Ы. Вспомнилось, как intel после сообщения о мелких глючках (даже не багах)
в ихнем ассемблере, прислала исправленную версию на почту с извинениями...
лет надцать назад...
Разве сейчас такое возможно? Ээх...
Duhas » 20 сен 2010, 19:24
ну то интель... у меня у друзей описалово на кучу семейств их процов лежит.. несколько толстых томиков.. прислали нахаляву...
Michael_K » 20 сен 2010, 20:18
не... дело, имхо, не в интеле. А в том, что люди реально ответственно относились к своему труду.
Я не думаю, что сегодня даже интел ответит лично (да еще и извинится за потраченное тобой время),
максимум ответит что-то вроде "ваша заявка принята, если нам захочется, то может быть когда-нибудь мы на нее посмотрим"... а то и вообще ничего...
И уж точно никто не кинется исправлять баги или высылать тебе исправленное на почту.
Причины понятны, конечно... но "осадок остается"...
"Исторически сложилось", млин - всё объясняющие слова.