2All -- в продолжение вчерашней статьи про цикл на 256 итераций(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено bialix 29 ноября 2003 г. 22:11

Мне было, очень приятно почитать все ваши отклики. Статья удалась. Больше всего спотыканий, почему-то у всех вызвало присвоение байтовой переменной значения 256.

Ах! Ах! Как же так! Караул! Не могет такого быть, потому что не могет быть никогда! Почему-то все эти люди, а особенно некий Виталий, забыли простой факт, что в байте умещается 256 значений.

Да, приведенное присвоение

unsigned char i = 256;

выглядит странно. На самом деле, как заметил Билл, корректнее было бы написать i = 0. Но!

Но читаемость программы при этом резко падает. Вы видите цикл, в начале которого переменной присваивается значение 0, а условием окончания цикла является сравнение на ноль. Э-э-э..? И сразу возникает вопрос -- КАК это работает?

Еще один факт -- если я заменю объявление unsigned char на unsigned int -- как это скажется на выполнении программы? В моем случае -- никак! Будет выполнено опять же 256 итераций. Если же записать i=0, то сколько раз будет выполнен цикл? Предлагаю посчитать самим, если вы знаете разрядность переменной типа int.

Еще одно. Почему вы решили, что всегда и везде и во всех процах и во всех компиляторах переменная типа unsigned char будет однобайтовой?

Еще одно. Миф про переносимость программ. Нет такого понятия! Это МИФ! Программу, написанную в Keil для 8051 вряд ли без изменений можно будет перенести в IAR для 8051. Си для встраиваемых систем -- это нечто особенное, хоть и пытается соответствовать стандарту ANSI C.

Еще одно. Замечания компилятора -- это замечания. Это НЕ реальные ошибки. Это потенциальные ошибки. Как говорил Морфей Нео в 1й Матрице: "В этой программе [спарринга] имитируются некие правила -- гравитация, закон Ньютона. Но ты должен понять -- это всего лишь программа. Некоторые правила можно обойти, другие нарушить". Как говорил классик -- главное конечный результат.

А конечный результат на асме51 для моего примера будет таким:


mov i, #0
label:
; тело цикла
djnz i, label

Ну и? Какие вопросы? Причем тут Visual C?

---
Закончить хочу известным афоризмом:


В мире есть всего 10 типов людей -- те, кто понимает двоичную систему счисления и все остальные.

Похоже Виталий и компания -- это те все остальные.

Спасибо за внимание.
(Копия этого объяснения будет помещена на мой сайт http://bialix.narod.ru/)

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru