Понятие ASCII в разработке встроенного программного обеспечения

Добавлено 11 июня 2019 в 09:22

Данная статья служит для подготовки к обсуждению строк в языке C, знакомит с концепцией символов ASCII и объясняет два преимущества кодирования на основе ASCII.

Дополнительная информация:

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

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

Понятие ASCII

ASCII расшифровывается как American Standard Code for Information Interchange (Американский стандартный код для обмена информацией). В этом коде одно двоичное число обозначает ровно один символ, где «символ» обозначает заглавную букву, строчную букву, цифру, знак пунктуации или какой-либо другой символ, который вы можете найти на клавиатуре. В следующей таблице приведен «перевод» между числами (здесь они записаны в десятичной записи вместо двоичной) и символами ASCII, соответствующими заглавным и строчным буквам английского алфавита.

Фрагмент таблицы ASCII для английского алфавита
СимволДесятичное значениеСимволДесятичное значение
A65a97
B66b98
C67c99
D68d100
E69e101
F70f102
G71g103
H72h104
I73i105
J74j106
K75k107
L76l108
M77m109
N78n110
O79o111
P80p112
Q81q113
R82r114
S83s115
T84t116
U85u117
V86v118
W87w119
X88x120
Y89y121
Z90z122

Важно понимать, что ваш микроконтроллер ничего не знает об английских буквах, знаках препинания или цифрах. Ваш микроконтроллер – это очень маленькая машина обработки двоичных чисел, и любые символы, присутствующие в вашей прошивке, являются просто вашей интерпретацией двоичных чисел. Из-за ошибочного представления о том, что ваши переменные или элементы массива на самом деле содержат символы ASCII в той или иной форме, может возникнуть серьезная путаница. Разработка программного обеспечения (прошивок) для встраиваемых систем становится более понятной, более упорядоченной и более гибкой, когда вы понимаете, что символы в действительности являются двоичными числами и могут храниться, передаваться и обрабатываться как двоичные числа – они не становятся символами ASCII, пока вы не будете готовы интерпретировать их как символы ASCII.

Достоинства и недостатки ASCII

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

Широко используемый стандарт

Неоспоримым преимуществом ASCII является стандартизация. Интегрированные среды разработки, программы терминалов и пакеты вычислительного программного обеспечения понимают ASCII, и, следовательно, символы ASCII являются удобным и эффективным способом передачи и отображения информации.

Двоичное представление символов ASCII
Двоичное представление символов ASCII

Надежная передача данных

Менее заметным, но, возможно, не менее важным преимуществом является тот факт, что ASCII предоставляет средства представления информации с использованием ограниченного набора двоичных чисел. Любое числовое значение может быть представлено последовательностью цифр ASCII от 0 до 9 (вместе с представлением десятичной запятой в ASCII, если это необходимо). Эти символы ASCII соответствуют очень маленькому подмножеству из 256 значений, предлагаемых 8-битным двоичным числом. Но почему это важно?

Представьте, что у вас есть приложение, в котором микроконтроллер должен передавать на компьютер непредсказуемые и сильно изменяющиеся 8-битные показания датчиков. Если вы передаете данные в виде обычных двоичных чисел, отдельный байт может содержать любое число от 0 до 255. Это оставляет вас без удобного, простого способа организации данных или включения команд в поток данных, потому что все возможные двоичные числа нужны только для передачи необработанных результатов измерений. Компьютер не сможет отличить данные числовых измерений от других видов информации.

Если вы передаете данные измерений, используя символы ASCII вместо обычных двоичных чисел, в действие вступают преимущества ограниченного набора. Для представления числовых данных вам нужно только десять двоичных значений (соответствующих цифрам ASCII от 0 до 9), а другие двоичные значения могут быть зарезервированы для специальных функций, поскольку они никогда не появятся в данных измерений. (Если вы хотите прочитать о более эффективном, но более сложном подходе к организации цифровых данных, смотрите статью о связи на основе пакетов.)

Здесь цифры ASCII используются для передачи показаний температуры. Конец каждого показания идентифицируется символом возрата каретки (сокращенно CR); двоичное значение, соответствующее CR, никогда не появится в данных измерений
Здесь цифры ASCII используются для передачи показаний температуры. Конец каждого показания идентифицируется символом возврата каретки (сокращенно CR); двоичное значение, соответствующее CR, никогда не появится в данных измерений

Снижение эффективности

Ценой, которую вы платите за стандартизацию и улучшенную передачу данных, является менее эффективное использование памяти, вычислительной мощности процессора и пропускной способности канала связи. ASCII – это система, основанная на байтах. Каждому символу требуется восемь бит – даже, например, цифра "1", которая в обычных двоичных условиях может быть представлена 1-битным числом, вместо 8-битного числа.

По моему опыту, это редко является серьезной проблемой. Современные микроконтроллеры обладают вычислительной мощностью и ресурсами памяти, которые намного превышают требования многих приложений. Однако если вам действительно нужно максимизировать производительность или минимизировать использование памяти, вам может потребоваться отказ от удобства ASCII.

От ASCII к строкам

Как упоминалось во введении, данная статья является не только обзором ASCII, но и введением в способ обработки символьного представления в языке программирования C. Мы называем этот тип представления строкой – это последовательность или «строка» символов ASCII. О массивах и строках в языке C можно прочитать в статье «Понятие массивов в программировании на C».


На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.


Сообщить об ошибке