Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование Floatpoint в sprintf?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
tempmy
AVR Toolchain 3(или WinAVR) + AVRStudio418SP3
Делаю как рекомендовали microsin.ru
прописываю в настройках -Wl,-u,vfprintf -lprintf_flt и библиотеки libprintf_flt.a libm.a

unsigned char lcdbuf[18];
float ff;

int main(void){
ff=1.4567f;
sprintf(lcdbuf, "%2.4f", ff);
}

в "Watch" наблюдаю после выполнения sprintf следующее -> " ?"(0x20,0x3F)

Как добиться нормального вывода?
Что нужно сделать?
demiurg_spb
у меня так работает:

-Wl,-u,vfprintf -lprintf_flt -lm
tempmy
PROJECT = main
MCU = atmega8535
TARGET = main.elf
CC = avr-gcc

CPP = avr-g++

COMMON = -mmcu=$(MCU)

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wl,-u,vfprintf -lprintf_flt -lm
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

LDFLAGS = $(COMMON)
LDFLAGS += -Wl,-Map=main.map

HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature

HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings

LIBS = -lprintf_flt -lm -lprintf_min -lc

OBJECTS = main.o delay.o lcd.o

LINKONLYOBJECTS =

all: $(TARGET) main.hex main.eep main.lss size

main.o: ../main.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

delay.o: ../delay.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

lcd.o: ../lcd.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

$(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)

%.hex: $(TARGET)
avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@

%.eep: $(TARGET)
-avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0

%.lss: $(TARGET)
avr-objdump -h -S $< > $@

size: ${TARGET}
@echo
@avr-size -C --mcu=${MCU} ${TARGET}

.PHONY: clean
clean:
-rm -rf $(OBJECTS) main.elf dep/* main.hex main.eep main.lss main.map


-include $(shell mkdir dep 2>NUL) $(wildcard dep/*)

Вот makefile - прописал так как Вы предложили.

Но всёравно, не работает!!!
Может какие-то ещё будут предложения
demiurg_spb
Цитата(tempmy @ Jan 27 2011, 13:30) *
LIBS = -lprintf_flt -lm -lprintf_min -lc
Странная на мой взгляд конструкция...
уберите -lprintf_min
и наверное -lc

кстати, что такое -lc ?

Покажите целиком результирующий вызов компиляции и сборки.
AHTOXA
-Wl,-u,vfprintf надо добавлять к LDFLAGS, а не к CFLAGS.
tempmy
Всё, спасибо. Всё прояснил.

Конструкцию -Wl,-u,vfprintf нужно было прописывать не в часть "[All Files]" а в "[Linker Options]".
Ну, или ручками прописывать в makefile и этот файл подсовывать как "Use External makefile"

Всем спасибо за оперативность!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.