工作总结日志<一> 有关实时线程的

本文介绍了如何在C语言中初始化实时线程,设置调度参数,并创建周期执行的线程。主要内容包括pthread库的函数应用,如pthread_attr_setschedparam、pthread_create和pthread_make_periodic_np。实时线程的周期执行通过一个无限循环实现,循环结束后使用挂起函数等待下一次执行。

变量

  • pthread_t  TASK;  实时任务的句柄
  • pthread_attr_t  attr; 一个线程对象的属性
  • struct sched_param  sched_param;  用来描述调度参数的结构体
  • hrtime_t rtperiod;周期 周期线程需要用到
  •  

 

函数

  •  pthread_attr_setschedparam (&attr, &sched_param);将调度参数传递给线程对象的属性 如果是实时的FIFO和RR调度 只需要用到sched_param.sched_priority参数 此参数1优先级最高
  •  pthread_attr_getschedparam 同理 从attr里得到调度参数
  •  pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)(void*), void *arg);申请一个线程 实时内核里 申请的线程为实时线程 具体看系统API接口 
  •  pthread_setfp_np ( )设置浮点计算标志
  •  pthread_make_periodic_np ( )如果为实时线程 设置线程的周期 个人理解周期线程执行的概念为 以设定的周期为该周期线程分配CPU
  •  

 

一个具体实时周期线程功能的一般C写法

pthread_attr_init (&attr);//首先初始化一个线程对象属性 attr需定义
sched_param.sched_priority = 1;//将线程调度参数结构体中的调度极性设置为1 也可以为2或其他数 一般实时  任务的优先级要求很高

pthread_attr_setschedparam (&attr, &sched_param);//然后将设置好的调度参数传给线程对象的属性变量
attr.use_fp = 1;1代表可以在线程中使用浮点计算 前提是内核需支持
attr.stack_size = EMCMOT_TASK_STACK_SIZE;线程使用的堆栈大小 如果太小 线程初始化会失败 具体大小看实际情况

然后调用 pthread_create()函数 其中线程执行函数必须定义为 void* XXXX(void *)

然后执行  pthread_make_periodic_np(emcmotTask, gethrtime() + rtperiod, rtperiod);该函数让上面创建的线程周期执行 参数1 线程句柄 参数2 第一次周期执行的起始时间 参数3 周期 参数2为获得当前CPU时钟加上一个周期为第一次启动周期线程时间 也可以根据情况具体设置

线程的周期执行函数void* XXXX(void *)的写法

周期线程的基本含义是周期执行 也就是说一直需要执行 永远执行不完 所以线程执行函数必须为死循环

while(1)和for(;;)是两种实现方式 个人使用后一种方式 内核周期线程倾向使用for(;;) 用户空间周期进程倾向使用while(1) 原因不太清楚 个人感觉无所谓

在一次周期循环结束,也就是for循环的最后 用挂起函数将线程挂起 意思是说一次周期执行完毕 让出CPU 等待下一个周期再次得到CPU

void * XXXX(void *)

{

for(;;){

          .....................

          .....................

          pthread_wait_np( );

          }

}

在申请线程前 需要初始化线程需要的内存 以便在线程初始化后 线程执行函数可以第一时间使用到有意义的全局变量 共享内存变量等

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值