25

ARM7 マイクロコントローラーの freertos と組み合わせて使用​​するための小さな libc を探しています。私は newlib を見てきましたが、私のニーズには少し複雑すぎます。Newlib はいくつかの関数 (printf() など) で malloc() を呼び出しますが、これは小さな組み込みリアルタイム システムには適していません。

私のアプリケーションに適合する、小型でポータブルなオープンソースの libc 実装を知っている人はいますか?

4

8 に答える 8

12

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 日に再びコミットを開始しました。

于 2011-02-07T13:09:54.297 に答える
10

私は 32kB の RAM を搭載した Cortex_M3 で newlib を使用していmalloc()ます。siprintf()sniprintf()

長所: を呼び出す必要はもうありませんmalloc()

短所: floatdoubleの書式設定をサポートしていないため、この方法では実際には移植できません。

于 2011-02-10T11:29:11.167 に答える
7

newlib を使用し、sbrk syscall を実装しない場合、malloc を必要とする関数を使用するとリンカ エラーが生成されるため、動的メモリを必要とする呼び出しを誤って使用することを防ぐことができます。したがって、それを行うことをお勧めします。その後、リンカ エラーの原因となる関数を単純に回避します。使用したくないライブラリ関数を変更またはオーバーライドできます。

于 2011-02-12T00:19:41.793 に答える
3

printf () は、小さな組み込みリアルタイム システムには向いていません!

実際には、多くの点で malloc よりも悪いです。可変引数リスト、非常に複雑なフォーマット、必要のない場合の浮動小数点数のサポートなど。 printf() には膨大なオーバーヘッドが伴い、渡されたすべてのパラメーターが で評価されるため、コンパイラーはそれを減らすことができません。ランタイム。

printf() は、愛好家やまだ C を学習している初心者にはおそらく問題ありません。しかし、プロのプログラマーである場合は、独自のシリアル モニター/LCD ルーチンを作成する必要があります。プログラムのパフォーマンスとフラッシュの消費量が大幅に改善されます。

于 2011-02-07T14:00:46.133 に答える
2

同様のニーズがあり、klibcが非常に適していることがわかりました。唯一の欠点 (商用利用の場合) は、ほとんどが BSD ライセンスであるにも関わらず、ディストリビューションに GPL ライセンスのファイルがいくつか含まれていることです。ここで最小バージョンをハックしました。

これは PDCLib よりもさらに制限されており、printf や strtok などのいくつかの基本的な関数だけが必要な場合に適しています。すべての機能を含めてわずか 4kB にコンパイルされます。

于 2011-09-09T20:21:04.653 に答える
1

LGPL µClibcを確認できます。これは、組み込みシステムに近いがglibc、組み込みシステムにより適していると考えられています。

また、Linux 以外の環境により適している可能性があるnewlibeCosなど、他のオープン ソース C ライブラリを参照するページもあります。

于 2011-02-07T13:11:46.360 に答える
-2

おそらくuClibcEGLIBCを調べてください。

于 2011-02-07T13:12:11.940 に答える