nrf51 の nano.specs で printf で float の値を表示する

float の値を printf に表示したいだけなのに時間がかかった…。

newlib-nano を使ってるので、

にあるとおり、

-u _printf_float

を ldflags に追加すれば良い。

mbed の cli 環境下で追加する。

[4]>_<X mbed --version
0.9.5
[4]>_<X mbed compile \?
usage: make.py [-h] [-m MCU] [-t TOOLCHAIN] [--color] [--cflags CFLAGS]
               [--asmflags ASMFLAGS] [--ldflags LDFLAGS] [-c] [-o OPTIONS]
               [-p PROGRAM] [-n PROGRAM] [-j JOBS] [-v] [--silent] [-D MACROS]
               [-S] [-f GENERAL_FILTER_REGEX] [--automated] [--host HOST_TEST]
               [--extra EXTRA] [--peripherals PERIPHERALS]
               [--dep DEPENDENCIES] [--source SOURCE_DIR]
               [--duration DURATION] [--build BUILD_DIR] [-N ARTIFACT_NAME]
               [-d DISK] [-s SERIAL] [-b BAUD] [-L] [--rtos] [--rpc] [--eth]
               [--usb_host] [--usb] [--dsp] [--fat] [--ublox] [--testlib]
               [-l LINKER_SCRIPT]
make.py: error: unrecognized arguments: ?

を見ると、--ldflags に値を渡せば良さそう。なんだけど、こいつが内側の make.py で呼び出している gcc.py に値を渡していないので、設定しても無駄。

mbed toolchain を直接弄って指定する。

## .temp/tools/toolchains/gcc.py 
        if use_nano:
            self.ld.append("--specs=nano.specs")
            self.ld += ["-u _printf_float"] # 追加

あと同階層にある gcc.pyc は削除しておく。

ううう…。