Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Типы данных СИ или как переслать четыре байта
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
morpher
Начал понемногу изучать контроллеры заодно приходится и СИ. МК – 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.
aaarrr
Цитата(morpher @ Mar 3 2008, 16:28) *
Просветите пожалуйста как правильно конвертнуть unsingned long.

Очень просто:
Код
unsigned char b0, b1, b2, b3;
unsigned long l;

b0 = (unsigned char)l;
b1 = (unsigned char)(l >> 0x08);
b2 = (unsigned char)(l >> 0x10);
b3 = (unsigned char)(l >> 0x18);
msalov
Цитата(morpher @ Mar 3 2008, 15:28) *
Просветите пожалуйста как правильно конвертнуть unsingned long.

Код
unsigned long result;
unisgned char
c0 = ((unsigned char*)&result)[0],
c1 = ((unsigned char*)&result)[1],
c2 = ((unsigned char*)&result)[2],
c3 = ((unsigned char*)&result)[3];
morpher
aaarrr, gotty - спасибо огромное. это то чего мне не хватало. заработало!!! все пересылается отлично и главное без всяких ultoa. Кстати может кто посоветует литературу по железо-ориентированному СИ (желательно мсс18), а то обучаюсь только по демкам и хелпу, а там многого нет.
msalov
Цитата(morpher @ Mar 3 2008, 16:14) *
aaarrr, gotty - спасибо огромное. это то чего мне не хватало. заработало!!! все пересылается отлично и главное без всяких ultoa. Кстати может кто посоветует литературу по железо-ориентированному СИ (желательно мсс18), а то обучаюсь только по демкам и хелпу, а там многого нет.

Железо-ориентированного Си не существует, а существует стандарный язык си + отступления от стандарта у каждого производителя. Первое читается в любой книге по Си, а второе в досументациия на компилятор. А железо-ориентированность дожна быть в голове и вытекает она из знания архитектуры целевого железа.
Удачи.
morpher
Я понимаю что синтаксис СИ почти одинаков для разных версий, я неправильно выразился. Но документации на компилятор может и нехватать, особенно при условии незнания языка вообщем. Просто должны же быть книги ориентированные на конкретные компиляторы с множеством разнообразных примеров. Я нашел по Hi-Tech но у меня собственно его нету, да и примеры портировать долго будет, а при моем знании языка вообще невозможно. А вот по мсс18 книг на русском я не видел вообще, а хотелось бы.
aaarrr
К сожалению, последнее время нормальных книжек по C не встречал sad.gif


Цитата(morpher @ Mar 3 2008, 17:48) *
Но документации на компилятор может и нехватать, особенно при условии незнания языка вообщем. Просто должны же быть книги ориентированные на конкретные компиляторы с множеством разнообразных примеров.

Не приходилось сталкиваться с такой ситуацией, чтобы не хватало документации на компилятор. А примеры, как правило, входят в комплект поставки.
mdmitry
Посмотрите обсуждение
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))
zltigo
Цитата(morpher @ Mar 3 2008, 17:48) *
Но документации на компилятор может и нехватать

Так не бывает... По крайней мере на начальном этапе освоения.
Цитата
, особенно при условии незнания языка вообщем.

Так вот с этого и начните. Книжек по программированию железа для не знающих ни языка не железа не существует. Хотя я не прав - можете в качестве образца взять инстукцию по программированию, например, мироволновой печи.
Цитата
Просто должны же быть книги ориентированные на конкретные компиляторы с множеством разнообразных примеров.

Ага, например, книги кулинарных рецептов - множество разнообразных примеров ориентированных на конкретные продукты. Полная иллюзия простоты приготовления самых разнообразных блюд, но никаких шансов без предварительного базиса.
Цитата
...книг на русском я не видел вообще, а хотелось бы.

Для начала о Великом и Могучем следует забыть навсегда.
Aesthete Animus
2zltigo
Ну если Вы такой всезнающий гуру, то зачем лезите в тему "В помощь начинающему" единственно ради совершенно нетактичной и беспредметной критики?
zltigo
Цитата(Aesthete Animus @ Mar 3 2008, 19:45) *
..ради совершенно нетактичной и беспредметной критики?

Это не критика - это для развенчания иллюзий (в примерах) по поводу даже самой возможности наличия волшебной книжки на русском языке, как сделать все, что захочется на PIC18.
rimpocha
Прочтите эту книгу от корки до корки. Всего 280 страниц и вы знаете Си в совершенстве.


тыц-тыц

И только уже зная Си можно приступать к чтению документации на контроллеры.
zltigo
Цитата(rimpocha @ Mar 3 2008, 21:44) *
Прочтите эту книгу от корки до корки. Всего 280 страниц и вы знаете Си в совершенстве.

Несколько оптимистично smile.gif, но 95% ответов на вопросы в ней найдется. Читать обязательно. Не один раз. Вдумчиво. Только с первым изданием ни вкоем случае не спутать!
P.S.
Что касается младших PIC, то "C" на их архитектуру ложится отвратительно - пожалуй максимальное количество извращений и исключений. Может сразу чего либо из нормальных PIC, нежели к ним какая-то особенная тяга имеется, или вообще с другой платформы начать. Ну а потом можно со знанием дела и вернуться в случае чего.
morpher
Цитата
Так вот с этого и начните. Книжек по программированию железа для не знающих ни языка не железа не существует. Хотя я не прав - можете в качестве образца взять инстукцию по программированию, например, мироволновой печи.


Вот я почитав даташит и начал. Если бы я не знал совсем железа я бы даже изменить программу не смог. А язык только начал учить(не все рождаются с абсолютным знанием СИ) . Это не первый язык который я учу, но непривычный синтаксис дает о себе знать. Был бы это Паскаль-подобный язык, я бы таких вопросов не задавал. К тому же я привык учиться на практике, а не прочитав кучу книг садиться за комп, мне так удобней. Ну нет у меня никакой книги по СИ, учу кусками по нету.

Цитата
Ага, например, книги кулинарных рецептов - множество разнообразных примеров ориентированных на конкретные продукты. Полная иллюзия простоты приготовления самых разнообразных блюд, но никаких шансов без предварительного базиса.


Я не испытываю иллюзий по поводу простоты. Просто хочется на языке высокого уровня делать. Почему? Да потому что это не работа, это ХОББИ. Потому что я времени меньше затрачу. У меня нет его столько чтобы с утра до ночи заниматься контроллерами. Да я не смогу полностью контролировать контроллер и знать его досконально, но я и не собираюсь ни RTOS писать, ни систему наведения делать. А предварительный базис есть, иначе бы я вообще ничего не сделал.

Цитата
Для начала о Великом и Могучем следует забыть навсегда.


Я же не прошу чтобы даташит на русском был. Меня английский не так сильно напрягает, но на родном то лучше.
Предко М. Справочник по PIC-микроконтроллерам.
Кристиан Тавернье PIC-микроконтроллеры. Практика применения.
Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров.
Книги на русском которые у меня есть( в электронном виде). Но к сожалению не про мсс18. У меня именно он, что впрочем меня устраивает. Эти книги и помогли мне разобраться в архитектуре и общих принципах работы МК, но в них тоже не все есть что мне нужно.

rimpocha - спасибо, буду читать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.