Sirius Опубликовано 27 февраля, 2008 Поделиться Опубликовано 27 февраля, 2008 (изменено) Доброе время суток!!!! Я начел изучать микроконтроллеры AVR купил литературу ("Вводный курс AVR" и "Самоучитель для разработчика устройств на микроконтроллерах AVR- А.В.Белова" ) Всё вроде было более менее понятно ,до вчерашнего дня. В книге Белова я наткнулся на такое понятие как СТЕК. Во первый я несовсем понел для чего он нужен.Если можно объясните мне пожалуйста. Во вторых в книге Белова есть пример : ;############################################## ;## Пример 1 ## ;## Программа управления светодиодом ## ;############################################## ;------------------------- Псевдокоманды управления .include "tn2313def.inc" ; Присоединение файла описаний .list ; Включение листинга ;------------------------- Начало программного кода .cseg ; Выбор сегмента программного кода .org 0 ; Устанеовка текущего адреса на ноль .def temp = r16 ; Определение главного рабочего регистра ;-------------------------- Инициализация стека ldi temp, 0x7F ; Выбор адреса вершины стека out SPL, temp ; Запись его в регистр стека ;-------------------------- Инициализация Главного предделителя ldi temp, 0x80 ; Записываем число $80 в регистр temp out CLKPR, temp ; Записываем в регистр CLKPR ldi temp, 0 ; Записываем 0 в регистр temp out CLKPR, temp ; Записываем этот ноль в CLKPR ;-------------------------- Инициализация портов ВВ out DDRD, temp ; Записываем ноль в DDRD (порт PD на ввод) ldi temp, 0xFF ; Записываем число $FF в регистр temp out DDRB, temp ; Записываем это число в DDRB (порт PB на вывод) out PORTB, temp ; Записываем то же число в PORTB (потушить светодиод) out PORTD, temp ; Записываем его же в PORTD (включаем внутр. резисторы) ;--------------------------- Инициализация компаратора ldi temp, 0x80 ; Выключение компаратора out ACSR, temp ;-------------------------- Основной цикл main: in temp, PIND ; Читаем содержимое порта PD out PORTB, temp ; Пересылаем в порт PB rjmp main ; К началу цикла Мне не понятно зачем в этой программе нужна иничиализация стека,видел аналогичную программу ( Программа управления светодиодом ) Там вообще ничего подобного нету!!!!!! За ранее благодарен!!!!! Готов слушать ошибки и учится!!!!! Изменено 27 февраля, 2008 пользователем Sirius 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
wowa Опубликовано 27 февраля, 2008 Поделиться Опубликовано 27 февраля, 2008 Инициализация стека нужна для предотвращения разных непонятных и зачастую случайных глюков при использований подпрограм.... Там где подпрограмы не используете - можете не инициализировать.. Вообще то инициализация - это хороший тон Вдруг потом будите приделывать подпрограму и после недели поиска ошибки поймёте что надо просто поставить вначале програмы две строчки и всё работает так как надо Некоторые компиляторы это могут делать сами в инклудах для процесора и сомпиляторы С это тоже делают сами автоматически.. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Sirius Опубликовано 27 февраля, 2008 Автор Поделиться Опубликовано 27 февраля, 2008 Получается всё равно лутше надо изучить!? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторовОбязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
wowa Опубликовано 27 февраля, 2008 Поделиться Опубликовано 27 февраля, 2008 (изменено) Я сделал для себя несколько шаблон.. Начинаю писать програму с того что просто скопирую и переименую шаблон... В нём сотру то что ненадо и начинаю писать.. Обычно там происходит инициализация веторов, стека, портов и таймеров.. Плюс у меня шаблонах есть пара полезных макросов... Пример я взял с японца на http://elm-chan.org/ - очень толковый мужичёк.. В общем то макросы в большинстве его P.S. И ещё рекомендую записывать код в специальный таг - лучше читается и незабирает столько места на длину.. Например: ;############################################## ;## Пример 1 ## ;## Программа управления светодиодом ## ;############################################## ;------------------------- Псевдокоманды управления .include "tn2313def.inc" ; Присоединение файла описаний .list ; Включение листинга ;------------------------- Начало программного кода .cseg ; Выбор сегмента программного кода .org 0 ; Устанеовка текущего адреса на ноль .def temp = r16 ; Определение главного рабочего регистра ;-------------------------- Инициализация стека ldi temp, 0x7F ; Выбор адреса вершины стека out SPL, temp ; Запись его в регистр стека ;-------------------------- Инициализация Главного предделителя ldi temp, 0x80 ; Записываем число $80 в регистр temp out CLKPR, temp ; Записываем в регистр CLKPR ldi temp, 0 ; Записываем 0 в регистр temp out CLKPR, temp ; Записываем этот ноль в CLKPR ;-------------------------- Инициализация портов ВВ out DDRD, temp ; Записываем ноль в DDRD (порт PD на ввод) ldi temp, 0xFF ; Записываем число $FF в регистр temp out DDRB, temp ; Записываем это число в DDRB (порт PB на вывод) out PORTB, temp ; Записываем то же число в PORTB (потушить светодиод) out PORTD, temp ; Записываем его же в PORTD (включаем внутр. резисторы) ;--------------------------- Инициализация компаратора ldi temp, 0x80 ; Выключение компаратора out ACSR, temp ;-------------------------- Основной цикл main: in temp, PIND ; Читаем содержимое порта PD out PORTB, temp ; Пересылаем в порт PB rjmp main ; К началу цикла Изменено 27 февраля, 2008 пользователем wowa 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
alts Опубликовано 29 февраля, 2008 Поделиться Опубликовано 29 февраля, 2008 Вообще-то дело не в хорошем тоне и не в глюках... Это следствие. Причина наличия стека, и соответственно его необходимости в его назначении. Вопрос который задал уважаемый Sirius ,к сожалению, в современной литературе раскрывается, мягко выражаясь, никак. А предназначен стек (изначально, т.е. с давних пор) для хранения промежуточных данных при работе программы, и далее по архитектурным различиям - адресов входов, возвратов, и т.п. В разных МК стек реализован по-разному. Где-то он аппаратный, где-то это кусок памяти - в АВР - программно определяемая область ОЗУ. В него само ядро пишет адреса возвратов из ПП, обработчиков прерываний и т.п. Короче предназначен он ( в основном)для "интимной" жизни ядра МК. Но доступен и для программиста командами PUSH и POP. В АВР программист может сам определять размер стека, в зависимости от типа задач, количества ПП и т.д. Более того, если в программе будет определено хоть одно прерывание, то стек должен быть инициализирован обязательно, и до того как сие прерывание будет разрешено. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Sirius Опубликовано 29 февраля, 2008 Автор Поделиться Опубликовано 29 февраля, 2008 спасибо за ответ!! )) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
wowa Опубликовано 29 февраля, 2008 Поделиться Опубликовано 29 февраля, 2008 Прошу заметить что прерывание програмы например таймером - тоже является вызовом подпрограмы!!! 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
alts Опубликовано 3 марта, 2008 Поделиться Опубликовано 3 марта, 2008 Абсолютно в дырочку! Речь идет о любом прерывании... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.