реклама на сайте
подробности

 
 
> delay(uS), как сделать макрос?
fmdost
сообщение Jul 28 2008, 15:54
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Доброго времени суток Уважаемые!
написал так... (IAR_AVR)
Код
#define sus_frec            8000000
#define uS                  sus_frec/1000000
#define delay_uS(data1)        __delay_cycles(##data1 * uS)


На строчку
Код

main{
delay_uS(300); < - !
...
ругается, мол перебор, преобразую в знаковый.
Подскажите, как сделать правильно? Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
XsanyaX
сообщение Jul 29 2008, 08:51
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 7-04-05
Из: Украина
Пользователь №: 3 948



Цитата(Т.Достоевский @ Jul 28 2008, 18:54) *
Доброго времени суток Уважаемые!
написал так... (IAR_AVR)
Код
#define sus_frec            8000000
#define uS                  sus_frec/1000000
#define delay_uS(data1)        __delay_cycles(##data1 * uS)


На строчку
Код

main{
delay_uS(300); < - !
...
ругается, мол перебор, преобразую в знаковый.
Подскажите, как сделать правильно? Спасибо.


IAR_AVR определяет все константы меньше 65536 как 16 разрядные..... поэтому теряется точность при делении
Может это не совсем правильно, но в выражениях вычисляемых компилятором я привожу все числа к unsigned long long:

#define XTAL 8000000
#define Wait_uS(x) __delay_cycles(((unsigned long long)XTAL*(unsigned long long)x)/(unsigned long long)1000000)


--------------------
Метрология - наука о достаточной точности.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016