Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 13.07.2005, 20:21  
RETAS
Гость
 
Сообщений: n/a
По умолчанию Можно ли очистить стек?

Ребята,скажем у меня в программе для PIC16F84A есть такая подпрограмма "А":

call pp1
call pp2
- - - - - -
- - - - - -
call pp10

В подпрограммах рр1-рр10 тоже имеются команды call.

Необходимо,при исполнении подпрограммы "А" следить за портом П (это я думаю делать
во время прерываний )и при появлении сигнала на нём,бросить всё что связанно с
рр1 - рр10 и перейти на исполнение подпрограммы "Б" без возврата в подпрограмму "А".
Однако стек останется более или менее заполнен и я непредставляю есть ли какие либо
возможности его очистки или же подобную программу следует составлять вообще иначе.

Пасоветуйте кто нибудь что нибудь.

Спасибо.
Реклама:
 
Непрочитано 14.07.2005, 09:49  
vasilij-kursikov
Временная регистрация
 
Регистрация: 06.06.2005
Сообщений: 50
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
vasilij-kursikov на пути к лучшему
По умолчанию

Нет, стек в этих микроконтроллерах аппаратный, програмно очистить нельзя. Если необходимо большое количество вложенных подпрограмм, то советую использовать AVR. Но впринципе если обьём свободной памяти программ достаточно большой, то всегда есть способ избавиться от вызова подпрограмм, заодно и программа быстреее работать будет.
vasilij-kursikov вне форума  
Непрочитано 15.07.2005, 08:46  
AVRoschNIK
Прохожий
 
Регистрация: 18.04.2005
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
AVRoschNIK на пути к лучшему
По умолчанию

Кстати, интересный вопрос...
В большинстве AVR, действительно, стек програмный. А можно ли его как то очищать/изменять?
AVRoschNIK вне форума  
Непрочитано 15.07.2005, 09:29  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от AVRoschNIK
Кстати, интересный вопрос...
В большинстве AVR, действительно, стек програмный. А можно ли его как то очищать/изменять?
Можно. Но это вообще говоря шаманство. Лучше строить программу так, чтобы обойтись без бубна... Как именно - трудно дать совет, не зная задачи.

Чтобы реализовать, скажем так, псевдопараллельность - существуют прерывания... Да много вариантов решения. Если обработка короткая - там в прерывании ее и сделать. Длинная - выставить флажок в головную...
nml вне форума  
Непрочитано 15.07.2005, 14:13  
AVRoschNIK
Прохожий
 
Регистрация: 18.04.2005
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
AVRoschNIK на пути к лучшему
По умолчанию

Сообщение от nml
Сообщение от AVRoschNIK
Кстати, интересный вопрос...
В большинстве AVR, действительно, стек програмный. А можно ли его как то очищать/изменять?
Можно. Но это вообще говоря шаманство. Лучше строить программу так, чтобы обойтись без бубна... Как именно - трудно дать совет, не зная задачи.

Чтобы реализовать, скажем так, псевдопараллельность - существуют прерывания... Да много вариантов решения. Если обработка короткая - там в прерывании ее и сделать. Длинная - выставить флажок в головную...
Да я понимаю, что шаманство. И сам так никогда не поступал. Даже мысли не возникало, пока не прочёл это сообщение. Вот и заинтересовался. А преравания в контроллерах действительно сильная вещь! Я когда микроконтроллеры осваивать начал - никак не мог понять, как вообще программу можно для них писать, не организовав несколько разных потоков(до этого я имел опыт написания многопотоковых программ на Delphi). А теперь мне в Dilphi постоянно хочется прерывания какие-нибудь ещё, кроме таймеров
AVRoschNIK вне форума  
Непрочитано 15.07.2005, 20:32  
Гость
 
Сообщений: n/a
По умолчанию

Всем большое спасибо.
Хочю сказать, что прерывание никак неможет помочь,ибо нужно не исполнить какую то
подпрограму при появлении сигнала на П, а перестать исполнять подпрограмму.

Команда call - вроде бы прекрасная вещь,но моими глазами она однабока - ведь в данном
случае незачем знать откуда она появилась, это сильно раздражает и я, хотя ещё очень
зелен в контролерах,начинаю думать о них с плохой стороны.

Для тех кто неочень понял чего я хочю,приведу кривоватый но наглядный пример.

Скажем,я любитель по утрам плотненько позавтракать, изготовил комбайн готовящий мне
утром: чай,суп,блины и котлеты.Но неприятность в том ,что бывают дни когда супа ну
совсем нехочется и для этого я предусмотрел кнопку после нажатия которой приготовление
супа прекращается . Комбайн пристально должен следить за кнопкой и мигом прекратить
приготовление супа - я ведь ещё и скупой и мне незачем портить продукты, а все другие
процедуры должны продолжаться с прежним рвением как ни в чём небывало.

Я сам вижу ещё такой (возможный ли?) но неприятный выход: при нажатии кнопки
1)занести в EEPROM необходимые данные о чае,блинах и котлетах,
2)запустить собаку и дать ей время сработать,
3)программа начнётся со Старта,обнаружит кнопку и всё как-бы будет нормально.

Опять-же жду вашых мнений и советов.Ещё раз всем спасибо.
 
Непрочитано 15.07.2005, 21:18  
lisergin
Прописка
 
Регистрация: 29.01.2005
Адрес: Киев
Сообщений: 227
Сказал спасибо: 50
Сказали Спасибо 32 раз(а) в 24 сообщении(ях)
lisergin на пути к лучшему
По умолчанию

Как-то не пойму я Вас немного... Поконкретнее задачу, если помощь требуется. В Вашем случае просто не пойму зачем стек такой громадный. Прерывание от кнопок + все время опрашиваемая переменная флагов. Операция, которая, как я понял по Вашему замыслу, висит у Вас в стеке (эмпирическая догадка) просто не выполняется, когда доходит очередь, да и зачем тут стек, не пойму. Все операции и так по порядку выполняются...
Удачи!
__________________
Невежество всегда на что-нибудь испражняется.
lisergin вне форума  
Непрочитано 17.07.2005, 21:22  
DK
Почётный гражданин KAZUS.RU
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,529
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
DK на пути к лучшему
По умолчанию

Стек почистить просто - 8 вложенных call и готово Только вот что дальше будет... Ба-а-аальшой вопрос...
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
DK вне форума  
Непрочитано 17.07.2005, 23:10  
Гость
 
Сообщений: n/a
По умолчанию

Можно прогу написать так чтоб она иногда поглядывала за вашим событием, тока вот быстродействие остается позади. Попробуйте сменить мелкочип на другой девайс чтонить другое, тока по поводу аналога Ф84-ому ни чего сказать не могу есть ли у АВР или кого еще такой же МК по соотношению цена 8O .
 
Непрочитано 21.07.2005, 00:59  
RETAS
Гость
 
Сообщений: n/a
По умолчанию

Хочю поправить программу приготовления завтрака. После нажатия кнопки,комбайн должнен мигом
заняьтса приготовлением меню №2 и перестать приготавливать блюда первого меню. Утром комбайн приступает к приготовлению блюд первого меню-каждого блюда с самого начала .Задача как-бы не столько в том,что-бы быстренько заняться меню №2,а в том, чтоб недопустить исполнения далее той подпрограммы
(никогка!!!),вовремя которой была нажата кнопка.

Все подпрограммы ,исполняются паралельно (точнее,паралельно будет исполнятся завтрак),т.е. исполнив один пункт в первой ПП,идём во вторую ПП также выполнить какой-то один пункт и т.д.,прокручивая
все ПП кругом,пока все пункты во всех ПП небудут исполнены.

Бооольшое спасибо DK за "отличное" предложение-долговато мне недошло как им воспользоваться,
однако если таким образом и можно сделать очистку,то,по моему,в каждой точке программы придётся
указывать разные количества команд call (чтобы набрать ,а т.к. попадутся точки в которые можно
прийти из разных мест,то и скаким-то фиксированным каличеством call обойтись невыдет.Если признать такой путь пригодным,то после него я бы поставил goto и все дела.

Спасибо всем и примите извинения за корявые примеры.
 
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как очистить память микросхем с УФ стиранием? Slava5510 Микроконтроллеры, АЦП, память и т.д 61 25.04.2012 21:48
переменную в стек на AVR chipic128 Микроконтроллеры, АЦП, память и т.д 10 25.07.2009 10:24
PP стек SIEMENS Developer_ Автоматика и аппаратура связи 0 03.09.2008 17:25
Как очистить очередь прерываний в ATMega8535? greafuger Микроконтроллеры, АЦП, память и т.д 4 04.06.2008 23:03
Как уменьшить размер памяти под стек? greafuger Микроконтроллеры, АЦП, память и т.д 1 03.04.2008 08:23


Часовой пояс GMT +4, время: 18:58.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot