печать float / double с использованием printf завершает работу программы - PullRequest
2 голосов
/ 29 июля 2011

Я работаю над реализацией syscall для PowerPc . Я протестировал некоторые функции gcc, и все они, кажется, работают (например, sqrt sin cos pow printf malloc ...)

Недавно я обнаружил проблему с printf . он работает нормально, пока я печатаю некоторое целое число / символ, но когда я пытаюсь напечатать f % f / lf , чтобы напечатать float / double, происходит сбой программы. (кажется, что выполняется где-то не должно быть)

Я проверил make-файл, он использует:

# use soft float
CFLAGS += -msoft-float

и при создании программы я вижу много связанных nof (без плавающих) библиотек.

gnu/powerpc-eabi/3pp.ronetix.powerpc-eabi/bin/../lib/gcc/powerpc-eabi/4.3.3/../../../../powerpc-eabi/lib/nof\libm.a)lib_a-s_sin.o

Я также знаю, что у меня достаточно места в стеке / куче, поэтому проблем не должно быть. Есть ли еще причина, по которой printf должен аварийно завершить работу при печати с плавающей точкой?

1 Ответ

3 голосов
/ 31 июля 2011

Ваш newlib, вероятно, собран без поддержки ввода-вывода с плавающей точкой.Это довольно распространено для встраиваемых систем, так как экономит много места в коде.Вы, вероятно, можете перестроить newlib для поддержки операций ввода-вывода с плавающей точкой.Я думаю параметры конфигурации: --enable-newlib-io-float и --enable-newlib-io-long-double.Вы можете наверняка узнать это, запустив ./configure --help.

...