Морж• 05.07.2005 23:42
Я никогда комменты на русском не писал. По-английски мне и самому понятнее.
А приколы разные бывают. Вот я унаследовал написаную боссом программу, которая работала безупречно в реальном мире, а на эмуляторе иногда дохла. На процессоре 6811.
Поиск выявил следующее: вместо инициализации числом #$FF инициализация была содержимым ячейки $FF. Ну забыли диез поставить. А в реальном процессоре содержимое ячейки $FF при том коде, который был прожжен, было как раз-таки #$FF. Ну и все работало. А на эмуляторе содержание ячейки было каким угодно: EEPROM эмулировался в static RAM.
А устройство уже много лет продавалось и работало безупречно. Проблемы начались, когда стали модифицировать.
А вот еще была как-то интересная хардверно-софтверная детектива.
На одном нашем устройстве изредка при выключении терлась вся энергонезависимая память (ну тот же EEPROM). A в ней - все рабочие параметры. И, когда такое случалось, бедный оператор вручную заново обновлял все параметры (а там и углы зажигания, и коэффициенты и частоты и т.д. Много всего).
Ну, выяснилось интересное.
Моторола рекомендовала в качестве генератора ресета некое устройство, кажется MC34064. Но в серьезных устройствах нужен не просто генератор ресета, но генератор-монитор блока питания, с вочдогом и т.д. Который при пропадании питания должен иттить к земле и держаться около ней.
Один из таких Ресеттеров был установлен на нашей плате.
Но устройство питалось от блока питания, который разряжался ну не так, чтоб уж быстро. И где-то на полпути к земле, этот ресеттер иногда мог воспрянуть духом и попытаться выдать логическую единичку, но уже при низком питании. Где-то в районе 1.5 Вольта.
Процессор, будучи CMOS-устройством, способным чевой-то делать и при низких напряжениях, тоже решал, что питание есть, ресет прошел - надо исполнять программу, и начинал ее исполнять.
проблема была в том, что при низком (ниже спецификаций) питании не все команды исполняются правильно, и первыми отказывают команды ветвления.
В результате процессор исполнял весь код линейно, и, никуда не прыгая, спокойно доходил до сабрутины программирования-стирания EEPROM-а, ну и......
В общем, это было увлекательное путешествие.
А ресеттера заменили на простой, который Моторола и рекомендовала. Он не шибко умный, но ложных ресетов не допускал.
Кань• 05.07.2005 20:34
Мою первую серьезную прогу я написал году в 1999 (см. по ссылке). Ассемблер сигнального процессора приходилось отлаживать по осциллографу, поскольку предусмотренные для отладки на ПиСи эмулятор этого сигнального процессора работал из рук вон плохо.
Но самый прикол был не в том. Самый прикол обнаружился после месяца поиска необъяснимой ошибки в уже безупречно оптимизированном коде. Причина этой ошибки обнаружилась после того, как я деассемблировал уже откомпилированную прогу - и обнаружил в полученном листинге отсутствие нескольких строк из исходника. Оказалось все очень просто: супермудрый компилятор плохо хавал русскоязычные комментарии. После того, как я в исходнике убрал все комментарии - откомпилированная прога заработала безупречно.
Кстати, в Матлабе обнаружилась подобная же фигня: он букву "я" в комментариях не переваривает, генерируя всякие сообщения об ошибках при ее обнаружении.
Ну а в упомянутой в прошлый раз проге мне очень помогли мои знания внутренней организации ДОСа со всеми его КонтролБлоками и т.п. По сути, я в редуцированном виде воспроизвел на Матлабе идеологию этой системы. У меня "прикладные" скрипты погружаются основным модулем в определенную среду и работают в ней, ничего не зная и не желая знать об источниках данных и судьбе результатов и генерируемых ими отчетов. Собственно всю эту рутинную работу и взял на себя основной модуль - так сказать, ядро написанной мною системы. Его же собственное поведение во многом обуславливается переменными среды, в которой находится он сам.
В общем, пришлось немного попотеть, дабы минимизировать себе работу в дальнейшем.
ВСА• 05.07.2005 14:24
А дырку всё ж таки жалко...
;)
ВСА• 05.07.2005 14:23
\\ВСА - мне до тебя нужда. Срочная - одн факсик нужен. Мыло смотри.\\
Дык мыло-то у меня всегда перед носом, а это я только сейчас вот прочёл.-)
А жалко дырку... Я вот недавно опять был в тех местах, где прошло моё босоногое детство, дык там все дырки в заборах, через которые мы друг к дружке в гости бегали, позаделаны, тропинки через живые изгороди позаросли... А где же дети? Неужели они теперь ходят друг к другу как взрослые, от ворот до ворот, через улицу? Ой, а может быть они вообще не ходят друг к другу в гости, а сидят себе по домам и режутся в какой-нибудь там супер-марио-сони-плейстейшн? Страшно, страшно. Страшно, что я уже ворчу как старый дед, едва молоко с губ утерев. Иду по улице, как взрослый, строго вдоль заборов, о дырках жалею, а ведь дырку в небе никто ещё не заделывал...
Морж• 05.07.2005 00:08
Это написание первой серьезной программы. Потом уже либо не е..шься, либо не до полусмерти.
Я свою первую серьезную программу писал на UCSD-PASCAL-е, на APPLE-II. В 86-м году.
К тому моменту я вообще не умел программировать, хотя мог с закрытыми глазами собрать и разобрать, а так же починить (в случае с Эпплом - без схем, ибо их не было) любой компутер, от Эппла и до PDP-11.
Решил я сделать курс лабораторных работ для детей, по изучению электричества. А начал с цепи по изучению закона Ома: батарейка, реостат и Амперметр.
Ну вот. Все как положено: процедура для амперметра, в ней -процедура по рисованию стрелки и т.д. процедура для реостата: и сопротивление менять, и движок двигать. Все как положено.
В общем, вышла неплохая лабораторная работа. В ней даже можно было спалить амперметр, доведя движок реостата до нуля. В этом случае стекло амперметра покрывалось трещинами, и он, испустив последнее проклятие (на тогда плохо знаемом мною английском - компьютерные лагеря были международные) в письменном виде, вырубал программу на выход.
Потом еще был тренажер азбуки Морзе. С подпрограммами на Эппловском ассемблере.
Я испытал именно это....среднее между ханимуном и оргазмом.
Но с тех пор не испытывал. В смысле, когда программы писал.
А последние 8 лет и вовсе никаких программ не пишу.