Volatile
volatile это слово, известное как квалификатор переменной, оно обычно пишется перед типом переменной.
Объвление переменной как volatile является директивой компилятора. Компилятор - это программа, которая транслирует ваш C/C++ код в машинный код, который явлется настоящими инструкциями для чипов ATmega/
В частности данная дирректива указывает компилятору загружать переменную из ОЗУ, а не из регистров процессора, являющимися временным местом дисклокации переменных, с которыми в данный момент оперирует процессор. В некоторых случаях значение переменной, сохраненной в регистре может стать неточным.
Переменная должна быть объявлена как volatile в случае, если она может быть внезапно изменена во время выполнения основной программы. В МК таким слабым местом является использование прерываний.
Пример
// toggles LED when interrupt pin changes state
int pin = 13;
volatile int state = LOW;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);
}
void loop()
{
digitalWrite(pin, state);
}
void blink()
{
state = !state;
}
Const
Данный квалификатор определяет перменную как read-only - только для чтения. Это значит, что вы можете использовать значение переменной, но не можете его менять. В случе обращения к перезаписи такой переменной компилятор выдаст ошибку.
Константы, объявленные квалификаторм const подчинаются всем правилам переменных. Это значит, что можно не использовать #define для объявления константы и использвоание const является более правильным,ч ем использование #denife.
Пример;
const float pi = 3.14;
float x;
// ....
x = pi * 2; // it's fine to use const's in math
pi = 7; // illegal - you can't write to (modify) a constant
#define или const
Вы можете использовать const или #define для создания цифровых или строковых констант. Для массивов вы можете использовать только const. На практике использование const имеет преимущество перед #define.
Переменные в языке C имеют область действия переменной.
Глобальные переменные видимы в любой функции программы. Локальные переменные видимы только для функции, в которой они были объявлены. В среде разработки Arduino глобальными, считаются все переменные объявленные вне функций.
Когда программа становится большой и более сложной, локальные переменные -являются отличным способом обезоапасить себя от лишних проблем, поскольку доступ к ним есть только у объявившей их функции. Это исключает ошибки модификации этой переменной другой функцией.
Иногда удобно обхъявлить переменную в теле цикла. В этом случае создается переменная, доступ к которой есть только внутри цикла.I
Пример:
int gPWMval; // глобальная переменная
void setup()
{
// ...
}
void loop()
{
int i; // "i" локальная переменная, видимая только для "loop"
float f; // "f" локальная переменная, видимая только для "loop"
// ...
for (int j = 0; j <100; j++){
// доступ к j есть толкьо внутри цикла.
}
}
Дата добавления: 2015-03-23; просмотров: 681;