Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于cevent与lwevt的对比 #11

Open
mintisan opened this issue Oct 25, 2022 · 4 comments
Open

关于cevent与lwevt的对比 #11

mintisan opened this issue Oct 25, 2022 · 4 comments

Comments

@mintisan
Copy link

发现这两个功能好像,都是为了将为了去除模块间的耦合,用这种“注册-回调”或者说“广播-事件”模型来解耦

两者都是在编译时映射事件-回调,cevent借助ld文件在运行初始化来达成,lwevt则通过lwevt_t结构体在编译时展开来达成;

目前感觉cevent相对于lwevt的缺点是需要移植,依赖链接脚本,而lwevt则只要是ANSI-C就可以;
而event在传参这块比lwevt要优雅些,或者说更加灵活些,而且lwevt目前只能注册一个回调,接收多个事件。

但是,两位作者虽然都是为了解耦,但是举出例子的场景不太相同,lwevt举的是编译时设置多个事件-初始化时注册回调-后续任何事件发生都可以回到回调函数中;cevent则是编译时绑定事件-回调【此时就可以将事件宏定义抽象为执行函数的句柄,发送这个事件即可以触发绑定的事件】,而后使用中对应使用即可。

这里有些疑问,cevent可以将多个事件注册到同一个回调函数么,如果可以,应该也可以实现lwevt的场景例子

@NevermindZZT
Copy link
Owner

cevent 对某个事件注册监听,对 cevent 来说,注册时传入的函数就是回调,是可以对一个事件注册多个监听的

@mintisan
Copy link
Author

mintisan commented Jan 12, 2023

感谢回复,根据一个实际场景对比了下,感觉 cpost适合异步场景,比如在蓝牙发送【蓝牙发送为异步发送,发送完会触发一个回调函数】场景下,在发送时申请内存来存放数据,然后调用异步发送,等待发送完成在回调用释放之前申请的内存资源。
而lwmem适合同步场景,在上电初始化时注册,然后在其他【比如任务】中生成事件,触发上电注册的回调,传递信息给注册文件。

不知道理解的对不对

@mintisan mintisan reopened this Jan 12, 2023
@mintisan
Copy link
Author

感觉不太对,我再理理,,,

@NevermindZZT
Copy link
Owner

使用场景并没有固定,主要看怎么用吧,cpost 典型的应用场景就是中断的处理,在中断服务函数中抛出事件,然后在其他线程进行处理,可以减少中断的阻塞,而 cevent 做出来主要是为了各个模块的解耦

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants