Micro Standard Library
先日から、Stellarisローンチパッドで遊んでいます。Stellarisローンチパッドには、Stellaris Wareというライブラリ群がバンドルされているので、その使い方を調べていきます。今回はMicro Standard Libraryという、C標準ライブラリの非常に小さなサブセットです。含まれる関数は下のとおりで、標準ライブラリ関数の関数名の頭に u がついていて、仕様もおおよそ同じです。
- ulocaltime
- umktime
- urand
- usnprintf
- usprintf
- usrand
- ustrcasecmp
- ustrcmp
- ustrlen
- ustrncmp
- ustrncpy
- ustrnicmp
- ustrstr
- ustrtoul
- uvsnprintf
ulocaltimeとumktimeがどう使えるのか気になるので、下のようなコードを書いてみました。そして、早速 umktime がバグってるのを見つけました。umktimeはtime_tを二分探索で見つけて返そうとしますが、エポック時刻(0)を渡すと、探索完了せず -1 が返ります。これについてはまた今度調べます。これ以外は期待動作しました。
#include "utils/ustdlib.h" void main(void) { unsigned long ulValue; char pcBuffer[32] = "0x1"; tTime sTime; ulValue = ustrtoul(pcBuffer, 0, 0); ulocaltime(ulValue, &sTime); usprintf(pcBuffer, "%02d:%02d", sTime.ucHour, sTime.ucMin); ulValue = umktime(&sTime) + 3600; // sTime が 1970-1-1 00:00:00 だと -1 返る ulocaltime(ulValue, &sTime); usnprintf(pcBuffer, 6, "%02d:%02dhoge", sTime.ucHour, sTime.ucMin); ulValue = ustrcmp(pcBuffer, "01:00"); while(1) {} }
ulocaltime、mktime は、バックアップ付き RTC でも乗ってないと、あまりうれしくないような気がしますね。そして、コードサイズは -O2 で 1480byte でした。余裕があれば使うけど、なくても良いという感じです。
00000000 000005ac ustdlib.obj (.text) 00000900 0000001c ustdlib.obj (.const)
次は、シリアル通信まわりを見ていきたいと思います。