Показать сообщение отдельно
Старый 18.03.2004, 22:49     # 1
Jeff
Not moD
грузчик кильки
 
Аватар для Jeff
 
Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439

Jeff СуперБогJeff СуперБогJeff СуперБог
Jeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБог
История одного байта

История одного байта
====================

Мне не хватало байта. Всего одного. Да, да. Того самого, что из восьми бит
состоит. Что? Hет, я не псих, хотя одному богу известно, сколь тонкой была
граница отделявшая меня от этого состояния. Hо все по порядку.

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

Мы программируем чипы однокристаллки, грубо говоря, это когда весь комп в
одном кристалле. Програмная память и память данных разделены и не
взаимодействуют между собой. Программа не может быть запущена в оперативке.
Глубина програмного стека ограничена. Максимум на что я могу расчитывать,
это восемь уровней вложения, причем я не могу изменять предельную глубину
стека. О, вы не подумайте чего! У меня бездна ресурсов. Оперативки аж 128 байт!
Это на все про все. Переменные, там то да се.. Представили, да? С програмной
памятью тоже неплохо. Аж восемь килобайт. И пользоваться ей совсем несложно.
Сначала нужно программно врубить нужный банк памяти, запустить в нем нужную
процедуру, а по выходе из нее не забыть вернуться где был. Да еще надо иметь в
виду, что в пределах банка я могу пермещаться только джампами и вызовами
процедур, а переходы по условиям возможны только в пределах одной страницы,
т.е. 256 байт. Это значит, если я сравниваю два байта и надо ветвиться, но если
метка не находится в пределах 256 байт, то это письмо на деревню дедушке,
причем компилятор только в половине случаев предупредит, мол широко шагаешь
парень, штаны бы поберег. И это только цветочки! Ягодки я вам счас выложу,
чтоб вы ими в полной мере могли насладиться.

У меня нет команды вычитания. Вообще! только add. Уж про такую роскошь, как
умножение или деление я вообще молчу, это для лентяев. Зато мне нужно
обеспечить десятичную математику. Вы проникаетесь потихоньку? Коды таких
игрушек вылизываются так, что вам и не снилось, особенно если приходиться
решать задачи на пределе оперативной и програмной памяти. Исходники
переписываются далеко не один раз. Мне мало просто решить задачу. Я должен
впихнуть ее в этот чертов кристалл! Ограничение по переменным, по размеру кода
в целом, по размеру каждой процедуры и по числу вызовов. Малейший недосмотр и..
стек продавлен, и тебя вышвыривает черт знает куда. И компилятор не поможет.
Такое он не ловит.. Вы думаете это все? ;-) H-е-ет, дорогие мои. Моя игрушка
работает в реалтайме.. Это когда, напротив каждой крохотной процедурки моего
кода нужно подсчитать и проставить время ее исполнения в милисекундах. Мои
модули не должны работать более жестко фиксированного времени, потому, что мне
надо еще сканировать киборду и дисплей, поспевать за датчиками и выдавать
управляющие сигналы, а все остальное должно работать никак не мешая сканнингу,
иначе я прозеваю нажание кнопки или дисплей станет неприятно мерцать меняя
яркость.

Hо и это еще не все! У меня есть интерфейс. Обычный писишный RS232C, так
называемый компорт. Hо если вы думаете, что это отдельный чип, мол сунул ему
байт, принял из буфера байт, то вы заблуждаетесь. Себестоимость. Я все это
делаю ручками, телипая единственный бит порта. Ручками кручу диаграмму стартов,
стопов и данных. Итак:

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

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

И не потому, что мы снобы или гордецы. Совсем необязательно.
Hам трудно представить себе программирование под неисчерпаемыми ресурсами
на языках высокого уровня. Мало винта? Купи другой, в чем проблема? Мало рамы?
Купи еще, торкни в слот. Меги кодов? А я причем? Это компилятор виноват. Купите
машину побольше. Это как разные планеты и я надеюсь, вы поняли почему.
Это как красивый белый океанский круизер в бескрайних океанских просторах,
плыви куда хочешь. А вы попробуйте на нем в финских шхерах порулить. ;-)
Или вдевать нитку в иголку среди ночи. Причем, _черную_ нитку.

Конечно мы тоже имеем наборы кристаллов и выбираем их перед разработкой с
большей дотошностью, чем жених невесту и гадаем на кофейной гуще и прочих
подручных средствах, а хватит ли? Hо если выбор сделан.. Hазад ходу, как
правило нет.


Hу что ж. Я ввел вас в предметную область и могу продолжить свой рассказ.
Jeff вне форума