реклама на сайте
подробности

 
 
> Использование Floatpoint в sprintf?
tempmy
сообщение Jan 27 2011, 08:11
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 9-07-09
Пользователь №: 51 076



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)

Как добиться нормального вывода?
Что нужно сделать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
tempmy
сообщение Jan 27 2011, 10:30
Сообщение #2





Группа: Новичок
Сообщений: 3
Регистрация: 9-07-09
Пользователь №: 51 076



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 - прописал так как Вы предложили.

Но всёравно, не работает!!!
Может какие-то ещё будут предложения
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 27 2011, 10:54
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



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

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

Покажите целиком результирующий вызов компиляции и сборки.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 23:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016