Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт июн 24, 2025 20:05:31

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7952 ]    , , , , 5, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 16:59:30 
Нашел транзистор. Понюхал.

Зарегистрирован: Вт июл 10, 2007 23:15:17
Сообщений: 167
Откуда: Магнитогорск
Рейтинг сообщения: 0
biDE писал(а):
может включен режим совместимости с мега103, как здесь

http://www.radiokot.ru/forum/viewtopic.php?t=8985

блин если я отключаю режим совместимости с мега103 то переход к подпраграммам начинает работать зато основная прога ведёт себя не адекватно
вот какие у меня фузы:
^------это галочка
^-SUT0
^-BOOTSZ0
^-BOOTSZ1
^-JTAGEN

если поставлю ^-M103C то прога работает нормально а вот с RCALL начинаются проблемы
кварц использую на 8мГц
что не так помогите


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 18:34:29 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт июл 31, 2007 20:32:30
Сообщений: 174
Откуда: Киев, Украина
Рейтинг сообщения: 0
Цитата:
оформите таблицу векторов прерываний, как положено

помогло, я просто описал все прерывания, но так и не понял, как быть если я использую только RESET и USART_RXC ?
Цитата:
используйте конструкцию

не понял как пользоваться этой конструкцией
Цитата:
кто вас научил так оформлять таблицу векторов прерываний?!

помоему из примера в книге Микроконтроллеры AVR. Вводный курс.
Цитата:
посмотрите в АСМ листинге (файл .lst) в примере к задаче 5 курса

в архиве z5.rar нету этого листинка

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 18:59:57 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 05, 2007 12:44:43
Сообщений: 87
Откуда: C:\Russia\SPb
Рейтинг сообщения: 0
Томатный писал(а):
пожалуйста наведите на правильный путь :shock: :oops:


А проблему то решить так никто и не помог...
Ну tych меня не удивил, как всегда отправляет на свой курс :)))
Да, давайте все начнем писать на асме методом - компильнул на сях, посмотрел в LST, скормил ассемблеру :)))

ARV дядька толковый, но не учел одного момента, разговор ведь про ATmega32.

А теперь собственно о самой проблеме.

У avr'ok размер памяти программ которых более 8кб, таблица векторов строится не с командами RJMP, а с командами JMP. Соответственно, каждый вектор занимает не одного слово памяти, а два. Если глянуть повнимательнее в даташит в раздел "Interrupts", то это прекрасно видно. Так что надо ни rjmp USART_RXC, а jmp USART_RXC.

По поводу правильности оформления таблицы тоже можно поспорить. Для меня удобнее открыть даташит на кокретный контроллер, перейти в соответствующий раздел, скопировать список(пример), за ним идут пустышки-метки ведущие на команду RETI. В любой момент понадобившееся прерывание выбираем в пару легких движений. К тому же еще и безопаснее кое в чем. Пример в аттаче.


Вложения:
Комментарий к файлу: Пример оформления таблицы векторов ATtiny2313
examp.asm [1.61 KiB]
Скачиваний: 1129
Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 19:32:32 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт июл 31, 2007 20:32:30
Сообщений: 174
Откуда: Киев, Украина
Рейтинг сообщения: 0
большое спасибо, теперь сам буду так же делать.
кстати я из примера в даташите копировал векторы прерываний...
там один из векторов называется ADC и я только сейчас заметил, что "ADC" подсвечивается синим цветом в AVR Studio ! :shock:
обьясняли что надо писать jmp вместо rjmp, а примерчик дали с rjmp ;)


Вернуться наверх
 
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения

Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.

Подробнее>>
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 19:44:25 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 05, 2007 12:44:43
Сообщений: 87
Откуда: C:\Russia\SPb
Рейтинг сообщения: 0
Томатный писал(а):
большое спасибо, теперь сам буду так же делать.
кстати я из примера в даташите копировал векторы прерываний...
там один из векторов называется ADC и я только сейчас заметил, что "ADC" подсвечивается синим цветом в AVR Studio ! :shock:


Я рад, что помогло :))

А что касается ADC, то да, это ведь команда, асм будет ругаться если как метку попытаться заюзать. Лучше сразу написать Int_ADC.
Я так вообще все метки относящиеся к прерываниям(кроме Reset) начинаю с Int_ , чтоб сразу было видно, что это обработчик прерывания.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 20:31:22 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18397
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
все ваши проблемы именно в том, что вы, начитавшись непонятно каких книжек, используете неверный подход. если бы вы использовали рекомендованный мной способ с директивами ORG - минимум половины проблем у вас не возникло, а может и вообще ни одной (с векторами). поясню, в чем суть.

от модели к модели количество используемых векторов прерываний, их размер и т.п. могут меняться, как вы справедливо заметили. поэтому если вы будете считать команды rjmp или jmp в таблице векторов, надеясь попасть на нужное место - вам не избежать проблем при портировании кода с одной модели МК на другую. выход в принципиально ином системном подходе: надо максимально абстрагироваться от конкретной аппаратной платформы и работать с символьными константами. Эти константы определяют адреса каждого вектора, описаны они в соответствующем inc-файле. главное: значения констант могут быть разные, но символьные имена остаются прежними. т.е. вектор прерывания по переполнению таймера 0 будет иметь название TMR0_OV_VECT (я привожу абстрактный пример, т.к. не помню точное название константы) для любого МК. если вы напишите в программе
Код:
   .org  TMR_OV_VECT
   rjmp Vect_Func

то компилятор разместит команду перехода на подпрограмму-обработчик прерывания Vect_Func именно по тому адресу, который соответствует вектору - для одного МК это будет ячейка, предположим, 2, для другого - 4, для третьего - 8. вы знать не будете, какая именно ячейка соответствует вектору, но программа будет работать верно! если какие-то векторы вам не нужны - просто не описывайте их - никаких nop-ов в таблице векторов не надо! если вы будете использовать "короткие" переходы rjmp - вы никогда не ошибетесь!

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

подумайте над сказанным и не ошибайтесь впредь!

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 20:35:07 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
Brutaller писал(а):
Ну tych меня не удивил, как всегда отправляет на свой курс :))) .


Я там еще пример в VMLAB рекомендовал:
C:\VMLAB\AVR_demo\UART.ASM

ARV писал(а):
значения констант могут быть разные, но символьные имена остаются прежними. т.е. вектор прерывания по переполнению таймера 0 будет иметь название TMR0_OV_VECT (я привожу абстрактный пример, т.к. не помню точное название константы) для любого МК. если вы напишите в программе
Код:
   .org  TMR_OV_VECT
   rjmp Vect_Func

то компилятор разместит команду перехода на подпрограмму-обработчик прерывания Vect_Func именно по тому адресу, который соответствует вектору


В примере C:\VMLAB\AVR_demo\UART.ASM
который я рекомендовал на прошлой страницы
примерно так и сделано !
Код:
.org URXCaddr               ; UART Receive Complete Interrupt
   rjmp uart_rx
.org UDREaddr               ; UART Data Register Empty Interrupt
   rjmp uart_em
.org UTXCaddr               ; UART Transmit Complete Interrupt
   rjmp uart_tx

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 20:48:04 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18397
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
tych, не надо кричать: правильный подход - даже в вашем курсе остается правильным :)

в примерах, предлагаемых разработчиками компиляторов или производителями МК, как правило, всегда показан наиболее правильный подход - остается только его воспринять и следовать ему!

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 20:53:19 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
ARV писал(а):
остается только его воспринять и следовать ему!


Но как убедить в этом людей !? :shock: Не желают читать примеры к прогам, хелпы и доку. Сразу ваять !

Вот ведь Ассемблер для AVR руководство на русском. (линк я удалил так как "верхний человек форума" мне написал
Цитата:
Ваше представление об образовательном процессе, которое идет в разрез с философией и правилами данного Форума.
) - читайте да делайте правильно ...

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Последний раз редактировалось tych Ср окт 29, 2008 19:29:20, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 21:09:35 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18397
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
tych писал(а):
Но как убедить в этом людей !? :shock: Не желают читать примеры к прогам, хелпы и доку. Сразу ваять !
имхо, терпеливо убеждать, ненавязчиво подводя (возможно через ошибки) к осознанию необходимости учиться

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 22:16:40 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт июл 31, 2007 20:32:30
Сообщений: 174
Откуда: Киев, Украина
Рейтинг сообщения: 0
Цитата:
все ваши проблемы именно в том, что вы, начитавшись непонятно каких книжек, используете неверный подход.

я ту книжку не читал, просто просмотрев и обнаружив море ошибок не стал дальше читать...я интуиктивно пытаюсь сам разобраться. достаточно даже списка асм команд с кратким пояснением...темболее я несовсем новичек в МК, просто впервые вижу асм.
Цитата:
я привожу абстрактный пример

спасибо, с примером все понятно.
можно и так и так безразници. смысл понятен, но я даже не знаю что такое .org так что пока так для меня так грубовато как-то.
Цитата:
...
подумайте над сказанным и не ошибайтесь впредь!

оки :wink:


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 28, 2008 22:30:37 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 05, 2007 12:44:43
Сообщений: 87
Откуда: C:\Russia\SPb
Рейтинг сообщения: 0
По поводу максимального юзания символьных имен - согласен.

А вот такого от вас ARV, я не ожидал:
ARV писал(а):
если вы будете использовать "короткие" переходы rjmp - вы никогда не ошибетесь!


Интересно вот только, а зачем же тогда каждый вектор занимает два слова в памяти, а не одно как у кристаллов с флэшиной не более 8кб ?
Наверно потому, что rjmp не вовсюда может прыгнуть... Эх, а всё так категорично было заявлено...


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 29, 2008 08:05:11 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18397
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Brutaller писал(а):
А вот такого от вас ARV, я не ожидал:
ARV писал(а):
если вы будете использовать "короткие" переходы rjmp - вы никогда не ошибетесь!

Интересно вот только, а зачем же тогда каждый вектор занимает два слова в памяти, а не одно как у кристаллов с флэшиной не более 8кб ?
Наверно потому, что rjmp не вовсюда может прыгнуть... Эх, а всё так категорично было заявлено...
уважаемый Brutaller! в моем "категоричном" заявлении нет никакой ошибки! можете - не означает должны, не так ли? если вам действительно необходимо использовать далекие переходы - даже в "больших" мегах вы можете использовать короткие: сначала прыгнуть недалеко, а уже оттуда - длинным джампом куда угодно - всего-то 2 такта лишних...
кроме того, используя только короткие джампы вы не будете иметь проблем до тех пор, пока не окажется, что их не хватает для перехода к обработчику - компилятор при этом выдаст ошбику. Вот тогда вы, исправляя ее, измените короткий джамп на длинный. при этом проблем с "непопаданием вектора в требуемый адрес" у вас все равно не будет

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 17, 2008 22:48:47 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
Brutaller писал(а):
По поводу максимального юзания символьных имен - согласен.

А вот такого от вас ARV, я не ожидал:
ARV писал(а):
если вы будете использовать "короткие" переходы rjmp - вы никогда не ошибетесь!


Интересно вот только, а зачем же тогда каждый вектор занимает два слова в памяти, а не одно как у кристаллов с флэшиной не более 8кб ?
Наверно потому, что rjmp не вовсюда может прыгнуть... Эх, а всё так категорично было заявлено...


Мда, с асмом работоть и работать. Какя разница что 8кб что 256кб? Если rjmp адресует - то туда и прыгнет. Если выше - то сам компилятор даст ошибку.

А мой совет - что rjmp, что jmp рано или поздно заканчиваются.
И тогда на помощь приходит CALL и RCALL. :)) :)) :)) :)) :))


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 17, 2008 23:41:08 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 05, 2007 12:44:43
Сообщений: 87
Откуда: C:\Russia\SPb
Рейтинг сообщения: 0
А никто не задумывался, зачем многие, кто пишет на асме забивают векторы не используемых прерываний инструкцией RETI ?
Кстати IAR это тоже делает. Про GCC не знаю - не смотрел что он там творит.

__Alexander писал(а):
Мда, с асмом работоть и работать.


Я то вполне комфортно себя в асме чувствую и понимаю - что делаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 17, 2008 23:59:11 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
Так это логично со стороны случайного (а случаи бывают разные) входа в прерывание. Лучше с него выйти, чем выполнить следующую за ним команду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 18, 2008 00:01:25 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
Кстати, IAR это делает при выставленной в опциях галочке. По умолчанию он этого не делает, так что не надо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 18, 2008 18:12:39 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 05, 2007 12:44:43
Сообщений: 87
Откуда: C:\Russia\SPb
Рейтинг сообщения: 0
Вот это уже другой разговор. :)

Про IAR согласен, просто я не уточнил.

Кстати, видел интересную тему на одном форуме. Там еще более хитрый прием применяется с использованием специальных заглушек, как раз для отлова таких ситуаций с непреднамеренным входом в прерывание и вытекающих из этого проблем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 19, 2008 23:39:16 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт июл 31, 2007 20:32:30
Сообщений: 174
Откуда: Киев, Украина
Рейтинг сообщения: 0
Уважаемые Коты, будут идеи по поводу сложения чисел в доп. коде в 24 разрядный регистр(8x3) ???
Ситуация такая. перемножаю числа со знаками командой muls, получаю результат в доп коде в регистрах r1:r0 и после нужно прибавить результат, допустим в регистры r17:r16. Перемножение и сложение в цикле несколько раз с новыми значениями. Нужно определить переполнение r17:r16 и правильно прикрутить ещё один регистр r18. Важен максимально быстрый метод!
голова уже не варит, ничего в голову не приходит(


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 20, 2008 07:54:28 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
Томатный писал(а):
голова уже не варит, ничего в голову не приходит(

Сделайте на СИ скомпильте и посмотрите асм листинг. Когда голова не варит это прекрасный метод. Можно и ручками подправить потом.

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7952 ]    , , , , 5, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 28


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y