Kavka, а в случае применения "перемещенной" таблицы векторов такой подход всегда сработает?(см. адреса переконфигурации таблиц для "больших" мег - язва я)
Ты вот про такое?
Код:
.include "m128def.inc"
.cseg .org 0 jmp RESET .org INT0addr reti .org INT1addr reti .org INT2addr reti .org INT3addr reti
.org INT_VECTORS_SIZE
RESET: loop: jmp loop
.org FIRSTBOOTSTART jmp BOOTLOADER .org FIRSTBOOTSTART + INT0addr BOOT_INT0: reti .org FIRSTBOOTSTART + INT1addr BOOT_INT1: reti .org FIRSTBOOTSTART + INT2addr BOOT_INT2: reti .org FIRSTBOOTSTART + INT3addr BOOT_INT3: reti
ЗЫ: Язвы, в таких, вопросах как правило знают больше, чем остальные. Так как из-за "доставучести" своей они частенько докапываются до вешей, которые остальным не интересны.
_________________ Когда уже ничего не помогает - прочтите, наконец, инструкцию. Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII) Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Ну, просто надо использовать возможности, которые даёт макро-ассемблер - и относительные адреса не помеха.
_________________ Когда уже ничего не помогает - прочтите, наконец, инструкцию. Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII) Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Возможностей там много, да не все явно прописаны и/или имеют хороший комментарий, а вариаций на тему выполнения дриектив и синтаксиса еще больше чего стоит только отсутствие локальных меток в макросах (или я их плохо искал?) У АВРок в файле шаблоона-заготовки не помешает описание конфигурационных флагов добавить (по образцу ПИКовых шапок) - жаль только вводить их значения все равно "от руки" прийдется... Мои образцы нацарапаны только для atmega8515, attiny2313 и attiny13/13a т.е., с которыми удобно работать (удобство совместимости с AT89c/s51/52 (dip40) и at89c2051/4051 (dip20)). Но это скорее всего другая тема - объективный сравнительный анализ семейств MCS51, PIC10/12/16, PIC18 и ATTINY/MEGA с одной точки зрения (т.е. с одинаковым подходом ко всем, без предвзятости)
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
чего стоит только отсутствие локальных меток в макросах
Они есть и прекрасно себя чувствуют. Я вот этот бессмысленный пример накропал, чтобы запутать компайлер, но он прекрасно разобрался что к чему, хотя я даже локальную метку "совпал" с глобальной.
Мне тоже показалсь вначале, что их нет, пришлось даже в макросе ставить машинный код перехода куда надо , а попробовал - работает классно и без вопросов.
значит атмель как всегда описание директив не доработал у мпасма и у с51asm и у кейла этот пунктик явно прописан, а тут нету но... зато директивы условного ассемблирования натыканы... досадка работать в "недокументированном режиме", а у меня последний релиз studio 4.19 однако, - можно было бы и прописать уже к этому времени, да видно у них все внимание давно в Сии...
Заголовок сообщения: Re: atmega 128 прерывание по таймеру
Добавлено: Ср янв 30, 2013 19:39:43
Опытный кот
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
BOB51 писал(а):
Alkul, вот это как раз и есть классическая ошибка... в стандартном заголовочном файле avr studio обычно всегда подключается шаблон (в данном случае m128def.inc) - а там уже заявлены адреса векторов под собственными именами, которые повторно использовать не рекомендуется! А вот пользоваться этими именами весьма полезно:
Да, пользовать имена типа INT0addr, SPIaddr и пр. не стоит. Но прием совершенно правильный, просто не совсем правильно использован. А делать надо так: берем даташит на новый для себя контроллер, находим в нем после таблицы прерываний пример ассемблерного кода. Например, для Меги-8 это будет на стр. 45. - The most typical and general program setup for the Reset and Interrupt Vector Addresses in ATmega8 is: addressLabels Code Comments
Код:
$000 rjmp RESET ; Reset Handler $001 rjmp EXT_INT0 ; IRQ0 Handler $002 rjmp EXT_INT1 ; IRQ1 Handler $003 rjmp TIM2_COMP ; Timer2 Compare Handler $004 rjmp TIM2_OVF ; Timer2 Overflow Handler . . . . . . $011 rjmp TWSI ; Two-wire Serial Interface Handler $012 rjmp SPM_RDY ; Store Program Memory Ready Handler ; $013 RESET: ldi r16,high(RAMEND); Main program start $014 out SPH,r16 ; Set Stack Pointer to top of RAM $015 ldi r16,low(RAMEND) $016 out SPL,r16
Выделяем кусок от 0х000 по 0х16 (для другого контроллера адрес будет другим, но смысл, думаю, понятен). и вставляем его в начало текста своей программы. Удаляем в начале каждой строки адрес, пробел заменяем на <tab>, пробел между rjmp (jmp) и меткой адресом перехода - тоже. Теми же табами выравниваем комментарии, чтобы они хорошо смотрелись.
Далее вставляем этот кусок еще один раз. На этот раз удаляем в начале каждой строки как адрес, так и команду rjmp (jmp) и пробел после нее. Превращаем бывшие адреса перехода в метки - вместо пробела между меткой и точкой с запятой ставим двоеточие, а комментарий, опять же, табами, отгоняем правее, чтобы красиво смотрелось После полученного набора меток ставим reti или какую-нибудь диагностическую ловушку для "левых" прерываний. И все. Полученный файлик где-нибудь сохраняем с именем, включающим название контроллера и используем для вставки в начало каждого нового проекта.
Для Меги-8 у меня получился вот такой файлик: http://yadi.sk/d/Oa7EDqKN2Epqe (что-то не нашел, как приаттачить файл к сообщению, положил его на Яндекс-Диск).
Можно подумать на тему сделать из него два .inc-файла, один для начала, второй - для таблицы "заглушек", используя директивы условного ассемблирования, но лень...
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения