关注+星标公众号,不错过精彩内容
作者 |NevermindZZT
(相关资料图)
cpost是一个c语言编写的,用于c语言程序上下文切换和解耦的工具。
以使用在嵌入式无操作系统中为例,主要用作中断延迟处理的情况
配置系统tick
配置cpost.h
中的宏CPOST_GET_TICK()
,配置成获取系统tick
配置处理进程
在main loop调用cpostProcess
函数,通过cpost
执行的函数都会在cpostProcess
中执行
cevent
使用注册的方式监听事件,会依赖于编译环境,目前支持keil,iar,和gcc,对于gcc,需要修改链接文件(.ld),在只读数据区添加:
_cevent_start = .;KEEP (*(cEvent))_cevent_end = .;
初始化cevent
系统初始化时,调用ceventInit
ceventInit();
注册cevent事件监听
在c文件中,调用CEVENT_EXPORT
导出事件监听
CEVENT_EXPORT(0, handler, (void *)param);
发送cevent事件
在事件发生的地方,调用ceventPost
抛出事件
ceventPost(0);
cpost
提供一个统一接口cpost(...)
进行事件抛出,此接口通过宏定义,需要在 c99 以上的标准运行
#define cpost(...) \ cpostAddHandler(&((CpostParam){__VA_ARGS__}))
参数
typedef struct{ void *handler; void *param; size_t delay; struct { unsigned char flag : 2; unsigned char paramDiff: 1; } attrs;} CpostParam;
handler
被抛出执行的函数
param
传递给函数的参数
delay
延迟时间
attrs.flag
任务冲突时处理 flag
attrs.paramDiff
比较任务时是否区分参数
...
抛出的参数,用于构造CpostParam
对象
event post接口会抛出事件,事件定义为一个unsigned short
整形,建议通过宏定义所有事件
void ceventPost(unsigned short event);
参数
event
事件
event post接口会静态注册一个事件监听,注意,此接口实际上为定义一个全局的常量,所以需要写在函数体外
CEVENT_EXPORT(_event, _func, ...)
参数
_event
被监听的事件
_func
事件发生时,执行的函数
...
需要传递给_func
函数的参数
声明:本文部分素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。
关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
标签: