Цитата(bmf @ Jun 9 2005, 18:24)
Цитата
Так ведь автор вполне ясно сказал, что семафоры в любом виде совершенно бесполезны
Блин. Нет такого в доке.
Есть.

Цитата(bmf @ Jun 9 2005, 18:24)
И не может быть.
Наоборот из ядра и семафоров можно сделать все остальное. Это базовые составляющие минимального размера. В принципе и мне нужно только ядро и семофор, кстати часто вызываемый из прерывания (и в других ОС специально делается легковесный код семафора для вызова из прерывания, чтобы не нагружать стек, здесь такого нет).
Надо бы уточнить, что Вы понимаете под термином "семафар". Мутекс - семфор. И флаг события тоже семафор. Нет счетных семафоров? Да, нету. А они нужны? Приведите реальный пример на мелкой однокристаллке, где они нужны.
Цитата(bmf @ Jun 9 2005, 18:24)
Вообще не умаляя достоинств автора, чувствуется некоторая безапеляционность в сужденияж
Как то:
Цитата
Второй «кривой» момент AVR – это его убогий указатель
стека....
.....
1 Интересно, куда они смотрели, когда два норвега разрабатывали сам МК, ведь по информации от про-
изводителя AVR разрабатывался как процессор, ориентированный на применение его с языками высоко-
го уровня и в тесном сотрудничестве с фирмой-разработчиком компиляторов ЯВУ для МК???
Типа: Ну конечно они дураки, а мы умней
А что, не так, что-ли? AVR (ядро) по некоторым данным разработатли два студента из Норвегии. И задумка у них неплохая была, но вот реализация подкачала. Вот этот самый указатель стека - совершенно убогий! Ведь именно из-за этого IAR городит отдельный стек для данных. Два стека - это криво, преимуществ никаких, одни недостатки. А ведь будь указатель стека нормальный, то и не было бы никакой необходимости в отдельном стеке данных. Для стека данных нужно, чтобы указатель стека поддерживал расширенные режимы адресации (со смещениями) и адресную арифметику. Т.е. по-нормальному указатель стека должен быть регистровой парой. А в таком виде, как он есть - отстой.
Второй момент. У AVR слишком дофига регистров при том, что работа с ними неортогональна (младшая половина не работает, например, с константами). Гораздо лучше было бы если бы было регистров вдвое меньше (16), но все они были одинаковы и все они могли образовывать регистровые пары при адресации (т.е. быть указателями) и при адресной арифметике. Анализ кода показал, что в AVR заметный оверхед на пересылках адресов между регистрами, а нормальных поинтеров только два (из которых один отдан по указатель стека - Y). Реально в программе доступен только один Z, а X - недоделанный, не поддерживает адресацию со смещением. Вся эта кривизна очень распрекрасно видна при сравнении, например, с MSP430.
Третий момент - работа с памятью. Она медленная. Для Load/Store архитектуры работа с памятью должна быть максимально быстрой - ведь это ключевой момент, определящий быстродействие. Два такта на одно обращение - никуда не годится. Элементарный инкремент переменной в памяти занимает 5 тактов. из которых 4 - это накладные расходы на пересылку. Никуда не годится!
Это только основные моменты, но они, имхо, определяющие. Недоделанный он, AVR этот.
«Отыщи всему начало, и ты многое поймёшь» К. Прутков