Спасибо про суффикс попробую запомнить, float использую да, для скорости.
Все таки полное непонимание. Значит вчера я усомнился, что в функцию попадают корректные данные. Сегодня стал проверять и оказалось, что не понимаю в чем эти данные некорректные. Я могу вывести на дисплей данные, которые находятся в массиве send_base. Массив uint16_t. Выводить на дисплея я умею только uint16_t.
Если код такой:
Код
float r=((adc_ext_result[i]*(20000.0f/5.0f))/(65535.0f-adc_ext_result[i]/5.0f));
send_base[adc_index[0]]=r;
send_base[adc_ext_index[i]]=logf(r);
то, значение r плавает около 12570 (это результат измерения ацп)
значение logf® всегда 65535.
Меняю код на следущий:
Код
float r=((adc_ext_result[i]*(20000.0f/5.0f))/(65535.0f-adc_ext_result[i]/5.0f));
uint16_t x=(uint16_t)r;
send_base[adc_index[0]]=x;
send_base[adc_ext_index[i]]=logf(x);
значение x такое же, а вот значение функции logf(x) становится правильным =9.
Не понимаю, что происходит.
Так тоже работает:
send_base[adc_ext_index[i]]=logf((uint16_t)r);
Наверно самое главное забыл сказать. У меня контроллер stm32f051. Т.е. cortex-m0. Может какие-то специальные ключи нужны для компилятора?
Я ставлю ключи: -mcpu=cortex-m0 -mthumb