Область действия переменной и квалификаторы

Интернет-магазин

Новости Arduino

16 декабря 2013г.
Flutter - платформа разработки, основанная на Arduino
01 марта 2013г.
TV-выход на Arduino
08 февраля 2013г.
Raspberry Pi медиацентр своими руками
08 ноября 2012г.
Пополнение в библиотеке - Bionic Arduino на русском языке
04 июля 2012г.
Сонар для слепых на базе Arduino Mini Pro
30 мая 2012г.
Новости Raspberry Pi или шесть мучительных недель
16 мая 2012г.
Подключение датчика движения к Ардуино
14 февраля 2012г.
Arduino Pong - игровая платформа

Контактные данные

Телефон:
(093) 503-26-13
Электронная почта:

 

Главная Библиотека Arduino Описание языка Arduino на русском языке Область действия переменной и квалификаторы

Область действия переменной и квалификаторы

Библиотека Arduino Описание языка Arduino на русском языке Область действия переменной
Переменные в языке 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 есть толкьо внутри цикла.
}
}


Static
Слово Static используется для создания переменной, видимой только для одной фнукции. В отличие от уничтожаемой каждый раз при выходе из функции локальной переменной, эта остается объявленной.
Переменые, объявленные как Static будут созданы лишь однажды, при первом вызове функции.
Пример:
/* RandomWalk
* Paul Badger 2007
* RandomWalk wanders up and down randomly between two
* endpoints. The maximum move in one loop is governed by
* the parameter «stepsize».
* A static variable is moved up and down a random amount.
* This technique is also known as «pink noise» and «drunken walk».
*/
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
int total;
void setup ()
{
Serial.begin (9600);
}
void loop ()
{ // tetst randomWalk function
stepsize = 5;
thisTime = randomWalk (stepsize);
Serial.println (thisTime);
delay (10);
}
int randomWalk (int moveSize){
static int place; // variable to store value in random walk — declared static so that it stores
// values in between function calls, but no other functions can change its value

place = place + (random (-moveSize, moveSize + 1));
if (place < randomWalkLowRange){ // check lower and upper limits
place = place + (randomWalkLowRange — place); // reflect number back in positive direction
}
else if (place > randomWalkHighRange){
place = place — (place — randomWalkHighRange); // reflect number back in negative direction
}
return place;
}


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 есть толкьо внутри цикла.
}
}


Static
Слово Static используется для создания переменной, видимой только для одной фнукции. В отличие от уничтожаемой каждый раз при выходе из функции локальной переменной, эта остается объявленной.
Переменые, объявленные как Static будут созданы лишь однажды, при первом вызове функции.
Пример:
/* RandomWalk
* Paul Badger 2007
* RandomWalk wanders up and down randomly between two
* endpoints. The maximum move in one loop is governed by
* the parameter «stepsize».
* A static variable is moved up and down a random amount.
* This technique is also known as «pink noise» and «drunken walk».
*/
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
int total;
void setup ()
{
Serial.begin (9600);
}
void loop ()
{ // tetst randomWalk function
stepsize = 5;
thisTime = randomWalk (stepsize);
Serial.println (thisTime);
delay (10);
}
int randomWalk (int moveSize){
static int place; // variable to store value in random walk — declared static so that it stores
// values in between function calls, but no other functions can change its value

place = place + (random (-moveSize, moveSize + 1));
if (place < randomWalkLowRange){ // check lower and upper limits
place = place + (randomWalkLowRange — place); // reflect number back in positive direction
}
else if (place > randomWalkHighRange){
place = place — (place — randomWalkHighRange); // reflect number back in negative direction
}
return place;
}


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.

Область действия переменной, квалификаторы, Описание языка Arduino

11.04.2011, 2226 просмотров.

Корзина пуста

Перейдите в каталог, выберите требуемый товар и добавьте его в корзину.

Метки