OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 147|回复: 2

任务初始化函数

[复制链接]

  离线 

26

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-6-5
在线时间
80 小时
发表于 2017-9-29 17:52:17 | 显示全部楼层 |阅读模式
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就是这个数组的长度。 但是呢,栈跟数组又不一样,栈是向下增长的。高地址->低地址。 我们需要的栈顶指针就类似与数组最后一个元素的地址。所以就是数组首地址+数组长度。
回复

使用道具 举报

  离线 

116

主题

429

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1148
金钱
1148
注册时间
2015-9-18
在线时间
403 小时
发表于 2017-9-29 17:52:18 | 显示全部楼层
首先,不管是堆还是栈,归根到底都还是内存,在单片机中都是用ram实现的.
额,就像我们操作数组一样,我们仅仅需要知道数组的首地址和长度。这里的pxNewTCB->pxStack就是这个数组的首地址,而ulStackDepth就是这个数组的长度。

但是呢,栈跟数组又不一样,栈是向下增长的。高地址->低地址。

我们需要的栈顶指针就类似与数组最后一个元素的地址。所以就是数组首地址+数组长度。

电子爱好者
回复

使用道具 举报

  离线 

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-6-15
在线时间
20 小时
发表于 2017-10-10 19:23:33 | 显示全部楼层
楼上说的不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-23 04:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */