roboforum.ru

Технический форум по робототехнике.

WinAvr, volatile и register

WinAvr, volatile и register

Michael_K » 19 сен 2010, 14:47

Кто знает, как в WinAVR из основной программы передать переменную в прерывание через регистр?

Re: WinAvr, volatile и register

Сергей » 19 сен 2010, 15:13

Требуется на асме или на Си? Чем не устраивает вариант глобальной static volatile?

Re: WinAvr, volatile и register

Michael_K » 19 сен 2010, 19:35

Прерывание оптимизирую.

Если использовать volatile, то получается ЖУТКИЙ код.
Мало того, что обращение к переменной занимает лишние 5 тактов (и регистр), так еще и этих обращений становится не в меру много. Кроме того, прерывание распухает за счет пушей и попов и т.д.
Регистров навалом - грех не использовать!

Программа пишется на си... прерывание возможно позже перепишу на асме, пока вроде си хватает, но не все бантики еще привязаны.

Вопрос вдогонку... (первый вопрос остается в силе!!!)
Задрал меня гнусный асм... У кого-то есть опыт линковки нормального ассемблера с гнусными объектниками?

Re: WinAvr, volatile и register

blindman » 19 сен 2010, 19:59

1. Переменную объявить как регистровую во всех компилируемых модулях
2. В прерывании это работает, вне прерываний оптимизатор обращения к такой переменной может выкинуть (volatile не поможет). Можно сделать так:
Код: Выделить всёРазвернуть
// R4:R5
#define variable (*((volatile int*)4))

3. Про использование внешних библиотек, в том числе стандартных, можно забыть

Re: WinAvr, volatile и register

Michael_K » 19 сен 2010, 20:14

1. Это само собой, хотя пока использую только "безопасные" r2-r7

2. Вот он их и выкидывает, собака...
Спасибо, сейчас попробую.

3. Ну... это только теоретически (на "безопасные" регистры никто вроде бы не покушается :))
(проверяю lss)

Добавлено спустя 10 минут 11 секунд:
Работает!
(хотя код и жутковат, впрочем ожидаемо...)

Re: WinAvr, volatile и register

blindman » 19 сен 2010, 20:18

Michael_K писал(а):на "безопасные" регистры никто вроде бы не покушается

Еще как покушается. А завтра компилятор обновите, и ваще все накроется :)

Re: WinAvr, volatile и register

Michael_K » 19 сен 2010, 20:29

Ну, в любом случае, деваться некуда :)
Компиляторы я храню с проектами - знаем мы эти приколы,
когда порядок передачи аргументов "вдруг" меняется на противоположный...

Re: WinAvr, volatile и register

Duhas » 20 сен 2010, 08:57

Да придет АСМ и спасет всех нас от греха!

звиняйте, не удержался :crazy:

Re: WinAvr, volatile и register

Michael_K » 20 сен 2010, 09:45

Гнусный асм спасет только ручная компиляция... :crazy:
Они меня даже на багзилле "забанили", а потом багзиллу винавровскую и вовсе закрыли :)
опенсорсники, млин - все через коленку :)

Re: WinAvr, volatile и register

avr123.nm.ru » 20 сен 2010, 09:58

CVAVR это сила !

Re: WinAvr, volatile и register

Michael_K » 20 сен 2010, 10:02

дада... рассказывайте :)

З.Ы. Вспомнилось, как intel после сообщения о мелких глючках (даже не багах)
в ихнем ассемблере, прислала исправленную версию на почту с извинениями...
лет надцать назад...
Разве сейчас такое возможно? Ээх...

Re: WinAvr, volatile и register

Duhas » 20 сен 2010, 19:24

ну то интель... у меня у друзей описалово на кучу семейств их процов лежит.. несколько толстых томиков.. прислали нахаляву...

Re: WinAvr, volatile и register

Michael_K » 20 сен 2010, 20:18

не... дело, имхо, не в интеле. А в том, что люди реально ответственно относились к своему труду.

Я не думаю, что сегодня даже интел ответит лично (да еще и извинится за потраченное тобой время),
максимум ответит что-то вроде "ваша заявка принята, если нам захочется, то может быть когда-нибудь мы на нее посмотрим"... а то и вообще ничего...
И уж точно никто не кинется исправлять баги или высылать тебе исправленное на почту.

Причины понятны, конечно... но "осадок остается"...
"Исторически сложилось", млин - всё объясняющие слова.


Rambler\'s Top100 Mail.ru counter