RT-Thread任务+消息订阅管理框架软件包:thread_manager+event_loop

来源:RT-Thread操作系统 RTOS 13 次阅读
摘要:为什么开源RTOS都只将我们送到Main?却没有一个开源的任务管理+消息订阅框架+延时消息处理框架。就像LVGL好像没有开源的类似于手表功能页面切换框架。 上篇文章有个读者留言,是否可以支持RT-Thread,索性放假也无聊,所以就整了两个软件包:event loop+thread_manager 二. event loop软件包 一个是event loop软件包(实际上这个18年的时候在 好吧

为什么开源RTOS都只将我们送到Main?却没有一个开源的任务管理+消息订阅框架+延时消息处理框架。就像LVGL好像没有开源的类似于手表功能页面切换框架。

上篇文章有个读者留言,是否可以支持RT-Thread,索性放假也无聊,所以就整了两个软件包:event loop+thread_manager


二. event loop软件包

一个是event loop软件包(实际上这个18年的时候在 好吧!再包一层,讲讲思想 讲过理论了,只是一直没有做成软件包,总想为RT-Thread做点什么,但是一直没有pr过东西,惭愧,终于算是圆了梦):

这个软件包的主要主要就是当你延时做什么事情时,不需要开关定时器,帮你包好了。只有三个接口(注意入参是指针, 可以将指针强转数值使用):

#define EVT_LOOP_PUSH(pfunc, pargs, delay)  //延时delay执行pfunc(pargs)

源码: https://github.com/Bluetooth-BLE/event\_loop

event_loop/

readme.md有详细介绍


三. thread_manager软件包

https://github.com/Bluetooth-BLE/thread\_manager

thread_manager/

这个软件包主要完成以下工作:

  • 任务启动:协调多个应用线程顺序启动,不受任务优先级影响,避免任务之间依赖出现的消息无效或其他异常情况;所有任务初始化完毕后,会有一个统一的system-ready事件广播,然后退出启动协调;

  • 任务退出:顺序退出,例如可预知的关机,每个任务可能在关机前都要做一些本任务需要收尾的工作,例如重要信息存储等,这样就不需要将关机事件在某个地方调用所有任务提供的api执行一遍,自己的事情自己做;

  • 消息订阅和发布分发:这个就是上篇文章里面讲的内容了:Thread msg Topic-pub/sub;

  • 延时事件:这个里面就用到了上面的event loop了。

每个thread都是一样的,所以也写了py脚本,直接用脚本生成,开发者只需要关注自己的栈+优先级+事件+消息payload;


四. 使用演示

直接使用thread_manager软件包,这个会打开event_loop软件包

RT-Thread online packages

这样会打开event loop

RT-Thread online packages

我依然使用的是我的曹孟德52840开发板

  • menuconfig配置

  • 更新软件包 pkgs --update

  • 编译

  • 测试

  • msh命令

msh >help
  • evt_loop_test    - run event_loop delayed demo

    主要延时执行两个函数

  • tmsg_send - send zero-payload event to task mailbox

    向某个任务id 发送消息id, 例如:tmsg_send 1 1 往任务id1发送msg 1

  • tmsg_send_de - send delayed zero-payload event via event_loop

    向某个任务id 延时发送消息id, 例如:tmsg_send_de 1 1 5000 往任务id1延时5s后发送msg 1

  • tmsg_cal - cancel pending delayed event for task/msg

    取消某个任务id的某个事件,例如:tmsg_cal 1 1 取消evt loop事件数组中往任务id1发送msg 1


evt_loop_test 3 5 test1执行3次, test2执行5次

tmsg_send 2 1:立刻向thread_test2线程发送hello消息,因为thread_test1和thread_test都监听了thread_test2的hello消息,可以看到下面有相关log打印。

tmsg_send_de 2 1 3000 :延时3s后thread_test2线程发送hello消息

整体测试图片:

添加小师弟微信↓,拉你进RT-Thread技术交流群,找到组织!

点击“阅读原文”

相关推荐
评论区

登录后即可参与讨论

立即登录