本帖最后由 eagle_avr 于 2017-8-21 11:15 编辑
在这个启动文件的一开始有如下定义:
- Stack_Size EQU 0x00000400
- AREA STACK, NOINIT, READWRITE, ALIGN=3
- Stack_Mem SPACE Stack_Size
- __initial_sp
-
- ; <h> Heap Configuration
- ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
- ; </h>
- Heap_Size EQU 0x00000200
- AREA HEAP, NOINIT, READWRITE, ALIGN=3
- __heap_base
- Heap_Mem SPACE Heap_Size
- __heap_limit
- PRESERVE8
- THUMB
复制代码
而在建立uCOS-II的任务前也会分配任务栈:
- #define TASK_iWDG_PRIO 4
- #define TASK_iWDG_STK_SIZE 64
- #define TASK_CAN_PRIO 5
- #define TASK_CAN_STK_SIZE 64
- #define TASK_BINidxERROR_PRIO 6
- #define TASK_BINidxERROR_STK_SIZE 64
- #define TASK_ProgamFlash_PRIO 7
- #define TASK_ProgamFlash_STK_SIZE 64
- #define TASK_Timer3_PRIO 8
- #define TASK_Timer3_STK_SIZE 64
复制代码
不理解这两个栈分别是指的是什么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
而任务栈,是 OS 跑起来后,每个任务实际使用的栈。
OS 第一次跑起来后,SP 会发生一次交替切换,从 __initial_sp 到实际任务的栈。
ALIGN=3,是 8 字节对齐。
具体原因见:「Eight-byte Stack Alignment」。
学习了,我一直以为他们是共享堆栈的
一周热门 更多>