|
|
  |
Типы данных СИ или как переслать четыре байта, просветите пожалуйста |
|
|
|
Mar 3 2008, 13:28
|
Группа: Новичок
Сообщений: 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.
|
|
|
|
|
Mar 3 2008, 13:43
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(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];
|
|
|
|
|
Mar 3 2008, 14:14
|
Группа: Новичок
Сообщений: 4
Регистрация: 3-03-08
Пользователь №: 35 586

|
aaarrr, gotty - спасибо огромное. это то чего мне не хватало. заработало!!! все пересылается отлично и главное без всяких ultoa. Кстати может кто посоветует литературу по железо-ориентированному СИ (желательно мсс18), а то обучаюсь только по демкам и хелпу, а там многого нет.
|
|
|
|
|
Mar 3 2008, 14:28
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(morpher @ Mar 3 2008, 16:14)  aaarrr, gotty - спасибо огромное. это то чего мне не хватало. заработало!!! все пересылается отлично и главное без всяких ultoa. Кстати может кто посоветует литературу по железо-ориентированному СИ (желательно мсс18), а то обучаюсь только по демкам и хелпу, а там многого нет. Железо-ориентированного Си не существует, а существует стандарный язык си + отступления от стандарта у каждого производителя. Первое читается в любой книге по Си, а второе в досументациия на компилятор. А железо-ориентированность дожна быть в голове и вытекает она из знания архитектуры целевого железа. Удачи.
|
|
|
|
|
Mar 3 2008, 14:48
|
Группа: Новичок
Сообщений: 4
Регистрация: 3-03-08
Пользователь №: 35 586

|
Я понимаю что синтаксис СИ почти одинаков для разных версий, я неправильно выразился. Но документации на компилятор может и нехватать, особенно при условии незнания языка вообщем. Просто должны же быть книги ориентированные на конкретные компиляторы с множеством разнообразных примеров. Я нашел по Hi-Tech но у меня собственно его нету, да и примеры портировать долго будет, а при моем знании языка вообще невозможно. А вот по мсс18 книг на русском я не видел вообще, а хотелось бы.
|
|
|
|
|
Mar 3 2008, 15:26
|

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

|
Посмотрите обсуждение http://electronix.ru/forum/index.php?showtopic=42842Некоторых проблем поможет избежать  Для 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))
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Mar 3 2008, 15:59
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(morpher @ Mar 3 2008, 17:48)  Но документации на компилятор может и нехватать Так не бывает... По крайней мере на начальном этапе освоения. Цитата , особенно при условии незнания языка вообщем. Так вот с этого и начните. Книжек по программированию железа для не знающих ни языка не железа не существует. Хотя я не прав - можете в качестве образца взять инстукцию по программированию, например, мироволновой печи. Цитата Просто должны же быть книги ориентированные на конкретные компиляторы с множеством разнообразных примеров. Ага, например, книги кулинарных рецептов - множество разнообразных примеров ориентированных на конкретные продукты. Полная иллюзия простоты приготовления самых разнообразных блюд, но никаких шансов без предварительного базиса. Цитата ...книг на русском я не видел вообще, а хотелось бы. Для начала о Великом и Могучем следует забыть навсегда.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 3 2008, 19:26
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(rimpocha @ Mar 3 2008, 21:44)  Прочтите эту книгу от корки до корки. Всего 280 страниц и вы знаете Си в совершенстве. Несколько оптимистично  , но 95% ответов на вопросы в ней найдется. Читать обязательно. Не один раз. Вдумчиво. Только с первым изданием ни вкоем случае не спутать! P.S. Что касается младших PIC, то "C" на их архитектуру ложится отвратительно - пожалуй максимальное количество извращений и исключений. Может сразу чего либо из нормальных PIC, нежели к ним какая-то особенная тяга имеется, или вообще с другой платформы начать. Ну а потом можно со знанием дела и вернуться в случае чего.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 3 2008, 19:49
|
Группа: Новичок
Сообщений: 4
Регистрация: 3-03-08
Пользователь №: 35 586

|
Цитата Так вот с этого и начните. Книжек по программированию железа для не знающих ни языка не железа не существует. Хотя я не прав - можете в качестве образца взять инстукцию по программированию, например, мироволновой печи. Вот я почитав даташит и начал. Если бы я не знал совсем железа я бы даже изменить программу не смог. А язык только начал учить(не все рождаются с абсолютным знанием СИ) . Это не первый язык который я учу, но непривычный синтаксис дает о себе знать. Был бы это Паскаль-подобный язык, я бы таких вопросов не задавал. К тому же я привык учиться на практике, а не прочитав кучу книг садиться за комп, мне так удобней. Ну нет у меня никакой книги по СИ, учу кусками по нету. Цитата Ага, например, книги кулинарных рецептов - множество разнообразных примеров ориентированных на конкретные продукты. Полная иллюзия простоты приготовления самых разнообразных блюд, но никаких шансов без предварительного базиса. Я не испытываю иллюзий по поводу простоты. Просто хочется на языке высокого уровня делать. Почему? Да потому что это не работа, это ХОББИ. Потому что я времени меньше затрачу. У меня нет его столько чтобы с утра до ночи заниматься контроллерами. Да я не смогу полностью контролировать контроллер и знать его досконально, но я и не собираюсь ни RTOS писать, ни систему наведения делать. А предварительный базис есть, иначе бы я вообще ничего не сделал. Цитата Для начала о Великом и Могучем следует забыть навсегда. Я же не прошу чтобы даташит на русском был. Меня английский не так сильно напрягает, но на родном то лучше. Предко М. Справочник по PIC-микроконтроллерам. Кристиан Тавернье PIC-микроконтроллеры. Практика применения. Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров. Книги на русском которые у меня есть( в электронном виде). Но к сожалению не про мсс18. У меня именно он, что впрочем меня устраивает. Эти книги и помогли мне разобраться в архитектуре и общих принципах работы МК, но в них тоже не все есть что мне нужно. rimpocha - спасибо, буду читать.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|