RT-Thread OS线程创建

创建方式有两种:

一是动态创建,有操作系统运行时动态分配内存。

二是静态创建,静态线程是指线程控制块、线程运行栈一般都设置为全局变量,  在编译时就被确定、被分配处理,内核不负责动态分配内存空间。

动态创建:使用rt_thread_create()函数

void demo1_thread_task_entry(void *parameter)
{
    while(1)
    {
        rt_kprintf("demo1 task runing...\n");
        rt_thread_mdelay(1000);
    }
}

    rt_thread_t th_id1 = NULL;
    th_id1 = rt_thread_create("demo1", demo1_thread_task_entry, NULL, 1024, 20, 5);
      if(th_id1 == RT_NULL)
      {
          LOG_E("rt_thread_create demo1 failed...\n");
          return 0;
      }
      LOG_D("rt_thread_create demo1 successed ....\n");
      rt_thread_startup(th_id1);

 rt_thread_create函数最后一个参数tick,表示当有相同优先级的任务时,轮流执行tick的时间

对于一些使用 rt_thread_create() 创建出来的线程,当不需要使用,或者运行出错时,我们可以使用下面的函数接口来从系统中把线程完全删除掉:

rt_err_t rt_thread_delete(rt_thread_t thread);

静态创建:使用rt_thread_init()函数

struct rt_thread th3; //全局变量,线程控制
u_char rt3_stack[512] = {0};//全局变量,线程栈空间

void demo3_thread_task_entry(void *parameter)
{
    int i = 1;

      for (i=1;i<10;i++)
      {
          LOG_D("demo3_thread runing...");
          rt_thread_mdelay(1000);
      }
}

int ret;

 ret = rt_thread_init(&th3, "demo3", demo3_thread_task_entry, NULL, rt3_stack, sizeof(rt3_stack), 19, 5);
     if(ret <0){
         LOG_E("rt_thread_init demo3 failed...\n");
         return ret;
     }
     rt_thread_startup(&th3);

对于用 rt_thread_init() 初始化的线程,使用 rt_thread_detach() 将使线程对象在线程队列和内核对象管理器中被脱离。

rt_err_t rt_thread_detach (rt_thread_t thread);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值