【发布时间】:2014-02-28 17:12:16
【问题描述】:
来自 taskSpawn VxWorks 5.5 文档:
“分配给衍生任务的唯一资源是一个指定大小的堆栈stackSize,它是从系统内存分区分配的。堆栈大小应该是一个偶数。一个任务控制块(TCB)是从堆栈中雕刻出来的, 以及任务名称所需的任何内存。剩余的内存是任务的堆栈,每个字节都用值 0xEE 填充 checkStack( ) 工具。有关堆栈大小检查帮助,请参阅 checkStack( ) 的手册条目。 "
但是,当尝试通过生成一个全新的任务来扫描堆栈时:
int scan_the_stack(...)
{
printf("Going to scan the stack forward\n");
int i = 0;
int* stack_addr = &i;
for (int i = 0; i < 100; i++)
{
printf("%d : %X\n", i, *stack_addr);
stack_addr++;
}
return 0;
}
void spawn_scan_stack()
{
taskSpawn("tScanner", /* name of new task (stored at pStackBase) */
150, /* priority of new task */
VX_FP_TASK, /* task option word */
10000, /* size (bytes) of stack needed plus name */
scan_the_stack, /* entry point of new task */
0, /* 1st of 10 req'd args to pass to entryPt */
0,0,0,0,0,0,0,0,0);
}
我没有得到预期的连续“EEEEEEEE”,而是得到了一些与其他值混合的“EE”:
-> spawn_scan_stack
value = 80735920 = 0x4cfeeb0
-> Going to scan the stack forward
0 : 0
1 : 4CFEE1C
2 : 2
3 : EEEEEEEE
4 : EEEEEEEE
5 : EEEEEEEE
6 : EEEEEEEE
7 : 0
8 : 0
9 : 0
10 : 4CFEE70
11 : 2951F4
12 : 0
13 : 0
14 : EEEEEEEE
15 : EEEEEEEE
16 : EEEEEEEE
17 : EEEEEEEE
18 : EEEEEEEE
19 : 0
20 : 0
21 : 0
22 : 0
23 : 0
24 : EEEEEEEE
25 : EEEEEEEE
26 : EEEEEEEE
27 : EEEEEEEE
28 : 0
29 : 0
30 : 0
31 : 0
32 : 0
33 : 0
34 : 0
35 : 0
36 : 0
37 : 0
38 : 0
39 : 0
40 : 96
41 : FF630
42 : 20
43 : 11000001
44 : 19BDD /*...*/
问题是为什么堆栈没有充满 EEEEEEE(checkStack 似乎仍在工作)。
【问题讨论】:
-
向下扫描?英特尔堆栈下降。