2

私は、どのような種類の「標準ライブラリ」にもアクセスできない組み込みシステム (ARM Cortex M3) に取り組んでいます。特に、私は にアクセスできませんmalloc

void doStuff(uint8_t *buffer)512 ビットのバッファーへのポインターを受け入れる関数があります。私は次のことを試しました:

uint8_t buffer[64] = {0};
doStuff((uint8_t *) &buffer));

しかし、期待した結果が得られません。私は何か間違ったことをしていますか?代替アプローチはありますか?

4

2 に答える 2

5

doStuff(buffer)buffer すでにuint8_t*. _

これとは別に、あなたの例では、1つの括弧を閉じすぎてい&bufferます。


bufferが可変サイズの場合は、サイズdoStuffも渡す必要があります。一定サイズの場合は、いつかサイズを変更する場合に備えて、サイズも渡します。

そうは言っても、次のようにする必要があります。

uint8_t buffer[64] = {0};
int     len        = 64;
doStuff(buffer, len);
于 2012-04-19T09:00:15.897 に答える
1

simplemalloc():charmem[MAXMEM]があります。構造体のフリーテーブル。次に、独自のsimplemalloc()を記述します。これは、フリーテーブルで十分な大きさのメモリのジャンクを検出し、オフセットをmemに返します。simplefree()は、フリーテーブルを調整します。

エディス:

多数のmalloc()が必要な場合は、静的memをタスクごとに異なるチャンクに分割することもできます(正確に100バイトの割り当てに1つのチャンク、お気に入りの構造体のサイズに1つのフォートなど)。これにより、検索が高速化されます。無料のmem。

memが不足している場合は、simplemalloc()にbestmatch()を実装する必要があります。これは、悪い副作用として実行が遅くなります。

十分なメモリがある場合は、debugversionを実装できます。これにより、もう少しメモリが「割り当て」られ、simplemalloc()されたメモリの開始前と終了後にXXXが配置されます。free()で、このXXXが壊れているかどうかを確認できるので、バッファオーバーまたはアンダーフローがあることがわかります。

于 2012-04-19T09:15:49.903 に答える