【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

很多时候,我们把ucgui、lwip、uip、sqlite、lua这些第三方软件称之为中间件,虽然他们实际使用上并不困难。和普通的libjpeg、libpng不同,这些中间件因为涉及到状态机切换、流程阻塞,所以在设计上要稍微注意一下。对于我个人而言,对于中间件的接口我是这么设计的,

1、中间件可以是单独的一个thread,比如说可以这么做

middle_ware_init()
middle_ware_run()

2、中间件最好是一个事件驱动型的框架,这项写起来比较方便和简洁,比如像这样

static void get_event() {}static void process_event() {}void middle_ware_run() {while(1) {get_event();process_event();}
}

3、middle ware提供给外部的接口,最好是基于event的阻塞接口,比如这样

void middle_ware_api() {struct event e;struct semaphore s;int type;int data;e.type = type;e.data = data;e.s = s;send_event(&e);wait_for_semaphore(e.s);
}

4、如果middle ware提供的数据可以当场获取,那么也可以直接访问,但是注意mutex保护,

void middle_ware_get() {mutex_get();/*  add your own code here */mutex_release();
}

5、因为middle ware也需要调用lowlevel的接口,如果是非阻塞接口,那么直接调用。如果是阻塞接口,最好另启线程,

void middle_ware_lowlevel(){while(1) {get_lowlevel_data();set_data_to_main_thread();}
}

6、中间件多采用状态机处理,方便简单

void process_event() {switch(state) {case state1:// add your codebreak;case state2:// add your codebreak;case state3:// add your codebreak;default:break;}
}

7、如果需要定时器,直接使用os提供的接口即可,比如

void timer_callback() {get_register_data();send_data_to_main_thread();
}

当然编写中间件的方法多种多样,大家可以根据实际场景灵活应用。关键是要做好对外的接口输出、对外的接口输入以及中间件本身的状态切换,相信做好这几点代码质量差不到哪去。

随想录(中间件接口的定义方法)相关推荐

  1. java批量删除接口怎么定义_教你在Java接口中定义方法

    基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. 假设我们现在有一个接口:TimeClie ...

  2. java接口方法默认权限_java 接口内定义方法的权限是什么?

    画数据流图和用例图 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下: 1.每门课程都有3到6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门 ...

  3. java中的接口中的方法

    题目如下:(多选题)请选择以下接口定义正确的方法()A:public static void main (String[] args);B:private void test();C:public v ...

  4. java中的接口的定义以及实现关系

    一.什么是接口? - 硬件接口:设备之间的连接方式 - 软件接口:程序代码,特殊的类,表示一种规范,是具有N个方法的特征集合. java中的接口: 专家说的多个抽象类的抽象就是接口. interfac ...

  5. C#类、接口、虚方法和抽象方法

    C#类.接口.虚方法和抽象方法 虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项.抽象方法没有提供实现部分,抽象方法是一种强制派 ...

  6. 【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )

    文章目录 总结 一.接口中定义 call() 方法 二.类中定义 call() 方法 三.完整代码示例 总结 在 实例对象后使用 " () " 括号符号 , 表示调用该实例对象的 ...

  7. java private 接口_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  8. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  9. 接口(定义,使用方法)

    /* 接口: 1.定义:当一个抽象类,里面全是抽象方法时,叫做接口 2.定义方式:interface 3.成员变量定义方式:public static final 数据类型 变量名 = 值:----- ...

最新文章

  1. Android中menu详解(转)
  2. (转)API SOCKET基础(一) TCP建立连接并通信
  3. c语言表达式10 3的结果是,C语言程序设计--第3讲运算符与表达式.ppt
  4. flask request传参
  5. 如何在html中选择wrap,jQuery - .wrap() 使用HTML包裹选取的元素
  6. rrpp协议如何修改_RRPP协议做为高级网络工程师不能不懂的技术带你快速学习
  7. ble主服务的uuid 是一致的吗_nrf52832 开发之添加DFU服务
  8. 解决phpcms V9 推荐位无法排序
  9. python汉字排序_Python中文排序(转载)
  10. 毕向东Java笔记(全部)
  11. 惠普硬盘测试工具_短DST未通过,详细教您惠普笔记本如何检测硬盘
  12. 压力测试工具-ab工具
  13. 国际短信有哪些用途?
  14. 一、计算机程序申请专利注意事项解读
  15. python实现闰年判断
  16. 有skycc营销软件,我的网站PR飙升
  17. 一些计时软件,生产力工具
  18. mysql高级部分p228的sql
  19. 用Python进行批量文件整理
  20. 在8051上的人工智能

热门文章

  1. JS 相等判断 / 类型判断
  2. highcharts.js两种数据绑定方式和异步加载数据的使用
  3. [net]ftp ssh http telnet https服务及端口
  4. 【数据分析】Superset 之三 Docker操作管理
  5. HUD 2544 最短路 迪杰斯特拉算法
  6. 【转】Linux 移动或重命名文件/目录-mv 的10个实用例子
  7. HDU_oj_2046 骨牌铺方格
  8. Let's go home
  9. SilverLight行为小示例
  10. DeadXSpace项目进度