ToolKit是一套应用于嵌入式系统的通用工具包,可灵活应用到有无RTOS的程序中,采用C语言面向对象的思路实现各个功能,尽可能最大化的复用代码,目前为止工具包包含:循环队列、软件定时器、事件集。
【资料图】
•Queue循环队列
1. 支持动态、静态方式进行队列的创建与删除。
2. 可独立配置缓冲区大小。
3.支持数据最新保持功能,当配置此模式并且缓冲区已满,若有新的数据存入,将会移除最早数据,并保持缓冲区已满。
•Timer软件定时器
1. 支持动态、静态方式进行定时器的创建与删除。
2.支持循环、单次模式。
3. 可配置有无超时回调函数。
4.可配置定时器工作在周期或间隔模式。
5. 使用双向链表,超时统一管理,不会因为增加定时器而增加超时判断代码。
•Event事件集
1. 支持动态、静态方式进行事件集的创建与删除。
2.每个事件最大支持32个标志位。
3.事件的触发可配置为“标志与”和“标志或”。
toolkit├──include//包含文件目录|├──toolkit.h//toolkit头文件|└──toolkit_cfg.h//toolkit配置文件├──src//toolkit源码目录|├──tk_queue.c//循环队列源码|├──tk_timer.c//软件定时器源码|└──tk_event.c//事件集源码├──samples//例子|├──tk_queue_samples.c//循环队列使用例程源码|├──tk_timer_samples.c//软件定时器使用例程源码|└──tk_event_samples.c//事件集使用例程源码└──README.md//说明文档
•ToolKit配置项
•Queue 循环队列配置项
•Timer 软件定时器配置项
•Event 事件集配置项
structtk_queue*tk_queue_create(uint16_tqueue_size,uint16_tmax_queues,boolkeep_fresh);
队列创建示例:
intmain(intargc,char*argv[]){/*动态方式创建一个循环队"queue",缓冲区大小50字节,不保持最新*/structtk_queue*queue=tk_queue_create(50,1,false);if(queue==NULL){printf("队列创建失败!\n");}/*...*//*Youcanaddyourcodeunderhere.*/return0;}
booltk_queue_delete(structtk_queue*queue);
booltk_queue_init(structtk_queue*queue,void*queuepool,uint16_tpool_size,uint16_tqueue_size,boolkeep_fresh);
队列创建示例:
intmain(intargc,char*argv[]){/*定义一个循环队列*/structtk_queuequeue;/*定义循环队列缓冲区*/uint8_tqueue_pool[100];/*静态方式创建一个循环队列"queue",缓存区为queue_pool,大小为queue_pool的大小,模式为保持最新*/if(tk_queue_init(&queue,queue_pool,sizeof(queue_pool),sizeof(queue_pool[0]),true)==false){printf("队列创建失败!\n");}/*...*//*Youcanaddyourcodeunderhere.*/}
booltk_queue_detach(structtk_queue*queue);
booltk_queue_clean(structtk_queue*queue);
booltk_queue_empty(structtk_queue*queue);
booltk_queue_full(structtk_queue*queue);
booltk_queue_peep(structtk_queue*queue,void*pval);
booltk_queue_remove(structtk_queue*queue);
booltk_queue_push(structtk_queue*queue,void*val);
booltk_queue_pop(structtk_queue*queue,void*pval);
uint16_ttk_queue_curr_len(structtk_queue*queue);
uint16_ttk_queue_push_multi(structtk_queue*queue,void*pval,uint16_tlen);
uint16_ttk_queue_pop_multi(structtk_queue*queue,void*pval,uint16_tlen);
booltk_timer_func_init(uint32_t(*get_tick_func)(void));
structtk_timer*tk_timer_create(void(*timeout_callback)(structtk_timer*timer));
定时器创建示例::
/*定义获取系统tick回调函数*/uint32_tget_sys_tick(void){returntick;}/*定时器超时回调函数*/voidtimer_timeout_callback(structtk_timer*timer){printf("timeout_callback:timertimeout:%ld\n",get_sys_tick());}intmain(intargc,char*argv[]){/*初始化软件定时器功能,并配置tick获取回调函数*/tk_timer_func_init(get_sys_tick);/*定义定时器指针*/tk_timer_ttimer=NULL;/*动态方式创建timer,并配置定时器超时回调函数*/timer=tk_timer_create((tk_timer_timeout_callback*)timer_timeout_callback);if(timer==NULL){printf("定时器创建失败!\n");return0;}/*...*//*Youcanaddyourcodeunderhere.*/return0;}
booltk_timer_delete(structtk_timer*timer);
booltk_timer_init(structtk_timer*timer,void(*timeout_callback)(structtk_timer*timer));
队列创建示例:
/*定义获取系统tick回调函数*/uint32_tget_sys_tick(void){returntick;}/*定时器超时回调函数*/voidtimer_timeout_callback(structtk_timer*timer){printf("timeout_callback:timertimeout:%ld\n",get_sys_tick());}intmain(intargc,char*argv[]){/*定义定时器timer*/structtk_timertimer;boolresult=tk_timer_init(&timer,(tk_timer_timeout_callback*)timer_timeout_callback);if(result==NULL){printf("定时器创建失败!\n");return0;}/*...*//*Youcanaddyourcodeunderhere.*/return0;}
booltk_timer_detach(structtk_timer*timer);
booltk_timer_start(structtk_timer*timer,tk_timer_modemode,uint32_tdelay_tick);
booltk_timer_stop(structtk_timer*timer);
booltk_timer_continue(structtk_timer*timer);
booltk_timer_restart(structtk_timer*timer);
tk_timer_modetk_timer_get_mode(structtk_timer*timer);
tk_timer_statetk_timer_get_state(structtk_timer*timer);
booltk_timer_loop_handler(void);
函数原型:
typedefvoid(*timeout_callback)(structtk_timer*timer);
一对一
/*定义两个回调函数,对应定时器timer1和timer2*/voidtimer1_timeout_callback(structtk_timer*timer){printf("定时器1超时!\n");}voidtimer2_timeout_callback(structtk_timer*timer){printf("定时器2超时!\n");}/*创建两个定时器,配置单独超时回调函数*/timer1=tk_timer_create((timeout_callback*)timer1_timeout_callback);timer2=tk_timer_create((timeout_callback*)timer2_timeout_callback);
多对一
/*定时器timer1和timer2共用一个回调函数,在回调函数做区分*/voidtimer_timeout_callback(structtk_timer*timer){if(timer==timer1)printf("定时器1超时!\n");elseif(timer==timer2)printf("定时器2超时!\n");}/*创建两个定时器,使用相同的超时回调函数*/timer1=tk_timer_create((timeout_callback*)timer_timeout_callback);timer2=tk_timer_create((timeout_callback*)timer_timeout_callback);
structtk_event*tk_event_create(void);
booltk_event_delete(structtk_event*event);
booltk_event_init(structtk_event*event);
booltk_event_send(structtk_event*event,uint32_tevent_set);
booltk_event_recv(structtk_event*event,uint32_tevent_set,uint8_toption,uint32_t*recved);
本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
猜你喜欢:
分享一种日志滚动覆盖的方法
bug解决不了?使用日志法
关于嵌入式系统日志打印的一点建议
分享一份嵌入式软件工具清单!
易懂 | 手把手教你编写你的第一个上位机
实用 | 10分钟教你搭建一个嵌入式web服务器
嵌入式常用通信传输协议动图,收藏!
适用于嵌入式的差分升级通用库!
分享一种灵活性很高的协议格式(附代码例子)
分享几个实用的代码片段(第二弹)
在公众号聊天界面回复1024,可获取嵌入式资源;回复m,可查看文章汇总
优化产业链布局,新疆天业大手笔收购天辰化工4月12日晚间,新疆天业发布公告,公司拟以支付现金方式收购新
海南铁路轮渡航班时间有调整
2023年保山普通话考试指南1、测试时间:2023年4月21日(星期五)按照考生选择的考试日期、依据考生缴费时间的
在全民国家安全教育日到来之际,4月12日,重庆市渝北区龙山街道龙华社区开展“国家安全宣传行”主题活动,
4月13日盘中消息,13点13分博菲电气(001255)触及涨停板。目前价格43 2,上涨10 01%。其所属行业塑料目前