19 декабря 2003, пятница

Между приверженцами разных культур, разных ОС, разных языков программирования, разных парадигм программирования, часто вспыхивают споры, ссоры, которые иногда перерастают в религиозные войны. Одной из давних и затяжных конфронтаций является противостояние Unix и Windows.

В начале этой неделе появилась новая статья Джоэля Спольски на его сайте Joel On Software, которая называется «Biculturalism». Статья написана очень эмоционально. Джоэль по своей традиции рассказывает о новой «книге месяца» (Book of the Month). Книгой месяца он назвал новую книгу Эрика Реймонда «Искусство UNIX-программирования» (Eric S. Raymond «The Art of UNIX Programming»). Судя по статье, книга Джоэлю очень понравилась, кроме тех моментов, когда автор имел неосторожность высказывать свое негативное мнение о Windows. Причем эти моменты его возмутили так сильно, что он тут же настрочил обширную статью, в которой высказал свое видение этого вопроса.

Статья написана настолько эмоционально, что временами ее становится тяжело читать. Надо сказать, что все статьи Джоэля Спольски написаны живым разговорным языком жителя Нью-Йорка. Я не берусь переводить ее (пусть этим занимается русская команда переводчиков), но некоторые моменты хотелось бы пересказать в моем объеме понимания американского языка.


10 декабря 2003, среда

Небольшая статья, иллюстрирующая применение отладочных функций симулятора Keil µVision2: «Отладочные функции: имитация клавиатуры».

Эта статья рассказывает о том, как с помощью отладочных функций симулятора µVision2 имитировать работу с клавиатурой. В качестве примера взята клавиатура из 4х клавиш, клавиши которой подключены непосредственно к выводам микроконтроллера.


4 декабря 2003, четверг

В первой части статьи про организацию цикла на 256 итераций я показал несколько приемов по оптимизации циклов в программах на Keil C51. Обсуждение корректности показанного подхода, которое разбушевалось в телеконференции, заставляет меня снова вернуться к этой (поистине неисчерпаемой!) теме. Сегодня я собираюсь объяснить те примеры, которые были приведены в первой части. Перед вами вторая часть статьи про циклы на 256 итераций.


2 декабря 2003, вторник

И снова приходится возвращаться к статье «Маленькие хитрости Си. Организация цикла на 256 итераций».

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

Моя статья рассчитана в первую очередь на пользователей пакета Keil C51 версии 7.х. В этом компиляторе я лично проверял получаемый код, поэтому его работоспособность гарантирую. При использовании других компиляторов настоятельно рекомендую вам проверять получаемый код.


30 ноября 2003, воскресенье

There are 10 kinds of people in the world: those who understand binary and those who don't.

Моя статья «Маленькие хитрости Си. Организация цикла на 256 итераций» сумела взбудоражить умы некоторых программистов, которые, очевидно, считают себя большими знатоками Си и программирования в целом. Обсуждение в телеконференции «Телесистем» (страница 528; ветвь обсуждения) вылилось в выяснение того, как байтовой переменной можно присвоить значение 256. Вот некоторые реплики:

 — Ахинея. Байт не может быть равен 256. только 255 == 0xFF — elpm
 — ...не понял, как ты переменной типа char умудрился присвоить значение 256? Сам хоть проверял, что написал? Чего-то сомневаюсь. — ..........
 — весь код взят из рабочих программ. А тем, кто сомневается, предлагаю проверить самостоятельно :-) — bialix
 — Если в этих «рабочих программах» остальной код такой же, тогда в них большие проблемы. Ты хоть понимаешь, что переменная типа char - это 8 бит, а число 256 в двоичном представлении - 9-ти битное? На самом деле твоей переменной присвоится 0.. не уверен, что 9-й бит не потрет чего-нибудь в памяти. Нормальный компилятор на такое должен ругаться в любом случае. — Виталий

Итак, диагноз ясен. Байт может быть равен только 255. Ни в коем случае ничему другому! Любые другие значения (такие, как 254, или 128, или даже 0) не допускаются!

Ах, да, и вот еще что. Все мои рабочие программы содержат «большие проблемы». Как они до сих пор работают — ума не приложу!


Чтение всех отзывов доставило мне большое удовольствие. Статья определенно удалась. Как видно, больше всего спотыканий почему-то у многих вызвало присвоение байтовой переменной значения 256 (запись: «unsigned char i=256»). Хотя буквально перед этим я привел другой пример кода:

for( i=256; i!=0; i--)
{ ... }

И высказал мысль о том, что если переменная i будет однобайтной, то тело цикла не будет выполнено ни разу. Это утверждение было проглочено всеми моими опонентами молча. А ведь там по сути тоже самое! И этот пример полностью объясняет тот самый спорный код. Правда те, кто статью читал невнимательно, а только увидел запись

unsigned char i = 256;

и закричал «Ахинея! Бред! Ошибка!», не поняли самого главного. В данном случае действует правило неявного приведения типов данных. Поэтому переменной i при выполнении программы будет присвоено значение 0.

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

Но... пришлось. Я добавил в свою статью объяснение вот этого спорного нюанса.

«Существует достаточно света для тех, кто хочет видеть, и достаточно мрака для тех, кто не хочет» © Блез Паскаль.

28 ноября 2003, пятница

Новая статья в разделе «Тонкости работы с Keil µVision2»: «Маленькие хитрости Си. Организация цикла на 256 итераций».

Эта заметка рассказывает о том, как можно построить на языке Си цикл на 256 итераций. Как вы догадываетесь, ничего сложно в этом нет. Я собираюсь показать вам, как в этом случае можно использовать байтовую переменную в качестве счетчика цикла. Описанный прием помогает оптимизировать циклы: уменьшается код и время выполнения программы.


12 сентября 2003, пятница

Интересная, почти философская статья о пользе палеонтологии как науки в применении к компьютерной и микроконтроллерной технике. Написана очень серьезным и уважаемым инженером Владимиром Князевым (aka Bill).

Владимир Алексеевич Князев окончил Челябинский Политехнический Институт в 1974г. по специальности радиотехника. Микропроцессорной (микроконтроллерной) техникой занимается с 1979г. Себя он характеризует так: «Все мои интересы находятся на стыке электроника/программирование, возможно с большим уклоном в сторону программирования.»

Обсуждение статьи велось на форуме «Телесистем» и здесь продолжение обсуждения. Почитайте. Отдохните. Подумайте.


13 августа 2003, среда

Приятная новость: появился русский перевод книги Джоэля Спольски «User Interface Design for Programmers» («Руководство по UI дизайну для программистов» — как мне кажется гораздо лучше бы смотрелся перевод названия ввиде «Руководство по пользовательскому интерфейсу для программистов» — но меня не спрашивали :).

Эту книгу стоит прочесть любому программисту, который хочет делать программы для людей, а не только для себя. Книг про пользовательский интерфейс написано уже достаточно, но пользовательский интерфейс многих программ все еще оставляет желать много лучшего. Книгу Джоэля отличает очень легкий и доступный стиль изложения, сдобренный хорошим юмором (те, кто читает его weblog «Joel On Software» знакомы с его стилем). Вот, например, как тонко подметил автор, почему программисты не хотят/не могут делать пользовательский интерфейс (выделение мое):

Мне кажется, страх программистов перед UI программированием объясняется их страхом перед UI дизайном. Они полагают, что UI дизайн похож на дизайн графический: мистический процесс создания классного, необъяснимо художественного материала, затеянный креативными, одетыми во все черное, украшенными замысловатыми пирсинг-узорами людьми, небрежно потягивающими абсент через трубочки. Себя же программисты оценивают как логически мыслящих аналитиков: блестящее умение аргументировать, слабовыраженный художественный вкус. К тому же, пьют они растворимый черный кофе. И поэтому работать над UI дизайном они не могут.

Для меня очень приятно иметь русский перевод его книги, поскольку, прочитав ее в оригинале, я хорошо понял ее главные положения, но некоторые юморные примерчики остались недопонятыми. К сожалению, ни в одном издательстве вы не найдете эту книгу на русском языке. В интернете же опубликованы только главные статьи книги, целиком ее можно прочесть лишь купив оригинал (например, через amazon.com).


7 августа 2003, четверг

Новые материалы в разделе Keil µVision2: новая статья «Запрещение прерываний в критических секциях программы» и немного переводов документации.


20 мая 2003, вторник

Новая статья «Отладчик µVision2. Пример использования пользовательских отладочных функций: определение времени выполнения участка программы» в разделе Инструменты инженера - Keil µVision2.

В этой статье идет речь об использовании пользовательских отладочных функций на примере функции, которая вычисляет длительность выполнения участков отлаживаемой программы. Пример иллюстрирует информацию из следующих документов:
GS51.pdf: глава 6 «Отладочные функции», параграф «Системные переменные» из главы 5;
Dbg51.chm: команда DEFINE.

Переводы этих документов Вы можете взять в подразделе Keil µVision2 — Переводы документации.


8 мая 2003, четверг

Добавлен материал в раздел Справочник — это довольно известное руководство по CRC-алгоритмам от Ross N. Williams. Недавно я нашел качественно выполненный перевод этого документа и решил выложить на своем сайте, поскольку подобного рода информация очень часто бывает нужна, но в нужный момент под руками ее не оказывается (со мной так иногда бывает).


29 апреля 2003, вторник

Новые материалы в разделе Keil µVision2: я перевел еще часть главы 5 «Отладка программ» из документа Gs51.pdf. Я решил опубликовать его до окончания перевода всей 5й главы, поскольку этот материал оказался мне полезен при отладке одной из программ. Эта программа имела многомодульную структуру, причем отдельные модули (обмен данными через UART, опрос кнопок клавиатуры) имели в своем составе статические переменные. Подробнее читайте в статье «Добавление статических переменных в окно отладчика Watch». Там же вы найдете и перевод параграфа «Переменные (символические имена) программы» из главы 5 документа GS51.pdf.


17 марта 2003, понедельник

Сегодня я выложил на сайт pdf-версию (202 кБ) перевода главы 6 «Отладочные функции µVision2». В этой версии документа, который ранее в формате документа Word успели скачать более 130 человек, я исправил некоторые неточности перевода. Я надеюсь, что этот перевод поможет вам в работе.