USARTから端末でレジスタの値や変数をみたいときにsprintfが使えるととても重宝します。
数値データをいろんな書式に整形して文字列に直してくれます。
ところがコンパイルしてみると、、
/usr/local/arm/arm-none-eabi/lib//libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text._sbrk_r+0x18): undefined reference to `_sbrk'
このように_sbrkが未解決ということでうまくいきません><;
この手のエラーは何がおかしいのかサッパリなのでググりましたがこれまたサッパリ\(^o^)/
_sbrkはlibc.aライブラリに含まれているということだけ分かりました。おかしいとすればこのライブラリなのかな?

試しにライブラリのネームリストを調べてみた
>arm-none-eabi-nm libc.a | grep " T " | grep sbrk
00000000 T _sbrk_r
00000000 T sbrk
ほんとだ_sbrkがない(^_^;A

P.S.2014.8.28
この記事書いてからかれこれ3年以上経ってますが最近になってlibnosys.aというライブラリに_sbrkの実体があることが分かりました。
ですので以下のようにNewlibの再コンパイルなどせずともリンカフラグに-lnosysを追加すればいいだけのことでした。めでたしめでたし? (^_^;A


ぐぐってみるとNewlibという組み込み向けのライブラリを知りました。

Newlib ウィキペディア
http://ja.wikipedia.org/wiki/Newlib

Newlib公式サイト(ソースのダウンロード先)
http://www.sourceware.org/newlib/

そっくりそのままNewlibに変えてしまえば動くのでは?

P.S.
Code Sourcery G++ Liteでは標準でNewlibライブラリを使ってますがなぜかlibc.aに_sbrkが存在しない。

さっそく公式サイトからソースをダウンロードしてコンパイルしてみました。

newlibディレクトリをつくってそこにソースをダウンロード。
>mkdir newlib
>cd newlib
>cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co newlib

srcディレクトリが現れるので中に入る。
>cd src

次のようにアーギュメントを指定してコンフィギュア
>./configure --target=arm-none-eabi --prefix=/usr/local/arm --enable-multilib --enable-interworks

そしてmake
>make

P.S.
crt0.oが無い云々のエラーが出た場合:armv6-mというライブラリを構築中に発生するエラーのようです。
これを回避する方法が書かれてあるブログがありました。
http://morizzos-buglife.blogspot.com/2011/08/newlib.html


最後に--prefixで指定した場所にインストールして完了。
>make install


Newlibのlibc.aライブラリのネームリストを表示してみる。
>arm-none-eabi-nm /usr/local/arm/arm-none-eabi/lib/thumb2/libc.a | grep " T " | grep sbrk
00000000 T _sbrk_r
000002cc T _sbrk
00000000 T sbrk
おー今度はちゃんと_sbrkがある!

コンパイルしてみると無事sprintfが使えるようになりました(^ω^)
これで快適なデバッグ環境が整いました。

めでたしめでたし。