Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Не могу вернуть указатель из функции

Непрочитано 17.10.2014, 12:05  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Сообщение от shindax Посмотреть сообщение
Привести пример?
Да, приведите! Чтобы без глобальных и volatile.
Реклама:
STM32F0 вне форума  
Непрочитано 17.10.2014, 12:22  
shindax
Прописка
 
Регистрация: 04.09.2009
Сообщений: 167
Сказал спасибо: 1
Сказали Спасибо 35 раз(а) в 25 сообщении(ях)
shindax на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Раз переменная объявлена, как volatile, то она не может быть неглобальной и в данном случае, такая переменная есть неизбежное зло. Никто не говорил, что без них вообще можно обойтись, было сказано "дурной тон". Во всех остальных случаях лучше передавать переменные через парметры функций. И я говорил про пример, как оптимизатор может обойтись с переменой без volatile.
shindax вне форума  
Непрочитано 17.10.2014, 12:25  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Сообщение от STM32F0 Посмотреть сообщение
Да, приведите! Чтобы без глобальных и volatile.
И чтобы прерывания были и в этих прерываниях была работа с переменными
realid вне форума  
Непрочитано 17.10.2014, 12:32  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Не спугни! "Гусары, молчать!"(С)
STM32F0 вне форума  
Непрочитано 17.10.2014, 12:37  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Сообщение от shindax Посмотреть сообщение
Раз переменная объявлена, как volatile, то она не может быть неглобальной
Это почему?
Цитата:
Никто не говорил, что без них вообще можно обойтись, было сказано "дурной тон".
Без них нельзя, но тон дурной? Это как?
Цитата:
И я говорил про пример, как оптимизатор может обойтись с переменой без volatile.
Регистры МК, это глобальные или локальные переменные? Почему тогда они volatile?
STM32F0 вне форума  
Непрочитано 17.10.2014, 12:55  
shindax
Прописка
 
Регистрация: 04.09.2009
Сообщений: 167
Сказал спасибо: 1
Сказали Спасибо 35 раз(а) в 25 сообщении(ях)
shindax на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Сообщение от STM32F0 Посмотреть сообщение
Да, приведите! Чтобы без глобальных и volatile.
Да вот простой пример на PIC:
...
...
Код:
void main( void )
{
 initSFRS();
 initSystem();
 while(1)
{
// Какой-то автомат либо мало связаный с прерываниями, либо использующий их флаги не 
// прибегая к обработчику
}
}

void interrupt isr( void )
{
 static unsigned char sec = 0;
 static unsigned char min = 0;
 static unsigned char hour = 0;
 static unsigned int val1 = 0;
 static unsigned char val2 = 0;

 if( TMR1IF && TMR1IE )
 {
   val1 = PORTC ‹‹ 8 | PORTB ;

   val2 = func1( val1 );
   func2( &val1, &val2 );
 
   eepromWrite( val1, val2 );


     TMR1IF = 0 ;
     sec++ ;
     if( sec == 60 )
          {
             sec = 0 ;
             min ++ ;
          } 
     if( min == 60 )
          {
             min = 0 ;
             hour ++ ;
          } 

     if( hour == 24 )
             hour = 0 ;

    DisplayOut();
    }

 if( RBIF && RBIE )
  {
    Обработка кнопок ;
  }
}
И эти часы будут ходить и что-то ещё в прерывании будет делаться, и в main-е что-то будет происходить.

Последний раз редактировалось shindax; 17.10.2014 в 13:09.
shindax вне форума  
Непрочитано 17.10.2014, 13:01  
shindax
Прописка
 
Регистрация: 04.09.2009
Сообщений: 167
Сказал спасибо: 1
Сказали Спасибо 35 раз(а) в 25 сообщении(ях)
shindax на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Сообщение от STM32F0 Посмотреть сообщение
Это почему?
Потому, что её может изменить прерывание, а передать что-то в прерывание простым способом затруднительно

Сообщение от STM32F0 Посмотреть сообщение
Без них нельзя, но тон дурной? Это как?
Их можно использовать, если без них уж совсем сложно получается, но как можно реже.

Сообщение от STM32F0 Посмотреть сообщение
Регистры МК, это глобальные или локальные переменные? Почему тогда они volatile?
Глобальные, разумеется, раз они существуют в адресном пространстве с первых тактов генератора и занимаемая ими память не может быть освобождена для других переменных.

Это всё прописные истины и об этом исписаны тонны бумаги.

Последний раз редактировалось shindax; 17.10.2014 в 13:07.
shindax вне форума  
Непрочитано 17.10.2014, 13:09  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Сообщение от shindax Посмотреть сообщение
Да вот простой пример на PIC:
Не катит! Static инициализируются ещё до майна. Следовательно они не локальные в чистом виде.
STM32F0 вне форума  
Непрочитано 17.10.2014, 13:18  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Сообщение от shindax Посмотреть сообщение
Потому, что её может изменить прерывание, а передать что-то в прерывание простым способом затруднительно
Локальная тоже может быть volatile!
Цитата:
Их можно использовать, если без них уж совсем сложно получается, но как можно реже.
Volatile тоже рекомендуют не тулить где попало, однако это не "дурной тон", почему-то.
Цитата:
Это всё прописные истины и об этом исписаны тонны бумаги.
Так почитайте ещё раз!
STM32F0 вне форума  
Непрочитано 17.10.2014, 13:18  
shindax
Прописка
 
Регистрация: 04.09.2009
Сообщений: 167
Сказал спасибо: 1
Сказали Спасибо 35 раз(а) в 25 сообщении(ях)
shindax на пути к лучшему
По умолчанию Re: Не могу вернуть указатель из функции

Сообщение от STM32F0 Посмотреть сообщение
Не катит! Static инициализируются ещё до майна. Следовательно они не локальные в чистом виде.
С чего бы это? Что изменится, если они будут инициализированы после мэйна? Неважно, где и когда это произойдёт, важно то, что они являются локальными внутри функции isr. В любой другой функции, могут содержать одноименные локальные переменные. И какие тогда переменные можно считать "истинно глобальными"? Только те, которые вне функций объявлены?

Последний раз редактировалось shindax; 17.10.2014 в 13:20.
shindax вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучение PIC C Compiler(CCS C) CERGEI1982 Embedd С 2008 26.08.2026 21:20
Книги dosikus Электронная библиотека 11242 29.12.2015 23:45
Помогите найти функции чтения-записи для 24с64 begun AVR 15 05.03.2014 00:00
Расчет функции косинус Nihoden TTL и CMOS логика 26 14.05.2013 16:49
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43


Часовой пояс GMT +4, время: 15:05.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.