tasklet的使用(使用篇)

0.简介

tasklet的实现主要是为了满足嵌入式系统开发过程中经常会遇到定时周期任务、延时任务等需求。在bcos系统中,tasklet在空闲任务中执行,空闲任务在系统中的优先级最低。所以,当系统中没有其他任务执行时,空闲任务会检查tasklet队列中是否有超时的任务需要执行。用户在使用tasklet时一定要注意这一点。tasklet的回调函数的执行与我们预期执行的时间的误差取决于系统中其他线程任务的繁忙程度,当然由于空闲任务的优先级最低,所以在tasklet回调函数执行的过程中可能会被其他高优先级的就绪任务抢占。

1.接口

tasklet的数据结构:

typedef struct bcos_tasklet_s
{
    /* 链表头 */
    struct list_head list;
	 
    /* 回调函数 */
    void (*handler)(void *ptr);
	/* 任务参数 */
    void *ptr;

	/* 任务延时间戳 */
    BC_OS_TICK  stamp;
}bcos_tasklet_t;

对数据结构静态初始化接口:

/* 静态初始化tasklet */
#define BCOS_TASKLET_STATIC_INIT(name, handler, ptr) 	\
{ 							\
	LIST_HEAD_INIT(name.list),			\
	handler, 					\
	ptr, 						\
	0, 					        \
}

将tasklet提交给系统处理:

/*
 * 将tasklet节点添加到tasklet执行队列, 如果时立即执行的tasklet,系统会
 * 尽快调度执行,如果是延时任务,系统会在超时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南波儿万

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值