新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2016-6-5
- 在线时间
- 85 小时
|
1金钱
#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) )
{
/* Fill the stack with a known value to assist debugging. */
( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) ); //1如果使能了堆栈的溢出检测功能或者追踪功能的话使用一个定值tskSTACK_FILL_BYTE来填充任务堆栈,这个值为0xa5U
}
#endif /* ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) ) */
/* Calculate the top of stack address. This depends on whether the stack
grows from high memory to low (as per the 80x86) or vice versa.
portSTACK_GROWTH is used to make the result positive or negative as required
by the port. */
#if( portSTACK_GROWTH < 0 )
{
pxTopOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 ); //2 计算堆栈栈顶pxTopOfStack初始化任务堆栈的时候用到
请问pxNewTCB->pxStack 是栈底还是整个堆栈 怎么理解
|
最佳答案
查看完整内容[请看2#楼]
首先,不管是堆还是栈,归根到底都还是内存,在单片机中都是用ram实现的.
额,就像我们操作数组一样,我们仅仅需要知道数组的首地址和长度。这里的pxNewTCB->pxStack就是这个数组的首地址,而ulStackDepth就是这个数组的长度。
但是呢,栈跟数组又不一样,栈是向下增长的。高地址->低地址。
我们需要的栈顶指针就类似与数组最后一个元素的地址。所以就是数组首地址+数组长度。
|