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

 
 
> В чем подвох?
Sirko
сообщение Oct 19 2008, 00:06
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Не работает элементарный кусочек кода:
unsigned int boud = (14745600 / (16 * 2400)) - 1;

Если не использовать выражение, то все получается замечательно.

Такой вариант - функционирует.
unsigned int boud = 383;//(14745600 / (16 * 2400)) - 1;

И так тоже годится.
unsigned int boud = 16 * 2400;
boud = 14745600 / boud;
--boud;

Компилирую в AVRStudio 4.14 Build 589
(без оптимизации)
чип - mega8515
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
SysRq
сообщение Oct 19 2008, 00:20
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Приведите все нужные константы к unsigned long. UL.

Сообщение отредактировал SysRq - Oct 19 2008, 00:20
Go to the top of the page
 
+Quote Post
Sirko
сообщение Oct 19 2008, 00:34
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Спасибо большое.

Так и есть.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 19 2008, 04:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Sirko @ Oct 19 2008, 08:06) *
Не работает элементарный кусочек кода:
unsigned int boud = (14745600 / (16 * 2400)) - 1;

Точнее вот такая формула, естественно с учетом сказанных выше рекомендации по приведению типов:

#define USART_BAUD_RATE_CONST(br) ((((CPU_CLOCK) / 16) + ((br) / 2 - 1)) / (br) - 1)


--------------------
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 19 2008, 10:11
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



А мне кажется, что так нагляднее и точнее:
Код
#define BPS2UBRR(BITRATE)        ( (unsigned short)((F_CPU) / (16.0f * (BITRATE)) - 1 + 0.5f) )

Вдруг CPU_CLOCK не будет кратно 16:) Это вряд-ли, но всё же...
А так всегда гарантирован верный результат округления до целого положительного.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 18:57
Рейтинг@Mail.ru


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