реклама на сайте
подробности

 
 
> спецификатор static
John851
сообщение May 26 2010, 12:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



Добрый день,

в какой памяти AVR хранится переменная объявленная со спецификатором static?

есть ли в avr libc (поставляемой вместе с WinAvr) атомарная операция nop?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
John851
сообщение May 27 2010, 12:27
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



хм, в чем разница объявления глобальной переменной в модуле?

int abc;

static int abc;

Разницы ведь никакой, переменная так и останется глобальной в пределах видимости модуля, дак зачем тогда еще и static прописывать?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение May 27 2010, 14:35
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(John851 @ May 27 2010, 15:27) *
Разницы ведь никакой, переменная так и останется глобальной в пределах видимости модуля, дак зачем тогда еще и static прописывать?


Если при следующем вызове функции понадобится значение этой переменной (хотя я в своей практике программирования ещё такого не встречал) то объявляйте её static - компилятор выделит под неё память и будет использовать только выделенную область памяти при вызове этой функции и конкретно для этой переменной.

Без static компилятор выделит память в стеке и после использования переменной забудет о ней (при следующем вызове ф-ии эта переменная может быть положена в стек в любом доступном месте и её начальное значение может быть произвольным).

Вобщем IMHO static это ненужный расход оперативной памяти которая могла бы пойти на увеличение стека.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение May 28 2010, 05:52
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(mempfis_ @ May 27 2010, 17:35) *
Если при следующем вызове функции понадобится значение этой переменной (хотя я в своей практике программирования ещё такого не встречал) то объявляйте её static


Код
void do_something(void)
{
static unsigned int ticks;
unsigned int tick_last;
//.................................
   tick_last = get_tick();
   if((tick_last - tick) > TIME_INTERVAL)
     {
        set_relay(1);
        tick = tick_last;
     }
}

Пример вызова ф-ции, включающей реле по наступлению момента времени TIME_INTERVAL с использованием некоей системы генерации системных тиков. А шо, не использовать же delay() в прерываниях!? biggrin.gif
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 28 2010, 06:25
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(_Pasha @ May 28 2010, 09:52) *
А шо, не использовать же delay() в прерываниях!? biggrin.gif

А действительно, я как-то и не думал о таком применении.
Это ж можно макрос накатать типа
TIMER(interval,action)
и существенно обкультурить исходники


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 1 2010, 06:57
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(MrYuran @ May 28 2010, 10:25) *
Это ж можно макрос накатать типа

Вот, накатал...
Попробовать, правда, пока не могу, некогда...
Код
/*********************************************************
*   Макрос для установки локального таймера
*   realtime - переменная системного времени
*   type - тип realtime
*   timer - временной интервал в тиках системного времени
*   action - действие по окончании интервала
*   continue - флаг "перезарядки" таймера
*********************************************************/
#define SET_TIMER(realtime, type, timer, action, continue)    \
do{ \
    static type timerVar = realtime + timer;    \
    if(timerVar>realtime){    \
        action;    \
        if(continue) timerVar = realtime + timer;   \
    }   \
}while(0)

Пример применения:
SET_TIMER(RealTime, unsigned int, 1000, DoSomething(), 1);
По идее, должен завести статическую переменную unsigned int под таймер,
отсчитать 1000 тиков, выполнить DoSomething() и перезапустить таймер

Вопрос на засыпку: локальную переменную создаст для do-while или для обёртывающей функции?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- John851   спецификатор static   May 26 2010, 12:30
- - MrYuran   Цитата(John851 @ May 26 2010, 16:30) в ка...   May 26 2010, 12:46
- - John851   абсолютно все переменные попадают в ОЗУ? или есть ...   May 26 2010, 12:54
|- - Сергей Борщ   Цитата(John851 @ May 26 2010, 15:54) абсо...   May 26 2010, 13:11
- - sigmaN   static лишь ограничивает область видимости перемен...   May 26 2010, 15:01
|- - xelax   Цитата(sigmaN @ May 26 2010, 19:01) stati...   May 27 2010, 06:03
- - swisst   Цитата(John851 @ May 26 2010, 15:30) есть...   May 26 2010, 16:44
- - John851   Еще немного про ОЗУ: А как происходит работа с ОЗУ...   May 27 2010, 05:30
|- - MrYuran   Цитата(John851 @ May 27 2010, 09:30) Еще ...   May 27 2010, 05:43
- - eracer   Извиняюсь, что влезаю в чужой топик. Возникла непо...   May 27 2010, 08:20
|- - aaarrr   Цитата(eracer @ May 27 2010, 12:20) При п...   May 27 2010, 08:31
|- - demiurg_spb   Попробуйте сделать табличку значений синуса с нужн...   May 27 2010, 09:30
|- - eracer   Цитата(aaarrr @ May 27 2010, 12:31) Стеко...   May 27 2010, 10:31
|- - MrYuran   Цитата(eracer @ May 27 2010, 14:31) Дейст...   May 27 2010, 10:37
||- - eracer   Цитата(MrYuran @ May 27 2010, 14:37) Да...   May 27 2010, 11:15
|- - aaarrr   Цитата(eracer @ May 27 2010, 14:31) А мож...   May 27 2010, 10:37
|- - MrYuran   Цитата(John851 @ May 27 2010, 16:27) Разн...   May 27 2010, 12:35
|- - aaarrr   Цитата(John851 @ May 27 2010, 16:27) Разн...   May 27 2010, 12:36
|- - Сергей Борщ   Цитата(mempfis_ @ May 27 2010, 17:35) Есл...   May 27 2010, 23:24
- - sigmaN   ЦитатаВобщем IMHO static это ненужный расход опера...   May 27 2010, 21:42
|- - mempfis_   Цитата(sigmaN @ May 28 2010, 00:42) IMHO ...   May 28 2010, 07:04
|- - demiurg_spb   Цитата(mempfis_ @ May 28 2010, 11:04) В г...   May 28 2010, 09:29
- - sigmaN   ЦитатаВ глобальных не приходилось применять - небы...   May 28 2010, 07:44
- - John851   хм, а если я создам массив большой >1 Кб а памя...   May 28 2010, 10:02
|- - demiurg_spb   Цитата(John851 @ May 28 2010, 14:02) хм, ...   May 28 2010, 10:13
- - XVR   ЦитатаВопрос на засыпку: локальную переменную созд...   Jun 1 2010, 08:47


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.0146 секунд с 7
ELECTRONIX ©2004-2016