Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> возврат значения функцией с временной задержкой 
:(
    Опции темы
supercelt
Дата 3.9.2017, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 643
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Здравствуйте! подскажите пожалуйста. Вот допустим у меня есть ф-ия

Код

int chek(void){
 delay_ms(5);
 count++;
 key |= какие-то вычисления;
 if(count == 4){
   return 1;
 }
 return 0;
}


и в майне я делаю вот так

Код

d = chek();


соответственно получаю значение. НО, использовать такую задержку что бы простаивало время я не могу. Придумал сделать по таймеру. Значит настроил его так что каждые 5 мс прерывание. И в нем выставляется флаг разрешения
Код

void TIM6_DAC_IRQHandler(void){
 if(TIM6->SR & TIM_SR_UIF){
  TIM6->SR &= ~TIM_SR_UIF;
   flag =1;
  }
}


а в функции:
Код

int chek(void){
 if(flag){
  flag = 0;
  count++;
  key |= какие-то вычисления;
    if(count == 4){
    return 1;
  }
 }
 return 0;
}


так вот когда я ее вызову в майне

Код

d = chek();

На момент вызова она же выдаст d = 0? Ведь таймер ещё не отработал свои 4 раза. А если я уберу return 0, то выдает ошибку и не пропускает. П.С. по условию возвратить 1 ф-ия должна именно после 4 прогонов

Это сообщение отредактировал(а) supercelt - 3.9.2017, 00:39
PM   Вверх
Romikgy
Дата 3.9.2017, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7115
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 140



Цитата(supercelt @  2.9.2017,  23:35 Найти цитируемый пост)
На момент вызова она же выдаст d = 0?

да 
PS вопросов более не увидел , что хотели спросить этим постом тоже не понятно...


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
xvr
Дата 4.9.2017, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6879
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 8
Всего: 220



Цитата(supercelt @  3.9.2017,  00:35 Найти цитируемый пост)
П.С. по условию возвратить 1 ф-ия должна именно после 4 прогонов

Тогда при чем тут задержки? Счетчик вызовов функции можно сделать на static переменной внутри нее. Без всяких таймеров

PM MAIL   Вверх
baldman88
Дата 4.9.2017, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 18.1.2009

Репутация: 1
Всего: 7



Цитата(xvr @ 4.9.2017,  13:02)
Цитата(supercelt @  3.9.2017,  00:35 Найти цитируемый пост)
П.С. по условию возвратить 1 ф-ия должна именно после 4 прогонов

Тогда при чем тут задержки? Счетчик вызовов функции можно сделать на static переменной внутри нее. Без всяких таймеров

Смысл в том, что инкрементировать нужно через определенные промежутки времени, как я понимаю. Чтобы в эти промежутки времени ядро могло заниматся полезной работой и используются прерывания от таймера (чтобы не просто в цикле ждать).
А по делу да -- нужна статическая переменная.
PM MAIL   Вверх
supercelt
Дата 5.9.2017, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 643
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Про count это я знаю. Этот кусок кода я быстро сделал для примера. То есть получается что единственный выход это  отслеживать пустая ли будет переменная d или нет? Или например сделать не return, а глобальную переменную и что б она в майне видна была. И в этой ф-ии её наполнять, а в майне уже проверять. Но говорят что лучше глобальные не использовать, типа это не оч хорошо...
PM   Вверх
Google
  Дата 21.9.2017, 20:40 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1371 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.