Например TDA7294

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

Текущее время: Сб авг 23, 2025 19:17:36

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 308, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 08:47:28 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Demiurg, функция main имеет некую специфичность, из нее некуда выходить в контексте AVR. Сколько раз уже Вам сказали что компилятор компиллит заглушку. Эта заглушка к прерываниям (про которые Вы зачем то говорите) отношения никакого не имеет и никакими заглушками ошибки и тем более сбои МК не заткнуть.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 09:05:17 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Изображение
Это структура скомпилированной программы. Я сейчас занят. Так что пока изучите структуру. В принципе по картинке все понятно. Позже отпишусь.


Последний раз редактировалось Demiurg Чт авг 10, 2017 09:33:10, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 09:16:28 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Demiurg писал(а):
Это структура скомпилированной программы.
если мы говорим о структуре скомпилированной avr-gcc сишной программы, то картинка не [совсем] верна - я приводил выдержки листинга, доказывающие это: после main есть единственная заглушка, а вместо заглушек в неиспользуемых векторах на самом деле генерируется переход на нулевой вектор, т.е. в конечном итоге на reset.

разумеется, в самописных программах на ассемблере можно реализовать и такую, и любую иную структуру. просто компилятор Си avr-gcc делает иначе.

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 09:35:26 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Я изменил картинку. Обратите внимание. Прямоугольники Прерывание Заглушка Подпрограмма ничем не отличаются. Это все подпрограммы. И заглушка может быть в любом месте. Главное дотянуться командами rjmp и jmp.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 09:38:24 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 10:09:46 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Компилятор может вызывать main, вы знали об этом? То есть, в зависимости от программы, настроек компилятора, после сброса и блока инициализации может быть как переход на main так и вызов.
Так же можно настраивать переходы из незапланированных прерываний.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 10:22:25 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 3
Медали: 1
Получил миской по аватаре (1)
Demiurg, лично я не понимаю о чем Вы, возможно и другие тоже не понимают. До вмешательства модератора, предлагаю создать тему по компилятору GCC (или хотя бы уйти в Сишную ветку) и там продолжить обсуждение.

----------
А вот по теме, очень хотелось бы понять что Вы имели ввиду. Резюмирую:
FeCat выложил код с точкой зависания.
ARV, указал что эта точка может быть только выходом из функции main.
Оставив в стороне Ваши обвинения в некомпетенции, Вы заявили Main вызван, а стек сорван.. Объясните почему данный код срывает стек. Если можете конечно.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 11:21:17 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

я вам говорю - небо синее, а вы мне - нет, трава зелёная :)))

можно делать что угодно, но avr-gcc делает нечто конкретное, и я на 100% уверен, что знаю, что этот компилятор делает. остальное - домыслы.

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 17:50:06 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
1 - Я давно не писал проекты в gcc. Поэтому, остались остатки впечатлений и разбора дизассемблера. В некоторых моментах был не прав. Признаю. Но! Я зацепился за "выход из main". И "расположенный за main кусок кода". Тот, кто писал и пишет проекты на асме, никогда так не скажет.
Берем первый момент. Выход из main. Компиляторы, в зависимости от условий, могут компилировать два метода. Переход на main, и вызов main. В последнем случае появился в обсуждении срыв стека.
Второй момент. cli и rjmp PC + 0 или PC - 0 (однокуйственно). Это совершенно отдельный кусок кода, который можно рассматривать как отдельную подпрограмму. И не важно, где этот кусок будет находиться. Потому как:
Код:
main:
bla-bla
rjmp Main

cli
rjmp PC + 0


Смотрим на этот кусок кода:
Код:
Label:
rjmp PC + 0


Спор возник из-за того, кто как рассматривает программу. Со стороны си, и оперирование одними понятиями. И со стороны асма, соответственно, оперирование понятиями со стороны архитектуры МК и асма.
Теперь возьмем момент, откуда взялись прерывания и срыв стека. Из-за ошибки программиста, сбоя может возникнуть переход на векторы незапланированных прерываний. Здесь уже варианты, как лучше сделать. И компиляторы могут сделать по разному. Один из методов - переход на глобальное отключение прерываний и глухое зацикливание. Потому как именно такой способ защищает и от срыва стека.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 17:55:07 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Demiurg писал(а):
Компиляторы, в зависимости от условий, могут компилировать два метода. Переход на main, и вызов main. В последнем случае появился в обсуждении срыв стека
не могу поручиться за компиляторы, но логика подсказывает, что если вызов функции компилятор подменяет на переход, то он уж как-то должен и выход из функции оформить так, чтобы никакого срыва стека не было. но в целом это рассуждения из разряда "есть ли жизнь на Марсе".

будем считать, что разобрались :)))

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 17:57:06 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
ARV писал(а):
...

Внес правку. Думаю, что написал все, хотел сказать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 18:01:08 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 18:04:02 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
ARV писал(а):
...

Самый простой способ ставить reti на все незадействованные прерывания. Пусть даже и случилось прерывание, но и ничего не произойдет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 18:17:14 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 18:29:48 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Demiurg писал(а):
Пусть даже и случилось прерывание, но и ничего не произойдет.
Не понимаю как такое прерывание может произойти и как могут помочь RETI. Незапланированных прерываний быть не должно. Но в крайнем случае лучше сделать прерывание по умолчанию и например завешивать там программу или как то семафорить об этом. И то это может быть полезным только на этапе отладки.

А установка RETI - это всего лишь некая традиция. С таким же успехом можно заполнить другими командами или даже директивами. Очень многие считают, что данное заполнение таблицы векторов неудачный метод. Лучше применять директиву .ORG с метками, которым присвоено значения разработчиком.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 18:57:38 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Самый правильный способ заполнения таблицы векторов следующий:
Код:
.cseg

.org   0x0000
      rjmp   Reset

;====== INTERRUPT VECTORS ============
.org   INT0addr            ; External Interrupt 0
      reti

.org   INT1addr            ; External Interrupt 1
      reti

.org   OC2addr               ; Timer/Counter2 Compare Match
      reti // rjmp   Proc_Int_BAM // reti

.org   OVF2addr            ; Timer/Counter2 Overflow
      reti

.org   ICP1addr            ; Timer/Counter1 Capture Event
      reti

.org   OC1Aaddr            ; Timer/Counter1 Compare Match A
      reti

.org   OC1Baddr            ; Timer/Counter1 Compare Match B
      reti

.org   OVF1addr            ; Timer/Counter1 Overflow
      reti

.org   OVF0addr            ; Timer/Counter0 Overflow
      reti

.org   SPIaddr               ; SPI Serial Transfer Complete
      reti               ; rjmp   SPI_Transfer_Int

.org   URXCaddr            ; USART, RX Complete
      reti

.org   UDREaddr            ; USART Data Register Empty
      reti

.org   UTXCaddr            ; USART, TX Complete
      reti

.org   ADCCaddr            ; ADC Conversion Complete
      reti // rjmp   ADC_Complete

.org   ERDYaddr            ; EEPROM Ready
      reti

.org   ACIaddr               ; Analog Comparator
      reti

.org   TWIaddr               ; Two-wire Serial Interface
      reti

.org   INT2addr            ; External Interrupt Request 2
      reti

.org   OC0addr               ; TimerCounter0 Compare Match
      rjmp   Sys_Timer_Comp

.org   SPMRaddr            ; Store Program Memory Read
      reti
;----------
.org   INT_VECTORS_SIZE      ; size in words
;===================


Это таблица для ATMEGA8535. Этот же способ работает и для МК с объемом памяти выше 8 кБ. У этих МК векторы двухсловные. Если мы тупо забьем командами reti, то вляпаемся в смещение адресов. Применяя ORG, мы впаковываемся в таблицу.
Создается такая таблица просто. Берем заголовочный файл на конкретный МК. Копируем таблицу векторов. И заменяем EQU на ORG. Шаблон я вам дал.

Применяя такую таблицу, мы страхуемся от незапланированных прерываний. Но не избавляемся от них. А это уже другая история.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт авг 11, 2017 06:48:41 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт авг 11, 2017 07:14:26 
Встал на лапы

Карма: 3
Рейтинг сообщений: 7
Зарегистрирован: Чт сен 10, 2015 06:59:03
Сообщений: 106
Откуда: Гродно, BY
Рейтинг сообщения: 0
Я полностью согласен с ARV.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт авг 11, 2017 07:22:45 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
ARV писал(а):
reti никак не поможет при отладке, даже затруднит её, имхо. а в отлаженной программе никаких внеплановых прерываний быть не должно.

reti как заглушка незапланированных прерываний ничего не делает. Просто происходит переход по вектору и выход из прерывания без каких-либо действий.
Затычка nop-ами, к примеру, как некоторые делают, или, если вообще вектор не указан как-либо, 0xFF приведет к последовательному перебору до ближайшего вектора или куска программы. А это гораздо опаснее. Смоделируйте в симуляторе для интереса.

Код:
.cseg

.org   0x0000
      rjmp   Reset

;====== INTERRUPT VECTORS ============
.org   INT0addr            ; External Interrupt 0
//      reti // В этом месте будет 0xFFFF

.org   INT1addr            ; External Interrupt 1
//      reti // В этом месте будет 0xFFFF

Изображение

Можно и нужно симулировать различные ситуации при разработке устройств. Разработчик должен учитывать любые ситуации. И методы борьбы с ними. Не стесняйтесь пользоваться симулятором AVR-Studio. Это единственный инструмент, который показывает реальную работу МК. Протеус и иже с ними даже рядом не стоял в сравнении со студией. Так как студия - продукт производителя микроконтроллеров AVR/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт авг 11, 2017 07:46:21 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Demiurg писал(а):
Не стесняйтесь пользоваться симулятором AVR-Studio. Это единственный инструмент, который показывает реальную работу МК.
Никакой симулятор никогда не покажет реальную работу. И может хватит уже общаться в тоне просветленного учителя? Можете не верить, но про разные методы отладки программ знаете не только Вы.

Лучше поясните по некие незапланированные прерывания, это как?

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 243


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

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


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