0

を介して動的メモリ割り当てを使用しているChibiOSmalloc()アプリケーションがあります。

ただし、 を呼び出す時間の 100% で、malloc()が返されることがわかりNULLました。私はそれを確認しました:

  • マイクロコントローラのメモリがいっぱいではありません
  • サイズ 1 の malloc 呼び出しでもエラーが発生するため、メモリ チャンク サイズは問題の原因ではありません。
  • errnoいつも電話ENOMEMの後ですmalloc()

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

_sbrkinの定義を見ると、if の場合は常にエラーos/various/syscalls.cを返すことがはっきりとわかります。ENOMEMCH_CFG_USE_MEMCORE == FALSE

CH_CFG_USE_MEMCORE = TRUEに設定しない限りchconf.h、ChibiOS コアのメモリ マネージャは完全に無効になり_sbrk、その他のメモリ関連の機能はオブジェクト ファイルにのみ含まれるため、リンク エラーは発生しません。

ChibiOS を適切に設定するには、次の設定が に設定されていることを確認してchconf.hください。

#define CH_CFG_USE_MEMCORE                  TRUE

信頼性の問題が発生しないようにするために、可能な場合は代わりにメモリ プールまたは代替アルゴリズムを使用することをお勧めします。が組み込みシステムでしばしば悪い考えである理由については、この詳細な説明を参照してくださいmalloc()(実際には、ほとんどの組み込みコーディング標準で完全に禁止されています)。

于 2015-09-07T22:45:31.970 に答える