堆栈就是一种先入后出的数据结构,在UC/OS-II操作系统中每一个任务都会有自己的任务堆栈,那么什么是任务堆栈。
我的理解是,任务堆栈就是一片空间,它可以存储一些信息,因为在操作系统下,程序是并发运行的,也就是说,一个用户程序不可能一下子执行完,比如任务1执行了一半,再执行任务2,那么我们就得把一些中间结果保存起来,这个保存到额地方就是任务堆栈。
严格的说它有以下两个作用:
- 当任务切换或响应中断时,用来保存CPU寄存器中的内容,当任务挂起的时候,将CPU寄存器的内容压入堆栈,恢复的时候再弹出来给CPU寄存器。
- 当任务运行时,它用来保存一些局部变量
在创建一个任务的时候,相应的就得给他一个任务堆栈
OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);例如上句代码中:&LED1_TASK_STK[LED1_STK_SIZE-1]就是堆栈指针。