ARM7 マイクロコントローラーの freertos と組み合わせて使用するための小さな libc を探しています。私は newlib を見てきましたが、私のニーズには少し複雑すぎます。Newlib はいくつかの関数 (printf() など) で malloc() を呼び出しますが、これは小さな組み込みリアルタイム システムには適していません。
私のアプリケーションに適合する、小型でポータブルなオープンソースの libc 実装を知っている人はいますか?
PDCLib はあなたのニーズに合うかもしれません。とはいえ、まだ不完全な [壊れたリンク]であり、おそらくもっと多くの実世界でのテストが必要です。その作成者は、 SOの DevSolarによってここに書かれています。
update 2012-11-01: 2012-08-14 の時点で、開発は Owen Shepherd に引き継がれ、新しいホームページとbitbucket リポジトリが完成しました [壊れたリンク、これを使用してください]。
2015 年 10 月 31日更新:専用 Web サイトは閉鎖されたようですが、コードはbitbucket でまだ見つけることができます。そのリポジトリへの最後のコミットは 2014 年 11 月 24 日に行われました。
2016 年 7 月 12 日更新:ウェブサイトが復旧し、DevSolar は 2016 年 3 月 1 日に再びコミットを開始しました。
私は 32kB の RAM を搭載した Cortex_M3 で newlib を使用していmalloc()
ます。siprintf()
sniprintf()
長所: を呼び出す必要はもうありませんmalloc()
。
短所: floatとdoubleの書式設定をサポートしていないため、この方法では実際には移植できません。
newlib を使用し、sbrk syscall を実装しない場合、malloc を必要とする関数を使用するとリンカ エラーが生成されるため、動的メモリを必要とする呼び出しを誤って使用することを防ぐことができます。したがって、それを行うことをお勧めします。その後、リンカ エラーの原因となる関数を単純に回避します。使用したくないライブラリ関数を変更またはオーバーライドできます。
printf () は、小さな組み込みリアルタイム システムには向いていません!
実際には、多くの点で malloc よりも悪いです。可変引数リスト、非常に複雑なフォーマット、必要のない場合の浮動小数点数のサポートなど。 printf() には膨大なオーバーヘッドが伴い、渡されたすべてのパラメーターが で評価されるため、コンパイラーはそれを減らすことができません。ランタイム。
printf() は、愛好家やまだ C を学習している初心者にはおそらく問題ありません。しかし、プロのプログラマーである場合は、独自のシリアル モニター/LCD ルーチンを作成する必要があります。プログラムのパフォーマンスとフラッシュの消費量が大幅に改善されます。