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

 
 
 
Reply to this topicStart new topic
> Типы данных СИ или как переслать четыре байта, просветите пожалуйста
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
aaarrr
сообщение Mar 3 2008, 13:42
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(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);
Go to the top of the page
 
+Quote Post
msalov
сообщение Mar 3 2008, 13:43
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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];
Go to the top of the page
 
+Quote Post
morpher
сообщение Mar 3 2008, 14:14
Сообщение #4





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



aaarrr, gotty - спасибо огромное. это то чего мне не хватало. заработало!!! все пересылается отлично и главное без всяких ultoa. Кстати может кто посоветует литературу по железо-ориентированному СИ (желательно мсс18), а то обучаюсь только по демкам и хелпу, а там многого нет.
Go to the top of the page
 
+Quote Post
msalov
сообщение Mar 3 2008, 14:28
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(morpher @ Mar 3 2008, 16:14) *
aaarrr, gotty - спасибо огромное. это то чего мне не хватало. заработало!!! все пересылается отлично и главное без всяких ultoa. Кстати может кто посоветует литературу по железо-ориентированному СИ (желательно мсс18), а то обучаюсь только по демкам и хелпу, а там многого нет.

Железо-ориентированного Си не существует, а существует стандарный язык си + отступления от стандарта у каждого производителя. Первое читается в любой книге по Си, а второе в досументациия на компилятор. А железо-ориентированность дожна быть в голове и вытекает она из знания архитектуры целевого железа.
Удачи.
Go to the top of the page
 
+Quote Post
morpher
сообщение Mar 3 2008, 14:48
Сообщение #6





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



Я понимаю что синтаксис СИ почти одинаков для разных версий, я неправильно выразился. Но документации на компилятор может и нехватать, особенно при условии незнания языка вообщем. Просто должны же быть книги ориентированные на конкретные компиляторы с множеством разнообразных примеров. Я нашел по Hi-Tech но у меня собственно его нету, да и примеры портировать долго будет, а при моем знании языка вообще невозможно. А вот по мсс18 книг на русском я не видел вообще, а хотелось бы.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 3 2008, 15:19
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



К сожалению, последнее время нормальных книжек по C не встречал sad.gif


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

Не приходилось сталкиваться с такой ситуацией, чтобы не хватало документации на компилятор. А примеры, как правило, входят в комплект поставки.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 3 2008, 15:26
Сообщение #8


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

Группа: Свой
Сообщений: 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
zltigo
сообщение Mar 3 2008, 15:59
Сообщение #9


Гуру
******

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



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

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

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

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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Mar 3 2008, 16:45
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



2zltigo
Ну если Вы такой всезнающий гуру, то зачем лезите в тему "В помощь начинающему" единственно ради совершенно нетактичной и беспредметной критики?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 3 2008, 17:06
Сообщение #11


Гуру
******

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



Цитата(Aesthete Animus @ Mar 3 2008, 19:45) *
..ради совершенно нетактичной и беспредметной критики?

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rimpocha
сообщение Mar 3 2008, 18:44
Сообщение #12


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

Группа: Свой
Сообщений: 82
Регистрация: 6-03-07
Из: Новосибирск, Seattle
Пользователь №: 25 935



Прочтите эту книгу от корки до корки. Всего 280 страниц и вы знаете Си в совершенстве.


тыц-тыц

И только уже зная Си можно приступать к чтению документации на контроллеры.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 3 2008, 19:26
Сообщение #13


Гуру
******

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



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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
morpher
сообщение Mar 3 2008, 19:49
Сообщение #14





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



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


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

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


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

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


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

rimpocha - спасибо, буду читать.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 03:58
Рейтинг@Mail.ru


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