|
|
 |
Ответов
(15 - 29)
|
May 27 2010, 11:15
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 24-05-10
Пользователь №: 57 488

|
Цитата(MrYuran @ May 27 2010, 14:37)  Да у вас один вызов функции может полстека съесть! Что ж так жадничаете? Затруднил себя покопаться поглубже в настройках компилятора )) Мне казалось, что его размер выбирается автоматически
|
|
|
|
|
May 27 2010, 12:27
|
Участник

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

|
хм, в чем разница объявления глобальной переменной в модуле?
int abc;
static int abc;
Разницы ведь никакой, переменная так и останется глобальной в пределах видимости модуля, дак зачем тогда еще и static прописывать?
|
|
|
|
|
May 27 2010, 12:35
|

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

|
Цитата(John851 @ May 27 2010, 16:27)  Разницы ведь никакой, переменная так и останется глобальной в пределах видимости модуля, дак зачем тогда еще и static прописывать? Вот именно, "в пределах видимости модуля". То есть мы сообщаем компилятору, что за пределами данного модуля эта переменная не используется. Что позволяет ему оптимизировать её в хвост и гриву. То же самое относится и к функциям. Вывод: Если для вас разницы нет, пишите static везде, где можно.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 28 2010, 06:25
|

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

|
Цитата(_Pasha @ May 28 2010, 09:52)  А шо, не использовать же delay() в прерываниях!?  А действительно, я как-то и не думал о таком применении. Это ж можно макрос накатать типа TIMER(interval,action) и существенно обкультурить исходники
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 28 2010, 07:04
|

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

|
Цитата(sigmaN @ May 28 2010, 00:42)  IMHO - ничего не понимаете вы в колбасных обрезках  Может быть всех тонкостей применения static не знаю - учился на электронщика а не программиста Но для глобальных переменных никогда его не применял  Были конструкции такого типа (когдато подсказали сдесь на форуме) Код #define PutString(x) do{static __flash char str[]=x; _putstring(str);}while(0); Ну ещё в прерываниях по таймеру если нужно было с фиксированным периодом чтото выполнять Код void ISR_PIT(); { static unsigned int i=1000;
//вызов задачи раз в секунду if(i>0) i--; else { i=1000; TaskON(5); } } Цитата(Сергей Борщ @ May 28 2010, 02:24)  static для глобальных и локальных переменных имеет разное значение. Вопрос #17 был про глобальные переменные, а вы ответили про локальные. Вы правы - действительно мой ответ касался локальных переменных В глобальных не приходилось применять - небыло необходимости объявлять переменные видимые только в одном модуле
Сообщение отредактировал mempfis_ - May 28 2010, 07:04
|
|
|
|
|
May 28 2010, 10:02
|
Участник

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

|
хм, а если я создам массив большой >1 Кб а памяти ОЗУ у меня всего 1Кб, тогда чего будет динамическая подгрузка данных из флэши?))
|
|
|
|
|
Jun 1 2010, 06:57
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 =)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|