Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблемы с паузами в IAR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
SZ0
Применяя паузы в IAR использую файл:

#define Fosc_Hz Fosc
#define Fosc_kHz Fosc/1000
#define Fosc_MHz Fosc_kHz/1000
#define Fosc_GHz Fosc_MHz/1000
#define delay_ns(x) __delay_cycles(x*Fosc_GHz)
#define delay_us(x) __delay_cycles(x*Fosc_MHz)
#define delay_ms(x) __delay_cycles(x*Fosc_kHz)
#define delay_s(x) __delay_cycles(x*Fosc_Hz)

Выставил паузу 500мс - delay_ms(500) при Fosc = 16000000

Пауза отрабатывается неверно, т.к. компилятор выдаёт следующее:
Warning[Pe061]: integer operation result is out of range
Warning[Pe068]: integer conversion resulted in a change of sign

Если сделать __delay_cycles(8000000) то пауза чётко выдерживается.
Почему он не может нормально обработать delay_ms(x) при больших значения? Ведь __delay_cycles unsigned long, и число вроде должно нормально обработаться. Или я чего-то туплю... cranky.gif
GDI
Надо все ваши формулы в скобочки заключить, вот так
Код
#define Fosc_kHz (Fosc/1000)

И еще, чему у вас будет равно
Код
#define Fosc_GHz Fosc_MHz/1000
, когда вы 3 раза поделите 16млн на 1000?
SZ0
Цитата(GDI @ Aug 21 2008, 20:03) *
Надо все ваши формулы в скобочки заключить

Спасибо, а про скобки я и не подумал... 07.gif

Цитата(GDI @ Aug 21 2008, 20:03) *
И еще, чему у вас будет равно
Код
#define Fosc_GHz Fosc_MHz/1000
, когда вы 3 раза поделите 16млн на 1000?


0,016 lol.gif
zltigo
Moderator:
Я умоляю, сначала пользуемся поиском:
http://electronix.ru/forum/index.php?act=S...=__delay_cycles
Тему закрыл.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.