Мне нужно отправить несколько чисел с плавающей запятой между некоторыми узлами Texas Instrument CC2530. Эта архитектура может отправлять только массив uint8.
Я уже пытался присвоить указателю uint8 указатель с плавающей запятой с приведением. Затем я отправляю эти байты и при получении они копируются в массив uint8. В конце я создаю еще один указатель с плавающей запятой, которому задается приведение ранее созданного массива.
На самом деле, этот трюк работает на моем компьютере (используя unsigned char вместо uint8), но не в узлах, где полученное число всегда 0.
Это часть кода, используемая в событии передачи (здесь создается msa_Data1
, то есть передаваемый пакет, где число для отправки — valMed
(глобальная переменная)):
void Data_create(){
uint8 *sends;
sends = (uint8 *) &valMed;
uint8 rec_index;
for(rec_index=0; rec_index < sizeof(float); ++rec_index){
msa_Data1[rec_index]= sends[rec_index];
}
}
В приемной у меня есть:
uint8 receiveds[sizeof(float)];
uint8 rec_index;
for(rec_index=0; rec_index < sizeof(float); ++rec_index){
receiveds[rec_index]= pData->dataInd.msdu.p[rec_index];
}
float *received= (float *)receiveds;
Данные из передачи принимаются pData->dataInd.msdu.p[rec_index]
Симуляция передачи, которую я пробовал на ПК, выглядит следующим образом:
main(){
float send= -3.14;
unsigned char *sends;
sends = (unsigned char *)&send;
printf("1:%d, 2:%d, 3:%d, 4:%d \nfloat sent:%f \n", sends[0], sends[1], sends[2], sends[3], send);
unsigned char receiveds[sizeof(float)];
int rec_index;
for(rec_index=0; rec_index < sizeof(float); ++rec_index){
receiveds[rec_index]= sends[rec_index];
}
float *received= (float *)receiveds;
printf("float received:%f\n", *received);
}
Выход:
alex@aspire7738G ~/test $ ./test
1:195, 2:245, 3:72, 4:192
float sent:-3.140000
float received:-3.140000
В этом случае я вижу, что тест хорошо работает на ПК, но не на узлах. Что случилось?
Спасибо заранее за любую помощь!
Алекс