реклама на сайте
подробности

 
 
> Что такое СТЕК и с чем его едят?, Знающим просьба пояснить простые истины......
Potter
сообщение Feb 23 2007, 01:13
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Пять лет успешно программля на С. Пришло время.... Пришлось сталкнуться с ассеблером. Все понятно... Вот только не пойму я что такое СТЕК? Поясните пожалуйста особо популярно что это такое? Как он работает? И что в нем по обыкновению храниться? И почему без операций:

ldi r16, high(RAMEND)
out SPH, r16

ldi r16, low(RAMEND)
out SPL, r16

Конроллер МЕГА128 нормально не работает?

Заранее огромное спасибо.......
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 18)
defunct
сообщение Feb 23 2007, 18:39
Сообщение #16


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(osnwt @ Feb 23 2007, 16:50) *
участки переключения контекста, когда стеки процессов различны, и их нужно подменять.

Какие сложности с постдекрементом SP? Не смешите тапочки.

Цитата
Точно, молодцы - это чтобы разработчики компиляторов (типа gcc) не скучали smile.gif. Куча разных схем в одном процессоре для разных стеков - это, наверное, очень весело smile.gif. Имел в этом плане интересную беседу с Harry Zhurov'вым (автором вышеупомянутой RTOS), но переписка была личная, так что цитировать не имею полномочий.

Плохому танцору... все мы знаем что мешает.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 23 2007, 22:20
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Соглашусь с defunct.

Ошибки в компиляторах и операционных системах были есть и будут. Это слабо зависит от реализации кристалла. К тому же сие вообще не показатель. Компиляторов для AVR - десяток, а программ миллионы.

А вот иногда, то что годами тащится по "совместимости" - это конкретная беда. То есть сначала - это разумный и единственно правильный шаг. Но время идёт, а человек не идеален и не может предусмотреть на годы вперёд. И вот с какого то момента самая прогрессивная архитектура, ОС, протокол или схемное решение является самым мощным тормозом.

Пример у всех на виду. ОС от WIN. Вместе с железом конечно и вместе с переферией. Только построение видюхи - медаль давать. На видюху выделено столько же памяти в адресном пространстве, сколько AT91SAM7S64 отводит на RS232.

Вот и получается, что достаточно слабый наладонник моего сына ACER n311 запускает эмуляцию MSDOS (!!!) из под неё запускает вторую кирандию и она вполне прилично работает!
Go to the top of the page
 
+Quote Post
Dopler
сообщение Feb 23 2007, 23:06
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(=GM= @ Feb 23 2007, 13:56) *
Прошу прощения, что невольно ввёл всех аврщиков в заблуждение, не хотел.


Ну, если обещаете, что больше так не будете angry.gif


То, конечно, прощаем!!! cheers.gif

С Праздником всех!!!
Go to the top of the page
 
+Quote Post
osnwt
сообщение Feb 24 2007, 00:04
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Цитата(defunct @ Feb 23 2007, 17:39) *
Плохому танцору... все мы знаем что мешает.

Я всего лишь привел пример того, что необоснованное отклонение от принятой в большинстве других популярных процессоров логики способно привести к применению "правила" по привычке, когда делаешь порт некоей системы под множество различных процессоров одновременно. Названная OS существует для процессоров от AVR до ARM7 и Blackfin, и не удивительно, что можно допустить механическую ошибку при внесении изменений в несколько портов параллельно.

В этом контексте процитированное высказывание выглядит просто неуважительно к человеку, будучи высказанным при незнании деталей ситуации. Я лично такое себе не позволяю.

Цитата
Какие сложности с постдекрементом SP? Не смешите тапочки.

А Вы читать умеете? Я разве говорил о сложности? Я говорил о том, что механизм работы со стеком имеет существенное значение при работе с его указателем явно, а не посредством push/pop. Я не утверждал, что это как-то осложняет написание чего-либо. Я просто указал, что это вовсе не безразлично.

Цитата(SasaVitebsk @ Feb 23 2007, 21:20) *
Соглашусь с defunct.

Все с чем-то соглашаются. Осталось еще определиться, с чем именно smile.gif

Про ошибки повторяться не буду - уже было сказано.

Цитата
А вот иногда, то что годами тащится по "совместимости" - это конкретная беда. То есть сначала - это разумный и единственно правильный шаг. Но время идёт, а человек не идеален и не может предусмотреть на годы вперёд. И вот с какого то момента самая прогрессивная архитектура, ОС, протокол или схемное решение является самым мощным тормозом.

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

Если говорить "в общем", то совместимость можно нарушить в тех случаях, если это дает реальный прогресс хоть в чем-то. В данном же конкретном случае я этого не вижу вообще.

Цитата
А вот по логике работы схема в AVR куда более прозрачная и правильная чем у процессоров с пре-декрементом. Указатель стека всегда указывает на адрес действительной ячейки памяти а не на no-memory cell. Ведь физически нет такого адреса как RAMEND+1.
Каков смысл в предекременте, кроме как чтобы специально добавить дополнительный риск в программы.

Я не вижу никакой логики в приведенном высказывании.

Во первых, стек не обязан находиться в конце памяти до RAMEND, и выражение SP+1 может иметь физический смысл.

Во вторых, никого из программистов не смущает конструкция языка C *p++ при работе с массивом в цикле. При последней итерации значение указателя точно также выходит за пределы блока памяти, выделенного массиву, и не гарантируется физическое существование чего-либо за пределами этого блока. Что при этом не мешает использовать эту конструкцию программистам, ибо, пока мы не применяем операцию разименования к полученному p, проблем не будет.

В третьих, ситуация с постдекрементной схемой ничуть не лучше в плане "дополнительного риска в программах". Если область стека находится с нуля, то при постдекрементной схеме мы вообще вылезем на адрес -1 после заполнения нулевой ячейки. Чем это лучше или безопаснее преддекрементной схемы - я лично не понимаю.

Итого, выходит, что изменив "стандартную de-facto" логику, мы не получаем никаких видимых плюсов. Зато получаем в пределах одного процессора две различных системы организации стеков (SP и X/Y/Z), да еще и в пределах единого адресного пространства. Вот тут я вообще не вижу никакой внешней логики (про возможные внутренние оптимизации я говорил исходно, но это знают только разработчики архитектуры).

В целом, не имея желания кому-то что-то доказывать, я, тем не менее, свои соображения всегда аргументирую. Было бы интересно услышать конструктивную критику с фактами по пунктам, приведенным мною. Пока же я так и не увидел того, что положительного было внесено имплементацией двух схем работы со стеком в AVR. Ваши высказывания, уважаемые собеседники, пока лично меня не убедили в прогрессивности этого шага (что я аргументировал по пунктам). Потому пока остаюсь при своем мнении.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 02:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016