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

 
 
> Работа с long int
Skaf
сообщение Jun 20 2009, 11:25
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Всем привет. Пишу на Си (WinAVR) для AVR. Есть у меня 32-х битная переменная

unsigned long int A;

Мне надо передать ее по SPI протоколу. Как это эффективнее всего сделать?
Что-то типа

spi_master_transmit(A);
spi_master_transmit(A>>8);
spi_master_transmit(A>>16);
spi_master_transmit(A>>24);

является ли это наиболее эффективным методом?

Сообщение отредактировал Skaf - Jun 20 2009, 11:26
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DpInRock
сообщение Jun 20 2009, 13:54
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Компилятор должен адекватно принимать сдвиги кратные восьми и сразу брать нужную часть. Без сдвигов, естественно.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 20 2009, 15:37
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Skaf @ Jun 20 2009, 14:25) *
является ли это наиболее эффективным методом?

Запихивание параметра, не соответствующего определению функции, меня лично напрягает. Типы переменных лучше преобразовывать явно.

union выглядит проще. Или через указатель:

char * a;
a=(char *) &A;
spi (*a); a++;
spi (*a); a++;
spi (*a); a++;
spi (*a);

Про эффективность сказали. Вот проверьте все варианты и нам расскажите, какой наиболее эффективныый smile.gif
А синхронизация слова как будет происходить?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

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


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

 


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


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