Здравствуйте.
Делаю на микроконтроллере AVR частотомер.
Как правильно привести тип результата, для отображения на екране или передаче через UART.
У меня выходят вообще неправильные результаты именно из-за преобразования.
Например 234 или 000000. А должно быть 1024 с желательно с дробной частью (или без), хотя бы какого то результата.
По ниже приведенной формуле не работает. Получаются нули, а должно получиться 10004,03085khz
или хотя бы 10004 или 100040308
unsigned long result = (16000000UL*(unsigned long)mesurImp)/baseImp;
mesurImp = 10171;
baseImp = 16267043;
Как получить правильный результат ?
Нашел решение.
Для Atmel studio надо было изменить настройки компилятора.
Для того, чтобы он выводил числа float b double.
поставить галочку vprintf library(-Wl,-u,vfprintf).
И установить флаг -lprintf_flt
Подробнее здесь https://startingelectronics.org/articles/atmel-AVR...
Пробовал по разному.
Вот так выводит в usart, но обрезает дробную часть
unsigned long result = (double)(16000000UL*(float)mesurImp)/(float)baseImp;
USART_sendString(buff,16);
Так выводит только знак вопроса "?" и unsigned long long то же самое
double result = (16000000UL*(double)mesurImp)/(double)baseImp;
USART_sendString(buff,16);
Хотя в codeblocks пробовал все работает, а в AVR GCC нет.