STM32的uCOS-II startup_stm32f10x_hd.s中的Stack_Size是什么

2019-12-25 18:47发布

本帖最后由 eagle_avr 于 2017-8-21 11:15 编辑

在这个启动文件的一开始有如下定义:

  1. Stack_Size       EQU     0x00000400
  2.                 AREA    STACK, NOINIT, READWRITE, ALIGN=3
  3. Stack_Mem       SPACE   Stack_Size
  4. __initial_sp
  5.                                                   
  6. ; <h> Heap Configuration
  7. ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
  8. ; </h>

  9. Heap_Size       EQU     0x00000200

  10.                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3
  11. __heap_base
  12. Heap_Mem        SPACE   Heap_Size
  13. __heap_limit

  14.                 PRESERVE8
  15.                 THUMB
复制代码

而在建立uCOS-II的任务前也会分配任务栈:

  1. #define TASK_iWDG_PRIO                      4           
  2. #define TASK_iWDG_STK_SIZE              64

  3. #define TASK_CAN_PRIO                       5
  4. #define TASK_CAN_STK_SIZE               64

  5. #define TASK_BINidxERROR_PRIO           6
  6. #define TASK_BINidxERROR_STK_SIZE  64

  7. #define TASK_ProgamFlash_PRIO            7
  8. #define TASK_ProgamFlash_STK_SIZE   64

  9. #define TASK_Timer3_PRIO                  8
  10. #define TASK_Timer3_STK_SIZE         64
复制代码

不理解这两个栈分别是指的是什么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
zzh90513
1楼-- · 2019-12-25 21:11
第一个是不在ucos任务里面其他函数的局部变量堆栈,第二个是任务内局部变量堆栈
security
2楼-- · 2019-12-25 22:48
__initial_sp 这个硬件启动时的,OS 还没跑起来时的栈。
而任务栈,是 OS 跑起来后,每个任务实际使用的栈。
OS 第一次跑起来后,SP 会发生一次交替切换,从 __initial_sp 到实际任务的栈。
eagle_avr
3楼-- · 2019-12-26 02:10
 精彩回答 2  元偷偷看……
eagle_avr
4楼-- · 2019-12-26 05:41
那为何要3字节对齐呢:ALIGN=3?
security
5楼-- · 2019-12-26 07:03
eagle_avr 发表于 2017-8-21 14:00
那为何要3字节对齐呢:ALIGN=3?


ALIGN=3,是 8 字节对齐。
具体原因见:「Eight-byte Stack Alignment」。
suny1022
6楼-- · 2019-12-26 07:55
security 发表于 2017-8-21 15:42
ALIGN=3,是 8 字节对齐。
具体原因见:「Eight-byte Stack Alignment」。

学习了,我一直以为他们是共享堆栈的

一周热门 更多>