UINT _tx_thread_create(
//指向线程控制块(thread control block)的指针
TX_THREAD *thread_ptr,
//指向线程名字的指针
CHAR *name,
//指定线程执行的初始C函数。当线程从此入口函数返回时,它将处于Completed并无期限Suspended
VOID (*entry_function)(ULONG),
//首次执行时传递给线程的入口函数的32位值。该输入的用途完全由应用程序决定
ULONG entry_input,
//堆栈的内存区域的起始地址(栈顶!!!!!)
VOID *stack_start,
//堆栈内存区域中的字节数。stack_size≥TX_MINIMUM_STACK
ULONG stack_size,
//线程的优先级数值。0≤priority≤(TX_MAX_PRIORITES-1),0最高。
UINT priority,
//抢占阈值。此值必须是小于或等于线程初始优先级的有效优先级。只有高于此级别的优先级才允许抢占此线程。
UINT preempt_threshold,
//时间片。1 ≤time_slice≤ 0xFFFFFFFF。使用抢占阈值将禁用时间片。值为TX_NO_TIME_SLICE(值为 0)将禁用此线程的时间片。
ULONG time_slice,
//指定线程是立即启动还是置于挂起状态。值为TX_AUTO_START (0x01) 和TX_DONT_START (0x00)。如果指定了 TX_DONT_START,应用程序随后必须调用 tx_thread_resume 以便线程运行。
UINT auto_start);
局部变量:
流程:
1.设置线程控制块
(1) 将线程控制块初始化为0
(2) 将输入参数赋给线程控制块
(3) 将线程状态设为suspend,以进行线程初始化
(4) 设置timer
(5) 设置优先级bit
2.为这个线程创建堆栈空间,初始化栈内存,设置栈指针tx_stack_ptr
3.将线程加入list
(1) 禁止中断 //让当前线程不被抢占
(2) 加载thread ID
(3) 检测created thread list是否为空
1) 非空
将thread加入list,建立连接
2) 空
将thread加入,指针指向自己
(4) list count++
(5) 禁止抢占
(6) 恢复中断
4. 检测是否auto start
(1) 有auto start
调用resume( )使线程ready(把线程放入就绪对应优先级list)
若有更高优先级线程需要进行抢占,system return( )
(2) 无auto start
禁用中断
恢复抢占
恢复中断
5.返回SUCCESS