Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

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

1. Программист забил таблицу неиспользуемых векторов reti. Девайс прошивается и включается. Разработчик видит, что девайс ведет себя не так как надо: меню работает, всякие сообщения вводятся-выводятся, но какая-то часть функций не работает. Начинаются ковыряния с отладчиком - оновноной код отрабатывает отлично, имеющиеся в программе обработчики прерываний отрабатывают отлично - а программа не верно работает... Программист в панике.

2. Программист забил таблицу неиспользуемых векторов заглушками rjmp pc+0. Девайс прошивается и включается. Разработчик видит, что девайс не работает вообще. Т.е. что-то мигнуло, что-то выдалось, и после этого зависло. При помощи аппаратного отладчика, если он есть, мгновенно находит место, где программа висит, и это место - четко в таблице векторов. Всё, программист нашел свою плюху - отсутствие обработчика этого вектора. Аналогичное решение в симуляторе.

3. Программист забил таблицу неиспользуемых векторов переходами на единственную заглушку rjmp pc+0. Как и в п.2 всё висит, в отладчике видно только одно - висим в заглушке. Это не говорит ничего о том, откуда мы попали в заглушку, но все равно легко просмотреть таблицу и найти вектор без обработчика. Решение чуть-чуть сложнее, чем в п.2, но все равно элементарно.

4. Таблицу векторов заполнил компилятор avr-gcc, т.е. при необслуживаемом прерывании происходит сброс программы. В отличие от предыдущих двух вариантов программа, в зависимости от того, как часто происходят запросы необрабатываемого прерывания, либо вообще практически не стартует (визуально), либо проходит начальную инициализацию и сбрасывается. В плане диагностики этот вариант хуже, чем предыдущие два, но все равно однозначно говорит программисту о необходимости смотреть в таблицу векторов, не гадая.

В корректно написанной программе абсолютно все равно, что будет в таблице векторов на неиспользуемых местах, согласны?

Итак, вывод: вариант с reti в пустых ячейках таблицы векторов - наихудший при отладке и поиске проблем. Наилучший вариант - заполнение неиспользуемых ячеек заглушками rjmp pc+0. Компромиссные варианты - с единственной заглушкой или со сбросом.

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

Мой уютный бложик... заходите!
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

Из всех симуляторов только студия показывает наиболее реальную работу мк.
Незапланированные прерывания могут возникнуть в случае ошибки программиста, сбоя, срыва стека. Программист может копипастом включить прерывание для которого нет обработчика. При сбое или срыве стека программа может прыгнуть на данные, которые могут оказаться командой включения ненужного прерывания. При сбое и при работе со вводом выводом может записаться бит включения прерывания.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

Demiurg писал(а):При сбое и при работе со вводом выводом может записаться бит включения прерывания.
При самопроизвольном изменении регистров ничего не поможет.

Добавлено after 2 minutes 6 seconds:
Но если Вам так хочется как-то защищаться от "незапланированного прерывания" только не RETI, делайте переход на обработчик прерывания по умолчанию. Но это разговор по кругу.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

Demiurg писал(а):При сбое
сбой - это явление, аналогичное падению метеорита на голову: защититься от него невозможно никакими программными ухищрениями в принципе. единственная более-менее приличная страховка от сбоя - это WDT.
Demiurg писал(а):Протеус и иже с ними даже рядом не стоял в сравнении со студией
ну, вы меня знаете (или должны знать - не первый же год читаем сообщения друг друга на форуме!) - я крайне негативно отношусь к безапелляционным утверждениям!
прошу вас доказать, с какого перепугу симулятор студии лучше протеуса, если студия в принципе не симулирует аналоговую периферию, захват таймера, некоторые режимы работы таймера и вообще с отладкой "as_realtime" у студии боооольшие проблемы?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

ARV писал(а):Итак, вывод: вариант с reti в пустых ячейках таблицы векторов - наихудший при отладке и поиске проблем.
Для начала вспомним, что мы в теме ассемблера. Reti наилучший вариант при бездействии. Nop-ы и 0xFFFF (слово) 0xFFFFFFFF - наихудший.
Теперь методы борьбы. К примеру. Асм.

Код: Выделить всё

.cseg

.org	0x0000
		rjmp	Reset

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

.org	INT1addr				; External Interrupt 1
		rjmp INT_1_Handler ; reti

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

INT_0_Handler:
   ldi r16, 1
   rjmp Proc_Errors
INT_1_Handler:
   ldi r16, 2
   rjmp Proc_Errors

OC2_Handler:
   ldi r16, 3
   rjmp Proc_Errors

Proc_Errors:
   cli
   out PORTB, r16
   rjmp PC + 0 // Вместо глухого зацикливания вы можете написать простую мигалку светодиодом.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

Demiurg писал(а):Для начала вспомним, что мы в теме ассемблера. Reti наилучший вариант при бездействии.
если вы оспариваете мою классификацию вариантов действий программиста, то прошу вас педантично опровергнуть всю цепочку моих рассуждений.

предлагаемый вами вариант - это не тот вариант, который мы обсуждаем: вы только что предложили обрабатывать ВСЕ прерывания, а говорили до сих пор мы о том, что некоторые обработчики остаются не обработанными из-за невнимательности программиста.
Demiurg писал(а):.org   INT0addr            ; External Interrupt 0
      rjmp INT_0_Handler ; reti

.org   INT1addr            ; External Interrupt 1
      rjmp INT_1_Handler ; reti

.org   OC2addr               ; Timer/Counter2 Compare Match
      rjmp OC2_Handler ; reti
это совсем не то, о чем шла речь ранее!

Добавлено after 1 minute 53 seconds:
да, вот еще что: у вас в Proc_Errors не нужно cli :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

ARV писал(а):прошу вас доказать, с какого перепугу симулятор студии лучше протеуса, если студия в принципе не симулирует аналоговую периферию, захват таймера, некоторые режимы работы таймера и вообще с отладкой "as_realtime" у студии боооольшие проблемы?
Только не говорите мне, что я не умею готовить. Сколько раз я пробовал работать в протеусе. И все разы я проклинал все попытки. На простых проектах ногодрыгах еще что-то можно делать. На более сложных, как минимум жуткая тормозня.
Поэтому, модульная отладка программ. Принимаем как факт, что модуль работает, при симуляции, отладке программ выставляем режимы периферии, биты в регистрах. Если периферию невозможно симулировать, выставляем нужные переменные.
К примеру, проект. Ампер-вольметр переменного тока. Клавиатура, дисплей. Весь проект я отлаживал в студии и на железе. Именно так как я описал. Проект на си. На асме ничем бы не отличалось. Но я уже несколько лет не пишу проекты на асме.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

То что Вы где-то что-то успешно отладили и где-то что-то в другом месте не получилось - это не аргумент.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

ARV писал(а):...
Я не оспариваю вашу квалификацию. Вы не ассемблерщик. Это всего лишь означает тип мышления.
Proc_Errors общая подпрограмма для обработки ошибок.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

Demiurg писал(а):Проект на си. ... Но я уже несколько лет не пишу проекты на асме.
Каким компилятором пользуетесь?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

Z_h_e писал(а):Каким компилятором пользуетесь?
IAR. Иногда студию и тулчейн. Отладка всегда в студии. IAR создает файл в формате студии. Прошивка МК только через студию. STK-500 либо AVRISP MKII.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

Просто Вы говорили что GCC давно не пользовались или что -то в этом роде. К студии другой подключен чтоли?

Добавлено after 35 seconds:
Ладно. Не важно. А то в оффтоп разговор пойдет.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

Z_h_e писал(а):Просто Вы говорили что GCC давно не пользовались или что -то в этом роде. К студии другой подключен чтоли
Именно, что давно не делал проекты в Toolchain. Иногда делаю мелкие проверки. Либо, как в нашем случае, открыл старый проект, чтобы посмотреть на выхлоп компилятора.
ARV писал(а):предлагаемый вами вариант - это не тот вариант, который мы обсуждаем: вы только что предложили обрабатывать ВСЕ прерывания, а говорили до сих пор мы о том, что некоторые обработчики остаются не обработанными из-за невнимательности программиста.
О панике. Когда у тебя непонятки, ты несколько дней не можешь понять, в чем дело. И горят сроки. Нужно успокоиться. Критически взглянуть на свою работу. Составить план действий. Методику проверки.

И в этом случае вы будете забивать всю таблицу прерываний, если потребуется, чтобы понять в чем дело.

Чудес не бывает. Если что-то не работает, это по любому косяк железа или ошибка программиста. Если до этого не работало, а после каких-то действий перестало, по любому причина в этом. Разбирайтесь что изменилось.

Иногда стоит внимательно прочитать инструкцию, то бишь даташит... :)

Может быть я написал банальщину. Но это вы написали о панике. :)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

Z_h_e писал(а):К студии другой подключен чтоли?
студия может подхватывать для отладки готовый elf или hex
Demiurg писал(а):Вы не ассемблерщик
я им был, не обольщайтесь
Demiurg писал(а):Только не говорите мне, что я не умею готовить.
что можно говорить в этом случае? ;) если вы делитесь собственным впечатлением, то предваряйте свои высказывания "по моему личному опыту" или "мне кажется" или "я думаю", чтобы выши высказывания нельзя было принять за окончательную истину.

мои личные впечатления от протеуса близки к восторгу. если бы его ломали корректно, чтобы не падал невовремя - это был бы не инструмент, а просто волшебная палочка.

Добавлено after 4 minutes 35 seconds:
О панике :)
Demiurg писал(а):И в этом случае вы будете забивать всю таблицу прерываний, если потребуется, чтобы понять в чем дело.
я-то не буду.
во-первых, я знаю, как надо сразу делать правильно, и таблица векторов у меня будет на самом последнем месте поиска проблем.
во-вторых, про панику я говорил в контектсе поведения программы: когда что-то должно делаться, но при этом не делается, и в отладчике не видно явных странностей - это очень загадочно! и как раз такая загадочность возникает, если вместо остановки на "незапланированном" прерывании делается его незаметная обработка через reti - что вы предлагали. и это вполне может вызвать панику! очень много раз ко мне обращались за помощью "ничего не работает, но ошибок нет" именно по этой причине.
Demiurg писал(а):Может быть я написал банальщину.
сейчас - да. раньше было лучше :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

Ладно поболтали, побежал я. Дела, заботы...
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

ГЫММ...
Как это (с точки зрения ассемблера) при корректно продуманной инициализации устройства да незадействованные в программе прерывания "сами - по себе" активируются???
:shock:
Никогда с таким "казусом" не встречался...
:dont_know:
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

Выше я писал, как это может произойти. Сбой по питанию, импульсные помехи. Прыжок программы из за срыва стека на данные, которые могут оказаться командами управления регистрами ввода-вывода.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

Я тоже выше писал, что от самопроизвольного изменения состояния регистров не поможет ничего. Есть не 100% шанс что спасет собака.

Добавлено after 1 minute 11 seconds:
Что за срыв стека может быть в рабочей программе?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

У AVR архитектура такая.
Давайте разберем случаи сбоя и переход программы. Пусть на вектор прерывания. Если неиспользуемый, reti и ничего не произошло. Либо с обработкой ошибки. Если используемый, то здесь можно применить флаг разрешения обработки прерывания.
В любое место программы. Тут сложнее. Ничто не спасает в таком случае. Если на пустое место, то будет перебор всех ячеек 0xFF, в конце мк сбросится на начало программы.
Так что, и ватчдог не особо спасает в случае сбоя.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

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

Вернуться в «AVR»