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

 
 
> Типы данных СИ или как переслать четыре байта, просветите пожалуйста
morpher
сообщение Mar 3 2008, 13:28
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 3-03-08
Пользователь №: 35 586



Начал понемногу изучать контроллеры заодно приходится и СИ. МК – PIC18, компилятор – MCC18. Пишу на основе CDC(эмуляция COM-порта). Задача состоит в том что нужно отслеживать события модуля ССР в режиме захвата и посылать на комп значения интервалов между каждым положительным фронтом. Вроде разобрался с захватом и таймером но не могу послать результат(точнее могу но принимаю непонятно что). Чтобы короче только кусочки кода.

char str[64];
unsigned result;

result = ReadCapture1();
ultoa(result,str);

if(mUSBUSARTIsTxTrfReady())
{
mUSBUSARTTxRam((byte*)str,6 );
}
(склеено из разных демок, все левое пропущено, осталось только то, что меня интересует)
Вопрос №1: правильно ли использовать ultoa(result,str) по отношению к массиву str?

Это первоначальный вариант поскольку оказалось что интервалы между фронтами могут превышать 1сек соответственно пришлось учитывать переполнение. В результате отправлять уже надо не unsigned int а unsingned long. Но преобразовывать в строку не хочу поскольку как я понимаю: если result = 65535, то после ultoa(result,str) будет- str[0] =’6’,str[1] = ‘5’ итд. Зачем длинная строка если можно unsingned long разделить на 4 байта и записать в каждый эл. массива отдельно. Вот только как выделить отдельные байты из long на СИ я не знаю. Просветите пожалуйста как правильно конвертнуть unsingned long.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mdmitry
сообщение Mar 3 2008, 15:26
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Посмотрите обсуждение
http://electronix.ru/forum/index.php?showtopic=42842
Некоторых проблем поможет избежать smile.gif
Для gcc (определены соответствующие типы uintX_t)
Код
#define LOBYTE(w)           ((uint8_t)(w))
#define HIBYTE(w)           ((uint8_t)((uint16_t)(w) >> 8))
#define LOWORD(l)           ((uint16_t)(l))
#define HIWORD(l)           ((uint16_t)((uint32_t)(l) >> 16))


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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