Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Вот такой вопрос у меня возник. Под спойлером нарезка из ДШ.Спойлер
Видно что в 168А нет команд jmp и call. Но тут же используется jmp в таблице векторов. Атемл студио 6 смело компиллит jmp в вектора и в дезасемблере видел команды call при выбранном камне 168A. Программа работает нормально, в железе.
Вопрос. В чем прикол? Ошибка ДШ. В ерате вроде этого нет или я не туда гляжу?
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
После того как передали ATMEL микрочипу, даташиты переделали по одним им известным шаблонам. Из-за чего в даташитах на сайте ошибки, опечатки, неточности, нарезки из разных даташитов. Из-за этого я храню старые версии даташитов. На будущее запомните. МК от 8 кб (то есть 16, 32 и так далее) поддерживают команды jmp и call. Начиная от 16 кб векторы таблицы прерывания по 2 слова, 4 байта. То бишь - jmp. Если пишете программу на ассмеблере, можно использовать и команду rjmp, но НЕ ЗАБЫВАЙТЕ, что вектор 4 байтный! Чтобы не нарваться на такой косяк используйте следующий шаблон:
.org OC2addr ; Timer/Counter2 Compare Match // jmp TIMER2_COMP rjmp TIMER2_COMP // Пример !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.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 OC0addr ; Timer/Counter0 Compare Match reti ; jmp TIMER0_COMP
.org OVF0addr ; Timer/Counter0 Overflow reti
.org SPIaddr ; Serial Transfer Complete reti
.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
.org ERDYaddr ; EEPROM Ready reti
.org ACIaddr ; Analog Comparator reti
.org TWIaddr ; 2-wire Serial Interface reti
.org SPMRaddr ; Store Program Memory Ready reti ;----------
;---------- .org INT_VECTORS_SIZE ; size in words ;===================
Я, когда писал на асме, делал такой файл на каждый используемый мк. Таблица берется из заголовочного файла на конкретный мк. Фишка в том, что .org не дает ошибиться в адресации. Ставим двухсловную команду, мы впаковываемся до следующей .org. Ставим однословную команду, компилятор следующий вектор определяет правильно адрес следующей org.
Код:
//---------- [] - jmp 0x0000 [] - 0x0001
[] - следующий вектор 0x02 [] - //---------- [] - reti 0x0000 [] - 0xff (заглушка) 0x0001
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
На заборе бывает загадочная формула написана. И что? Будем неукоснительно следовать формуле? Здравый смысл - rjmp и rcall - адресация на 4 кб. На ассемблере вы заколупаетесь выстраивать программу в соответствии с опечаткой в даташите. Ваша ошибка еще и в том, что вы плохо пробежались дальше по даташиту.
Никакого тут яндекса не надо чтобы это понять. Данная запись указывать, что данные инструкции недоступны для Atmega168A и Atmega328.
Смысл этой фразы в даташите в том, что инструкции доступны не относительно букв A-PA, а относительно ядер 48-88-168-328, т.к. даташит обычно общий на несколько моделей контроллеров. Т.е. в данном случае эти команды отсутствуют в 48 и 88 контролерах, независимо от того, есть там буква на конце или нет. Вы же наверно знаете, что буквы в конце модели говорят в о корпусе или энергопотребелнии, на которые ассемблеру по барабану? Ему важна только адресуемая память, а это как раз циферки.
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Последний раз редактировалось Engineer_Keen Вт янв 17, 2017 08:17:26, всего редактировалось 1 раз.
Согласно 2545T–AVR–05/11 (8-bit Atmel Microcontroller with 4/8/16K Bytes In-System Programmable Flash ATmega48/V ATmega88/V ATmega168/V) "These instructions are only available in Atmel ATmega168" - это относительно JMP и CALL Правда у тех 48/88/68 еррат...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения