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

Обсуждаем контроллеры компании Atmel.
Ответить
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

ploop писал(а):Директива .org говорит компилятору: "всё, что дальше я сочинил, суй по этому адресу". Можешь написать там любое число в пределах объёма памяти, туда компилятор его и засунет.
Позволю уточнить - не "по этому адресу", а "начиная с адреса".
И вообще, было ведь уже - http://radiokot.ru/forum/viewtopic.php?f=57&t=72364
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

ploop писал(а):INT_VECTOR_SIZE - адрес конца блока прерываний.
Только INT_VECTORS_SIZE
Ставим плюсы: )
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

ibiza11, на вкус и цвет :)

Это скриншот кода работающего проекта, который компилировался gavrasm'ом. Последний хорош тем, что ему не нужны .inc - файлы (или как они там называются) контроллера. Все поддерживаемые варианты в нём уже зашиты.
Достаточно указать вначале файла директиву .device (например .device ATmega48)

Но некоторых "привычных" дефайнов нет, как и вышеназванного.
Так что вначале было так:

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

.equ INT_VECTOR_SIZE = 0x01A            ; Размер таблицы прерываний для ATmega48
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Все поддерживаемые варианты в нём уже зашиты.
мне кажется они зашиты именно inc файлами, не?))) хотя я не буду спорить, я не работал в gavrasm'е
не пробовали с именем, которое я предложил скомпилировать? может все таки есть?)))
Ставим плюсы: )
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

мне кажется они зашиты именно inc файлами, не?
А кто их знает, исходники есть, но не смотрел.

Хм, скомпилил, вы правы. Значит тогда была досадная опечатка, которую не заметил. Ну да чёрт с ней, не суть. Уже больше года на ассемблере не пишу :)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

1) вычитал что в младших моделях AVR стек организован на аппаратном уровне, в остальных моделях - на програмном............, в чем разница и почему это так сделано
2) в каком офоциальном документе от производителя описывается принцип работы МК "взагалi" т.е. от момента сброса и далее.
3) может кто в курсе как называется сия книга http://autoelectric.xirad.ru/index.php/ ... avr/69-pop хотелось бы ее скачать и почитывать перед сном :))
Tell Me The Truth
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

1) Стек всегда реализуется аппаратно (если мы говорим про аппаратный стек :) ). Только в моделях, в которых нет оперативной памяти, для стека используется небольшой буфер, который больше никуда использовать нельзя.
2) В даташите. Хотя что там описывать, во время сброса инициализируется периферия, управление передаётся на вектор RESET и всё.
3) Сия информация есть на сайте производителя. А так же в сети полно переводов.
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

прочитал такое утверждение, что при сбросе все РВВ устанавливаются в ноль, а вот РОН могут принимать произвольные значения
правда ли это и с чем это связано ?
Tell Me The Truth
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

правда ли это и с чем это связано ?
Ответил же выше: периферия инициализируется заново (РВВ тоже периферия), а РОН и память - нет. То есть там останутся значения, которые были ДО сброса, или мусор, если ДО сброса было выключенное состояние (т.е. только что подали питание).
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

ploop писал(а):или мусор, если ДО сброса было выключенное состояние (т.е. только что подали питание).
а почему там будет мусор ? ведь привыключенном МК данные в ОЗП теряются.
Tell Me The Truth
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Теряются, если МК выключено на достаточно долгое время, порядка единиц или десятков секунд, точно не проверял.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

ведь привыключенном МК данные в ОЗП теряются.
А то такое, по твоему, "потерять данные"? Что такое "данные"?
Представь битовую ячейку. В ней всегда может быть только 0 или 1. Вот в ней есть какое-то значение. Ответь, в ней есть данные или нет? 0 - это данные? А 1 - это данные? А что значит "удалить данные"? :)

Есть только один ответ на этот вопрос: данные это то, что мы считаем актуальным состоянием ячейки на текущий момент. Другими словами, если мы сами записали туда состояние (программно или железно). Иначе там мусор, т.е. случайное состояние.

В конкретных реализациях памяти после включения питания могут быть одни нули, или одни единицы, но доверять этому нельзя. И если заводите переменную в памяти, то её надо обязательно инициализировать, то есть записать какое-то значение, например ноль. Инициализировать можно неявно, например, при создании переменной-счетчика туда, согласно алгоритму, обязательно запишется начальное значение, а только потом будет проверяться.
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

я понимаю это так
допустим у меня есть несколько переменных temp, temp1, temp2
в них должны хранится некие числа от 0 до 255
в процессе выполнения проги в них ранятся некие значения
потом я вырубил питание
моя ОЗП обнулилась
в выще указаннях переменных, по всем законам жанра, должен быть 0
где же тогда ошибка в моих суждениях ? :dont_know:
Tell Me The Truth
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Ошибка вот: моя ОЗП обнулилась
Производитель не гарантирует, что она обнулится. При включение питания любая помеха может привести ячейку в рандомное состояние, а потом уже это значение зафиксируется, когда система войдёт в рабочий режим.

А вот с РВВ, регистрами конфигурации всяких счетчиков, АЦП и прочего, производитель гарантирует, что после сброса и выхода системы на рабочий режим произойдёт очистка этих регистров.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Почему обнулилась? Почему бы не заполнилась единицами скажем? Не инициализирована значит не было записи конкретных данных, а посему - что там сидит - бог его знает. У программиста, как известно, на прикроватной тумбочке должны стоять два стакана - один с водой и второй пустой: первый на случай, если он захочет попить, а другой - если не захочет.
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

FreshMan писал(а):где же тогда ошибка в моих суждениях?
РОН — это статическое ОЗУ (SRAM). Его ячейка (бит) чем-то похожа на мультивибратор:
Изображение
может быть устойчива в двух дискретных состояниях.
Поэтому в какое именно состояние она опрокинется при подаче питания — ХЗ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

ploop писал(а):А вот с РВВ, регистрами конфигурации всяких счетчиков, АЦП и прочего, производитель гарантирует, что после сброса и выхода системы на рабочий режим произойдёт очистка этих регистров.
это какая то сказка :))
с ваших слов выходит так: в случае с РОН мы не даем гарантии на обнуление, а с РВВ мы ее даем
но как же так, ведь и РОН и РВВ принадлежат к ОЗУ
но РВВ мы обнуляем жостко, а РОН шиш с маслом
как сие возможно ? :dont_know:
Изображение
Tell Me The Truth
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

FreshMan писал(а):как сие возможно ?
Сделано блиать аппаратно обнуление РВВ при сбросе.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

а че тогда не сделать аппваратно сброс и для РОН ?
ведь тогда проблем бы в мире поубавилось :wink:
Tell Me The Truth
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

FreshMan писал(а):а че тогда не сделать аппваратно сброс и для РОН ?
Нахуа?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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