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

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

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

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

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

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


 
Опции темы
Непрочитано 14.04.2013, 10:52  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: FAQ по STM8

Что-то не пойму где глюк, или в IAR или в STM8S105 ил я что-то не понимаю.

Вот такая функция
Код:
unsigned char up(uart_buf_pos)
{ 
unsigned char bb,aа;
 for(bb=1;bb‹uart_buf_pos;bb+=2) a++;
 return aa;
}
Так вот это функция при каждом входе в неё возвращает значение aa плюс значение предыдущего входа , что за хрень я не объявлял её как static?По идеи при каждом входе в эту функцию эта переменная должна иметь значение 0.
Реклама:

Последний раз редактировалось stmfaq; 14.04.2013 в 10:55.
stmfaq вне форума  
Непрочитано 14.04.2013, 11:55  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от stmfaq Посмотреть сообщение
По идеи при каждом входе в эту функцию эта переменная должна иметь значение 0.
С какой стати "она должна"? Откуда взято такое требование? Рекомендую проверить её значение прямо на входе - если программу не менять, то оно будет равно предыдущему, возвращенному функцией up... Почему так? И почему только, если программу не менять?

Все глюки компиляторов локализуются в голове их пользователей.
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 14.04.2013 в 11:57.
tempora вне форума  
Сказали "Спасибо" tempora
stmfaq (14.04.2013)
Непрочитано 14.04.2013, 13:01  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от stmfaq Посмотреть сообщение
Что-то не пойму где глюк, или в IAR или в STM8S105 ил я что-то не понимаю.

Вот такая функция
Код:
unsigned char up(uart_buf_pos)
{ 
unsigned char bb,;
 for(bb=1;bb‹uart_buf_pos;bb+=2) a++;
 return aa;
}
Объявили aa без инициализации. В теле функции НИЧЕГО с ней не делали. Какое значение будет иметь aa на выходе?
Допустим, в теле цикла ачепятка. В таком случае какое вы имеете право производить любые действия с неинициализированной переменной? Какое ожидаете получить значение?
Возможно, вы имели ввиду так:
Код:
unsigned char up(uart_buf_pos)
{ 
unsigned char bb,aа = 0x00;
 for(bb=1;bb‹uart_buf_pos;bb+=2) aa++;
 return aa;
}
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
stmfaq (14.04.2013)
Непрочитано 14.04.2013, 13:41  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,799
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: FAQ по STM8

Насколько я знаю, обнуляются только глобально объявленные переменные. Используя это правило ошибок не встречал.
andries5 вне форума  
Непрочитано 14.04.2013, 16:06  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

stmfaq, так Вы нашли, почему значение сохраняется, или просто воспользовались готовым решением, предоставленным доброхотами?
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 14.04.2013, 16:13  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от tempora Посмотреть сообщение
stmfaq, так Вы нашли, почему значение сохраняется, или просто воспользовались готовым решением, предоставленным доброхотами?
Да ничего не нашел, просто инициализировал переменную нулевым значением и все. Дело в том что на AVR и компиляторе CV , этот же код работал нормально, без присвоения нулевого значения переменной.
stmfaq вне форума  
Непрочитано 14.04.2013, 16:24  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от stmfaq Посмотреть сообщение
на AVR и компиляторе CV , этот же код работал нормально, без присвоения нулевого значения переменной.
Строго говоря, этот код может работать так, как Вы этого ожидаете, только в силу случайного стечения обстоятельств. Рассчитывать на то, что CV - это компилятор, не следует, слишком много в нем глюков/ошибок.
Если Вы не вникли в ситуацию, то в следующий раз наступите на те же грабли - не обидно тратить на них время? И хорошо еще, если эти грабли обнаружатся на ранней стадии, а если они всплывут уже в готовом устройстве, и оно сделает то, чего делать ни в коем случае нельзя?
Решать Вам, конечно, но стоит-таки докопаться до сути. Рекомендую сначала ознакомиться с описанием классов памяти, а затем взглянуть на код, сгенеренный компилятором для этого участка программы.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 14.04.2013, 16:25  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от andries5 Посмотреть сообщение
Насколько я знаю, обнуляются только глобально объявленные переменные. Используя это правило ошибок не встречал.
Может наоборот, глобальные переменные не обнуляются. Вообще то локальная переменная существует только во время выполнения программного блока,в котором она объявлена, создается она при входе в блок , а удаляется при выходе из него.Это значит, что локальная переменная не сохраняет свое значение в период между вызовами, а для того чтобы она сохранила значение при повторном входе в функцию где она объявлена нужно объявить её с модификатором static.
Но похоже что в IAR все не так, и противоречит стандартам Си, ил у IAR все локальные переменные используются по умолчанию с модификатором static, хрен его знает,с каких делов при повторном входе в функцию у локальной переменной без модификатора static сохраняется значение.

Последний раз редактировалось stmfaq; 14.04.2013 в 16:31.
stmfaq вне форума  
Непрочитано 14.04.2013, 16:34  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,799
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: FAQ по STM8

При создании локальной переменной она получает случайное значение.
andries5 вне форума  
Непрочитано 14.04.2013, 16:38  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от andries5 Посмотреть сообщение
При создании локальной переменной она получает случайное значение.
Не в моем случае , я же написал что при повторном вызове функции у переменной оставалось значение предыдущего результата, это меня и смутило.
stmfaq вне форума  
 

Закладки

Метки
arm, cortex, stm32, stm8
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импульсная зарядка для авто-аккумуляторов (новодел) Falconist Источники питания и свет 1915 14.03.2024 19:56
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
STM8(S/L), первые впечатления kison STM8 1423 19.05.2018 19:23
Вопросы и замечания по топику - FAQ по PROTEUS avr123-nm-ru Proteus 291 05.06.2015 20:49
FAQ Импульсный трансформатор alberio Источники питания и свет 87 13.11.2012 18:07


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot