diff --git a/docs/doc/kernel/task.md b/docs/doc/kernel/task.md
index 69ec4aa..b1a8c27 100644
--- a/docs/doc/kernel/task.md
+++ b/docs/doc/kernel/task.md
@@ -58,28 +58,36 @@ XiUOS 中的任务在任意时刻都处于就绪(ready)、运行(running
```c
struct task_descriptor
{
- void *stack_pointer;
- struct dync_sched_member dync_sched_member_x;
- struct task_baseinfo t_baseinfo_x;
+ void *stack_point;
+ TaskDyncSchedMember_x Task_DyncSchedMember;
+ TaskBaseInfo_x Task_BaseInfo;
-#ifdef XS_USING_SMP
- struct smp_info smp_info_x;
+#ifdef XS_CONFIG_SMP
+ TaskSmpInfo_t Task_SmpInfo;
#endif
#if defined(XS_USING_EVENT)
- xs_uint32 event_ctrl1:3;
- xs_uint32 event_ctrl2:29;
+ xs_uint32 event_trigger:29;
+ xs_uint32 event_mode:3;
+#if defined(XS_CONFIG_TASK_ISOLATION)
+ xs_uint32 *Recved_event;
+#endif
+#endif
+
+#if defined(XS_CONFIG_MESSAGEQUEUE) && defined(XS_CONFIG_TASK_ISOLATION)
+ void *mq_buf;
#endif
- xs_err_t error;
- XS_DOUBLE_LINKLIST link;
+ xs_err_t exstatus;
+ XS_DOUBLE_LINKLIST link;
+ struct xs_IdNode id;
};
```
-其中,stack_pointer 指向任务堆栈的起始地址,dync_sched_member_x 包含与任务调度相关的信息,t_baseinfo_x 记录任务的基本信息,smp_info_x 统计与多处理器相关的信息,event_ctrl1 / event_ctrl2 用于实现事件集机制(详见[任务通信](#communication)),error为任务调用内核接口时最近的错误码,即用户线程在使用内核接口时可能会执行失败,此时内核接口返回-1,具体的错误码被保存在error成员中,且在下一次调用内核接口失败时被覆盖,link 用于组织内核中所有的任务。各复合成员的详细定义如下。
-* struct dync_sched_member
+其中,stack_point 指向任务堆栈的起始地址,Task_DyncSchedMember 包含与任务调度相关的信息,Task_BaseInfo 记录任务的基本信息,Task_SmpInfo 统计与多处理器相关的信息,event_trigger / event_mode 用于实现事件集机制(详见[任务通信](#communication)),exstatus为任务调用内核接口时最近的错误码,即用户线程在使用内核接口时可能会执行失败,此时内核接口返回-1,具体的错误码被保存在exstatus成员中,且在下一次调用内核接口失败时被覆盖,link 用于组织内核中所有的任务。各复合成员的详细定义如下。
+* struct TaskDyncSchedMember
```c
-struct dync_sched_member {
+struct TaskDyncSchedMember {
xs_uint8 stat;
xs_uint8 advance_cnt;
xs_uint8 cur_prio;
@@ -89,14 +97,19 @@ struct dync_sched_member {
#ifdef XS_USING_TASK_ISOLATION
xs_uint8 isolation_flag;
void *isolation;
+ xs_uint8 isolation_status;
#endif
union {
XS_DOUBLE_LINKLIST sched_link;
XS_AVL sched_avl;
};
- XS_DOUBLE_LINKLIST pend_link;
- xs_Timer_t task_timer;
+#if XS_KTASK_PRIORITY_MAX > 32
+ xs_uint8 bitmap_offset;
+ xs_uint8 bitmap_row;
+#endif
+ xs_uint32 bitmap_column;
+ struct xs_Timer task_timer;
};
#define XS_SUSPEND ((1) << (0))
@@ -105,27 +118,31 @@ struct dync_sched_member {
#define XS_QUIT ((1) << (3))
```
-struct dync_sched_member结构用于记录与调度相关的信息。stat记录任务的当前状态,可以为挂起(XS_SUSPEND)、就绪(XS_READY)、运行(XS_RUNNING)或退出(XS_QUIT)。advance_cnt表示在配置成短作业预先调度时优先处理的时间片周期个数。cur_prio表示任务当前的优先级,用于优先级反转,该优先级可以高于任务创建时配置的优先级。origin_timeslice表示在时间片轮转调度时,任务每次运行的时间片。isolation_flag变量和指针isolation支持地址空间隔离。sched_link和sched_avl构成的联合体为就绪队列节点,XiUOS中就绪队列可以组织为双链表(sched_link)或平衡二叉树(sched_avl)。pend_link为任务挂起时使用的等待队列节点。task_timer为任务睡眠的计数器。
-* struct task_baseinfo
+struct TaskDyncSchedMember结构用于记录与调度相关的信息。stat记录任务的当前状态,可以为挂起(XS_SUSPEND)、就绪(XS_READY)、运行(XS_RUNNING)或退出(XS_QUIT)。advance_cnt表示在配置成短作业预先调度时优先处理的时间片周期个数。cur_prio表示任务当前的优先级,用于优先级反转,该优先级可以高于任务创建时配置的优先级。origin_timeslice表示在时间片轮转调度时,任务每次运行的时间片。isolation_flag变量和指针isolation支持地址空间隔离。sched_link和sched_avl构成的联合体为就绪队列节点,XiUOS中就绪队列可以组织为双链表(sched_link)或平衡二叉树(sched_avl)。task_timer为任务睡眠的计数器。
+* struct TaskBaseInfo
```c
-struct task_baseinfo {
+struct TaskBaseInfo {
char name[XS_NAME_MAX];
void *func_entry;
void *func_param;
- xs_uint32 stack_size;
xs_uint8 origin_prio;
+ xs_uint32 stack_size;
+ void *stack_addr;
};
```
-struct task_baseinfo结构记录了任务的基本属性,包括任务的名称(name)、入口函数(func_entry)和参数(func_param)、栈大小(stack_size)、初始优先级(origin_prio)。
-* struct smp_info
+struct TaskBaseInfo结构记录了任务的基本属性,包括任务的名称(name)、入口函数(func_entry)和参数(func_param)、栈大小(stack_size)、初始优先级(origin_prio)。
+* struct TaskSmpInfo
```c
-struct smp_info {
+struct TaskSmpInfo {
xs_uint8 combined_coreid;
xs_uint8 running_coreid;
+ xs_uint16 sched_lock_cnt;
+ xs_uint16 cpus_lock_cnt;
+ xs_uint16 critical_lock_cnt;
};
```
-struct smp_info结构包含多处理器相关的信息,其成员分别表示该任务绑定的CPU ID与正在运行的CPU ID。
+struct TaskSmpInfo结构包含多处理器相关的信息,其成员分别表示该任务绑定的CPU ID与正在运行的CPU ID。
### 任务函数接口
@@ -151,55 +168,46 @@ struct task_descriptor* xs_UserTaskCreate(xs_utask_x task);
| task | 任务配置属性 |
```c
-xs_int32 xs_UserTaskDelete(struct task_descriptor task);
+xs_err_t xs_UserTaskDelete(xs_int32 id);
```
该函数用于删除一个任务,强制其进入退出状态。若删除成功则返回XS_EOK,否则返回-XS_ERROR。
| 参数 | 描述 |
| --- | --- |
-| task| 待删除的任务描述符 |
+| id | 待删除的任务ID |
```c
-xs_int32 xs_UserTaskCoreCombine(struct task_descriptor task, xs_uint8 core_id);
+xs_err_t xs_UserTaskCoreCombine(xs_int32 id,xs_uint8 core_id);
```
该函数用于将任务绑定至指定的处理器上。若绑定成功则返回XS_EOK,否则返回-XS_ERROR。
| 参数 | 描述 |
| --- | --- |
-| task | 待绑定的任务描述符 |
+| id | 待绑定的任务ID |
| core_id | 待绑定的处理器ID |
```c
-xs_int32 xs_UserTaskCoreUncombine(struct task_descriptor task);
+xs_err_t xs_UserTaskCoreUncombine(xs_int32 id);
```
该函数用于解除任务与处理器的绑定。若解除成功则返回XS_EOK,否则返回-XS_ERROR。
| 参数 | 描述 |
| --- | --- |
-| task | 待解除绑定的任务描述符 |
+| id | 待解除绑定的任务ID |
```c
-xs_int32 xs_UserTaskDelay(xs_ticks_x ticks);
+xs_err_t xs_UserTaskDelay(xs_int32 ms);
```
该函数用于将当前任务挂起一定时间,单位为tick。挂起时间结束后,任务会进入就绪状态,等待系统调用。
| 参数 | 描述 |
| --- | --- |
-| ticks | 任务挂起时间,单位为tick |
+| ms | 任务挂起时间,单位为ms |
-```c
-struct task_descriptor* xs_UserTaskSearch(char *name)
-```
-
-该函数根据任务名称获取任务描述符。
-
-| 参数 | 描述 |
-| --- | --- |
-| name | 任务名称 |
## 任务通信
@@ -227,6 +235,7 @@ struct xs_MsgQueue
XS_DOUBLE_LINKLIST send_pend_list;
XS_DOUBLE_LINKLIST recv_pend_list;
XS_DOUBLE_LINKLIST link;
+ struct xs_MsgQueue_Ops *ops;
};
```
@@ -241,18 +250,19 @@ struct xs_MsgQueue
| send_pend_list | 被挂起的发送任务链表 |
| recv_pend_list | 被挂起的接收任务链表 |
| link | 系统中所有消息队列构成的链表 |
+| ops | 消息队列的操作函数集 |
#### 消息队列函数接口
```c
-xs_int32 xs_UserMsgQueueCreate(xs_uint16 msg_len, xs_uint16 max_msgs);
+xs_int32 xs_UserMsgQueueCreate(xs_uint16 msg_size, xs_uint16 max_msgs);
```
该函数用于创建一个消息队列。创建成功后,新的消息队列会被加入内核的消息队列管理链表,并返回该消息队列的ID,ID默认范围0-255,可配置。
| 参数 | 描述 |
| --- | --- |
-| msg_len | 每条消息的长度,单位为字节 |
+| msg_size | 每条消息的长度,单位为字节 |
| max_msgs | 缓冲区中最多存放的消息数量 |
```c
@@ -311,7 +321,7 @@ xs_int32 xs_UserMsgQueueReinit(xs_uint16 id);
```c
struct xs_Semaphore
{
- xs_uint16 id;
+ struct xs_IdNode id;
xs_uint16 value;
XS_DOUBLE_LINKLIST pend_list;
@@ -390,8 +400,9 @@ xs_int32 xs_UserSemaphoreSetValue(xs_uint16 id, xs_uint16 val);
```c
struct xs_Mutex
{
- xs_uint16 id;
+ struct xs_IdNode id;
+ xs_uint16 val;
xs_uint8 origin_prio;
xs_uint8 recursive_cnt;
@@ -404,6 +415,7 @@ struct xs_Mutex
| 成员 | 描述 |
| --- | --- |
| id | 互斥量ID,用于唯一标识一个互斥量 |
+| value | 互斥量的当前值 |
| origin_prio | 持有互斥量的任务的原优先级,用于避免优先级反转 |
| recursive_cnt | 持有互斥量的任务获取互斥量的次数,用于实现递归锁 |
| holder | 持有互斥量的任务 |