2012年2月10日金曜日

printf関数 とか

組み込みマイコンだと stdio.hが提供されていない場合があります
もう分かるよな?

つまり PICでprintf関数を使いたくても普通は使えません
と言うか使うな ということなんだけど
やっぱ使いたいじゃないですか
ということで
PCで試して見ました
printf関数って作れるの?って

まぁとても人様に見せられるようなコードじゃないので
まだ隠してますが
結果から言えば
「限りなく可能に近い可能」
えっとですね 一応「最低限必要な機能」は実装して見ました
まぁ元のprintfだって人間が作ってるんだから作れないわけ無いよなぁ


組み込みで最低限printfに要求されるであろう数値出力もひと通りカバーしてます
%+015d みたいな感じのフォーマット指定
まぁそれくらいしか対応してないんですけどね

ちなみに九九を出力する実行コードは14kbくらいです
おっも…
何も考えずに普通に九九を出力するコードを書いたら実行コードは9kbくらいです

と思ってVisual C++ 2010で試したら29kbって…
Winって凄い肥大化してますよねぇ…
 MacはHDDが比較的小容量でも大丈夫なのは全体がコンパクトだからだよなぁ
 起動が早いのもコンパクトっていうのが大きいんだろうなぁ



でも さすがにこのまま組み込み機器に移植するのは気が引けます
ちゃんと動くかどうか と言うより コードが汚い
あとメモリ無尽蔵に使ってる

多少コードが複雑になってもいいならメモリ使用量は大幅に減らすことができるし
でもそうするとマイコンに持っていったときに遅くなるし
でも現状のままだとメモリが足りないし
うーん どうするか
ま 一番手っ取り早いのはメモリ容量の大きいマイコンを使うことですよね
28ピン(300)でもメモリが1.5kとか2kとかもありますし
(周辺機能に問題があったりするけど)



とりあえず printf関数を自作することはできるの? という問には答えが出たと思います
「全機能を実装するんじゃなけりゃ作ることはできる」

そーいえば数値を文字列化する関数とかも自分で作ってますよ
stdioが無いのにそんな便利な関数が用意されてるわけ無いですからね
結構勉強になりますよ
実際役に立つかはわかりませんけど
勉強なんてそんなもんです

ま 面白いので良しとします
少なくとも“デバッグ環境がない状態で原因も条件もわからないバグを抜く“みたいな作業よりは楽しいですよ
あー あの不具合もどうなったんですかねぇ(白目

0 件のコメント:

コメントを投稿