Кажется, здесь можно очень сильно упростить.
Для начала, два раза происходит смена порядка байтов, при вызове функции и внутри самой функции.
Иными словами, byte_array - это просто 4 последовательных байта, начиная с freePieIMU[2].
Скорее всего, достаточно указатель freePieIMU+2 перевести в float*, и всё сработает