Мне нужно перенести множество «32-битных плавающих» переменных с одного DSP на другой DSP через SPI.передать переменную «32bit float»
Однако регистр является alaways 16bit, что мне нужно разбить переменную «32bit float» на две части.
Я использовал тип C союз как
union mytype {
float a;
uint16_t b[2];
};
Это хорошо работает, но я получаю новую проблему, что трудно понять, является ли полученные данные 16bit для Ь [0] или б [1] в запускать. (Два DSP могут включаться в разное время, поэтому 1-й данные не всегда могут быть b [0]).
Я попытался разбить 32-битный поплавок на 4 байта, а когда я передаю 16-битный, я добавляю тег перед 8-битными данными. Это также прекрасно работает. Но у меня производительность снизилась вдвое.
Есть ли способ передать «32-битный поплавок» двумя 16-битными данными? Я знал, что мой диапазон номеров находится в пределах «0.0000001 ~ 1000000» (оба +/-). Или любые другие предложения? Я также думаю о дрожании рук в SPI между двумя DSP, но, похоже, он становится сложным. Я просто хочу захватить данные запуска b [0], затем я могу получить все в последовательности.
БЛАГОДАРЯ
Так что вы хотите разбить поплавок на два 16-битных куска, каждый из которых также несет информацию о том, является ли это первым фрагментом или вторым, верно? –
Да, точно .... – thundium
Это слишком широкий. Читайте о [формате с плавающей точкой] (http://en.wikipedia.org/wiki/Single-precision_floating-point_format). Вы можете попытаться повторно использовать неиспользуемые биты в экспоненциальной части (потому что ваши цифры относительно близки к 1) или опустить младшие бит части дроби. –