创建线程 tx_tc.c

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值