Использование int при программировании Arduino

delay функция Программирование

Введение

Arduino IDE — это интегрированная среда разработки для контроллеров Arduino, которая позволяет написать, загрузить и отладить код. Эта среда разработки доступна для нескольких операционных систем, включая Windows. Её можно скачать  сайта: https://www.arduino.cc/en/software

Тип данных int

Перед тем, как перейти к особенностям типа данных int, объясним понятие «переменные», для обозначения значений которого они используются:

программ

Переменной называется некое хранилище в ОЗУ микроконтроллера, имеющее свое единственное имя и адрес, находящийся в памяти, а также хранящее значение(численное или буквенное). Переменные, имеющие численные значения, могут использоваться в программе для стандартных математических операций: сложение, вычитание, умножение, деление, возведение в степень и изменение типа данных. К переменной можно сослаться по её имени, а также получить и изменить ее значение. Применяются переменные, в основном, для хранения промежуточных решений или результатов вычислений, полученных из хранилищ или внешних данных, не входящих в искомое. Используются в программе в следующем виде:

<тип переменной> <наименование переменной>=<значение переменной>

int a = 1;

Как хранится информация?

Любые данные(информация, решение задачи и различные вычисления) хранятся в памяти, в то время как память состоит из элементарных хранилищ, имеющих два состояния: ложь(0) и истина(1). Такая единица информации называется битом(bit). Байт(byte) является минимальным пакетом памяти, к которому можно сослаться по имени или адресному набору непосредственно из программы. Байт, в свою очередь, в Arduino и подавляющем большинстве платформ и процессоров состоит из 8 бит. Любой тип данных кратен 1 байту.2 8

2^8=256 является предельным количеством состояний, или же значений, которых можно записать в 8 бит или 1 байт.

Счёт в программировании идет не с единицы, а с нуля, из-за этого 1 байт хранит число в диапазоне [0;255].

Наиболее распространенные типы переменных в микропроцессоре Arduino по размеру кратны степеням двойки:

1 байт=8 бит=256

2 байта=16 бит=65 536

4 байта=32 бита=4 294 967 296

Основные типы данных

Целочисленные типы данных являются основными для хранения численных значений переменных. Наиболее распространенных из них-int.

Тип данных int используется для хранения значений целых чисел в диапазоне от

-32 768 до 32 767. Вес каждого значения-2 байта , на микроконтроллерах типа ESP8266/ESP32-4.

Помимо типа int для обозначения целых чисел используют: int8_t(вес 1 байт, диапазон от -128 до 127), byte(вес 1 байт, альтернативное название uint8_t, диапазон от 0 до 255), unsigned int(вес 2 байта, альтернативное название uint16_t и word, диапазон от 0 до 65535), long(вес 4 байта, альтернативное название int32_t, диапазон от -2147483648 до 2147483647), unsigned long(вес 4 байта, альтернативное название uint32_t, диапазон от 0 до 4294967295), а также int64_t(вес 8 байт, диапазон от -(2^64)/2 до (2^64)/2-1) и uint64_t(вес 8 байт, диапазон от -2^64+1 до 2^64-13

Переменные, хранящие целочисленные значения, имеют альтернативные названия типов, которые:

  • проще запомнить в связи с более короткими названиями
  • короткие альтернативные названия позволяют быстро изменить типы данных
  • размер переменных не зависит от типа микропроцессора), поскольку задан жестко.

Каждый тип имеет константы максимального значения, которые можно использовать в коде.

На Arduino Uno и иных платах, основанных на базе ATmega, int хранит 16-битное(2-байтовое) значение, имеющее диапазон от -32768 до 32767(от -2^15 и 2^15-1). На платах Due и SAMD(например, MKR1000 и Zero) int хранит 32-битное(4-байтовое) значение в диапазоне от -2147483648 до 2 147 483 647(-2^31 до 2^31-1).

Данный тип данных хранит отрицательные значения при помощи метода «дополнительного кода». Знаковый разряд, или же, Бит знака, помечает его как отрицательное. Оставшиеся биты обращаются в противоположное состояние и добавляется единица.

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

Приведем в пример программу, которая подсчитывает количество проведенных операций(циклов).

int countUp = 0; //создание переменной, подсчитывающей количество циклов

void setup() {

Serial.begin(9600); //даем команду послать по последовательному порту данные со скоростью 9600 бит/сек, можно использовать без указания скорости, так как это является стандартным значением

}

void loop() {

countUp++; //добавляем единицу после выполнения цикла

Serial.println(countUp); //выводим настоящее значение переменной

delay(1000);

}

При превышении максимального значения заданного типа переменная «переполняется». В такой ситуации результат неизвестен, но в большинстве случаев сигналом для этого является возврат к начальному значению переменных. Как правило, для того, чтобы избежать данной ситуации, советуем использовать тип unsigned int.

Постоянные переменные

Константа-постоянная переменная, которую невозможно изменить, она неизменна на протяжении всего выполнения команды.

Существует два способа задания константы:

  1. Задать ее как переменную, при этом указав постоянность перед ее заданием:

const <тип переменной> <наименование переменной>=<значение переменной>

const int a = 10;

Принцип работы данной строки заключается в том, что это обыкновенная переменная, однако она неизменна. При компиляции все пройдет без ошибок, однако переменная не изменится. Такая переменная имеет имя, к которому можно сослаться, переменная хранится в ОЗУ контроллера. Однако использование данного способа существенно влияет на быстродействие микроконтроллера: вычисления с константой не оптимизируются.4 1

  1. При помощи создания макроса #define:

#define <наименование переменной> <значение переменной>

#define a 10

Макрос, созданной директивой #define хранится в Flash памяти, являются частью кода, соответственно и оптимизируются. Однако имеются и недостатки, среди которых то, что она не имеет адресного имени.

Не советуется обозначать константы именами, используемыми в вычислениях другими переменными.

Оцените статью
Информация об Ардуино
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я принимаю политику конфиденциальности.