4

stack_startおよびstack_endシンボルの値を「C」関数で参照できる直接的な方法はありますか? アセンブラを少し使って各シンボルを読み取り、それを「使用済み」属性が与えられた変数に配置することで、これを行うことができます。例えば。

static __attribute__((used)) UI_32 StkStart;

__asm__
(
    "LDR R0, =__stack_start__ \n"
    "LDR R1, =StkStart\n"
    "STMIA.W R1, {R0}\n"
);

ここでアセンバーの使用を避ける方法はありますか?

これを行う必要があるのは、スタック領域がスタートアップ モジュールの特定のパターンに初期化されているためです。使用されているスタックの量を判断するために、元のパターンへの変更をチェックするスタック メモリを確認できます。 .

4

2 に答える 2

1

スタックの使用量の大まかなアイデアを得ることができる場合があります。

#include <stdio.h>

char *stack_top;

void f() {
  int stack;
  char tab[1 << 20];
  char stack_end;

  stack = stack_top - &stack_end;
  printf("%d.\n", stack);
}

void main() {
  char dummy;
  stack_top = &dummy;

  f();
  exit(0);
}

サンプルラン:

$ gcc stack.c -o stack
$ ./stack
1048624.
于 2013-05-23T09:35:40.190 に答える
1

stack_startC では、シンボルにアクセスしてstack_endする直接的な方法はありません。スタック メモリにアクセスするには、アセンブリ コードを使用する必要があります。

于 2013-05-23T07:04:56.797 に答える