Co$s » 08 июл 2008, 18:04
snayperAlfa
Как вы уже наверное знаете функции print(f)/scan(f) отнимают довольно серьезное количество памяти, поэтому их обычно либо разделяют, создавая версии для типов чисел которые предполагается выводить, либо как это сделано в CVAVR - такая опция выбирается в настройках компилятора. А именно Options->C Compiler->sprintf(f) Features. Раз у вас выводится хоть какой-то результат вы эту опцию уже по всей видимости изменяли и она стоит в положении "long, width". Проблематика же в вашем случае состоит в том, что при выводе температуры, в экземпляре примера предоставляемого библиотекой CodeVisionAVR используются числа с плавающей точкой (float, что собственно из-за своих размеров весьма спорно для этого класса контроллеров, впрочем для примера вполне сойдет), а именно параметр %f (если быть точным %+.3f - то есть будет выведено три цифры после запятой) передаваемый в sprintf(). Естественно, буфер который будет применятся в этой функции при параметрах "long, width", а именно long int, ни в коем случае не сможет корректно принять числа с типом float. В итоге на вывод пойдет совсем не то что хотелось бы... Выход прост – просто выберите значение (которое кстати и стоит в этом проекте по-умолчанию) "float, width, precision".