ploop писал(а):Директива .org говорит компилятору: "всё, что дальше я сочинил, суй по этому адресу". Можешь написать там любое число в пределах объёма памяти, туда компилятор его и засунет.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Это скриншот кода работающего проекта, который компилировался gavrasm'ом. Последний хорош тем, что ему не нужны .inc - файлы (или как они там называются) контроллера. Все поддерживаемые варианты в нём уже зашиты.
Достаточно указать вначале файла директиву .device (например .device ATmega48)
Но некоторых "привычных" дефайнов нет, как и вышеназванного.
Так что вначале было так:
мне кажется они зашиты именно inc файлами, не?))) хотя я не буду спорить, я не работал в gavrasm'е
не пробовали с именем, которое я предложил скомпилировать? может все таки есть?)))
1) вычитал что в младших моделях AVR стек организован на аппаратном уровне, в остальных моделях - на програмном............, в чем разница и почему это так сделано
2) в каком офоциальном документе от производителя описывается принцип работы МК "взагалi" т.е. от момента сброса и далее.
3) может кто в курсе как называется сия книга http://autoelectric.xirad.ru/index.php/ ... avr/69-pop хотелось бы ее скачать и почитывать перед сном
1) Стек всегда реализуется аппаратно (если мы говорим про аппаратный стек ). Только в моделях, в которых нет оперативной памяти, для стека используется небольшой буфер, который больше никуда использовать нельзя.
2) В даташите. Хотя что там описывать, во время сброса инициализируется периферия, управление передаётся на вектор RESET и всё.
3) Сия информация есть на сайте производителя. А так же в сети полно переводов.
прочитал такое утверждение, что при сбросе все РВВ устанавливаются в ноль, а вот РОН могут принимать произвольные значения
правда ли это и с чем это связано ?
Ответил же выше: периферия инициализируется заново (РВВ тоже периферия), а РОН и память - нет. То есть там останутся значения, которые были ДО сброса, или мусор, если ДО сброса было выключенное состояние (т.е. только что подали питание).
А то такое, по твоему, "потерять данные"? Что такое "данные"?
Представь битовую ячейку. В ней всегда может быть только 0 или 1. Вот в ней есть какое-то значение. Ответь, в ней есть данные или нет? 0 - это данные? А 1 - это данные? А что значит "удалить данные"?
Есть только один ответ на этот вопрос: данные это то, что мы считаем актуальным состоянием ячейки на текущий момент. Другими словами, если мы сами записали туда состояние (программно или железно). Иначе там мусор, т.е. случайное состояние.
В конкретных реализациях памяти после включения питания могут быть одни нули, или одни единицы, но доверять этому нельзя. И если заводите переменную в памяти, то её надо обязательно инициализировать, то есть записать какое-то значение, например ноль. Инициализировать можно неявно, например, при создании переменной-счетчика туда, согласно алгоритму, обязательно запишется начальное значение, а только потом будет проверяться.
я понимаю это так
допустим у меня есть несколько переменных temp, temp1, temp2
в них должны хранится некие числа от 0 до 255
в процессе выполнения проги в них ранятся некие значения
потом я вырубил питание
моя ОЗП обнулилась
в выще указаннях переменных, по всем законам жанра, должен быть 0
где же тогда ошибка в моих суждениях ?
Ошибка вот: моя ОЗП обнулилась
Производитель не гарантирует, что она обнулится. При включение питания любая помеха может привести ячейку в рандомное состояние, а потом уже это значение зафиксируется, когда система войдёт в рабочий режим.
А вот с РВВ, регистрами конфигурации всяких счетчиков, АЦП и прочего, производитель гарантирует, что после сброса и выхода системы на рабочий режим произойдёт очистка этих регистров.
Почему обнулилась? Почему бы не заполнилась единицами скажем? Не инициализирована значит не было записи конкретных данных, а посему - что там сидит - бог его знает. У программиста, как известно, на прикроватной тумбочке должны стоять два стакана - один с водой и второй пустой: первый на случай, если он захочет попить, а другой - если не захочет.
FreshMan писал(а):где же тогда ошибка в моих суждениях?
РОН — это статическое ОЗУ (SRAM). Его ячейка (бит) чем-то похожа на мультивибратор:
может быть устойчива в двух дискретных состояниях.
Поэтому в какое именно состояние она опрокинется при подаче питания — ХЗ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
ploop писал(а):А вот с РВВ, регистрами конфигурации всяких счетчиков, АЦП и прочего, производитель гарантирует, что после сброса и выхода системы на рабочий режим произойдёт очистка этих регистров.
это какая то сказка
с ваших слов выходит так: в случае с РОН мы не даем гарантии на обнуление, а с РВВ мы ее даем
но как же так, ведь и РОН и РВВ принадлежат к ОЗУ
но РВВ мы обнуляем жостко, а РОН шиш с маслом
как сие возможно ?