前言:
在多任务操作系统中创建任务时,都需要指定该任务的堆栈大小,那么这个堆栈的作用时什么呢?什么情况下需要用到堆栈,以及大小不够时会产生什么异常呢?
1 任务状态
简单分为运行态,就绪态,阻塞态。
运行态:万事俱备,不欠东风(获得CPU控制权);
就绪态:万事俱备,只欠东风(缺少CPU控制权);
阻塞态:万事不俱备(等事件或信号),还欠东风(缺少CPU控制权);
每个任务基本上都会游离于这三种状态。
运行到阻塞,就绪到运行称为任务切换过程。
2 任务控制块
任务控制块是任务的抽象类型,用于描述其属性和方法。
struct tcb_s
{
/* Fields used to support list management *************************************/
FAR struct tcb_s *flink; /* Doubly linked list */
FAR struct tcb_s *blink;
/* Task Group *****************************************************************/
#ifdef HAVE_TASK_GROUP
FAR struct task_group_s *group; /* Pointer to shared task group data */
#endif
/* Task Management Fields ***************************************