4

是否有直接方法可以在“C”函数中引用stack_startstack_end符号的值?我可以使用一些汇编程序来读取每个符号并将其放置到已赋予“已使用”属性的变量中。例如。

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

在 C 中没有直接的方法来访问stack_startstack_end 符号。您必须使用汇编代码来访问堆栈内存。

于 2013-05-23T07:04:56.797 回答