嵌入式ERPC框架正式发布了
一、ERPC开发的原由
随着科技日新月异的快速发展,电子产品的功能越来越多,业务也越来越复杂。以前靠单打独斗完成电子产品的研发的时代已经慢慢远去,更多的是靠一个团队协作共同努力才能完成。这就为电子产品的设计和研发带来了新的问题:
- 团队的协作,有时是跨部门,甚至是跨地域的,这为沟通带来了很大的成本;
- 团队的开发,必然引入团队的管理,管理的成本也随团队的扩展而增加;
- 软件功能的独立性,导致不同功能采用不同的方法实现,接口也并不统一,开发任何新功能都需要研发人员投入大量精力去学习和熟悉,学习成本较高;
- 由于功能的复杂性,而开发周期一般较短,导致缺乏设计,很多产品的研发投入都是一锤子买卖,很难有一次研发投入,多个产品产出的情况,研发成本较高;
- 由于产品功能复杂,缺乏设计,产线生产成本,后续产品技术服务成本等后即成本不断上升,有甚者公司的研发、生产、技服的成本投入比达到1:2:3;
为了解决如上所有问题,我开发了这套ERPC框架:
- 它统一了应用程序开发方法,将编码拆分为功能实现和接口开发,为应用提供了统一标准化的接口方法,从而降低应用与服务开发者之间的沟通成本;
- 它将开发过程拆分成研发与部署两个阶段,这样更加便于管理优化,这也满足公司部门的划分和职能分工,更利于公司运作;
- 它简化了应用开发难度,将模块、进程、线程等过程全部吸收,应用只需要关注业务数据的处理实现和接口的编写,从而降低出错的概率;
- 它自带的监控程序和日志方法,可实时监控程序异常和任何业务的异常,非常便于问题的定位和解决,而不是以前的规避问题;
ERPC的好处远飞如此,我认为它最核心是解决人员依赖的问题,让研发人员将精力放在真正的功能和接口实现,以及功能和性能的优化上面,这无论是对于研发人员,还是公司都是一个逐渐改善全局的、滚雪球式的快速增长方法。
在ERPC中,我还有一个梦想(不认同勿喷啊):希望ERPC能够让Linux系统重新拿回中高端电子产品的市场,实现稳定的、底成本的、可持续发展的方案,从而摆脱安卓的笨重、高成本、受google(美国)限制的状态!
我也非常期待华为的鸿蒙系统尽快发布,涨中国之气,灭美国之风!
二、ERPC的特性
ERPC以简化Linux应用设计为目标,当前具备如下特点:
- 整个框架采用纯C语言实现,可很好的应用于嵌入式Linux平台中;
- 整个框架基于POSIX标准变现,可实现跨硬件平台的多场景、多行业的应用;
- 底层采用TCP长链接方式实现,连接稳定,通信效率高;
- 通信采用json-rpc协议,具有很好的可视性、可扩展性,并能无缝的与云平台对接;
- 通信数据可加密,可使用标准的SSL/TSL加密,也可自定义加密算法,满足通用和个性化数据安全的需求;
- 框架实现了远程调用方法,将跨线程、跨进程,甚至跨CPU、跨云服务器的调用过程简化成本地调用过程;
- 框架实现了观察者模式,可实现硬件或模块的状态监控、消息通知,配合远程调用方法,可实现当前市面所有的功能需求;
- 框架内实现了一个标准的周期任务,周期单位为S,可应用于应用的周期检测任务,用户可自定义是否启用,自定义周期任务类型;
- 框架内实现了事件驱动型有限状态机(EFSM),可实现平行、树形、层次等多重状态机业务需求,并且还可独立于框架外使用;
- 框架内实现了多远定时器,可同时实现上万个定时任务,且定时时间精度可达纳秒级别,还可定义多重定时器,并且可独立于框架外使用;
- 框架内集成了完备的日志管理系统,可实现日志多种输出、自定义等级输出、日志自动转存,可限定日志大小等功能,非常适合嵌入式设备使用;
- 框架本身集成了异常监控功能,结合日志系统,可将应用程序的各种异常实时记录,非常便于应用BUG的记录、跟踪、定位和解决;
- 框架自身具备配置文件监控功能,当配置文件有修改时,可自动重载配置文件,从而实现动态部署、动态修改日志输出方法;
- 框架本身提供了相关的一类工具集接口,可用于获取ERPC版本、运行状态、当前进程名、cJSON复制、字符串比较等等功能,并且还在不断扩展;
- 整个框架只需要1个环境变量:ERPC_PROFILE_PATH;和2个配置文件:部署配置文件、日志配置文件;所有框架接口仅仅只有11个接口:
/* 框架控制接口:3个 */
typedef enum {ERPC_LOOP_EXIT,ERPC_LOOP_DEFAULT,ERPC_LOOP_ONCE,ERPC_LOOP_NOWAIT
}erpc_loop_t;extern int erpc_framework_init(char *process);
extern int erpc_framework_loop(erpc_loop_t way);
extern void erpc_framework_break(void);/* 远程调用接口:3个 */
typedef cJSON *(*erpc_service_callback_t)(cJSON *params);extern int erpc_service_register(const char *module, const char *func, erpc_service_callback_t pointer);
extern int erpc_service_unregister(const char *module, const char *service);
extern int erpc_service_proxy_call(const char *module, const char *service, cJSON *send, cJSON **recv, struct timeval *tv);/* 观察者模式接口:5个 */
typedef void (*erpc_observer_callback_t)(cJSON *params);extern int erpc_observed_create(const char *module, const char *observed);
extern int erpc_observed_destroy(const char *module, const char *observed);
extern int erpc_observer_invoke(const char *module, const char *observed, cJSON *params);
extern int erpc_observer_register(const char *module, const char *observed, erpc_observer_callback_t action, struct timeval *tv);
extern int erpc_observer_unregister(const char *module, const char *observed, erpc_observer_callback_t action, struct timeval *tv);
- 想快速上手,熟悉其使用方法,详见:快速入门;
- 有关框架及接口的详细介绍,详见:使用手册;
- 有关配置文件的详细介绍,详见:配置文件;
除以上框架本身的功能之外,框架还集成了如下模块,同时具备集成模块的全部功能:
- 集成cJSON库,ERPC内部也使用该库处理JSON数据,详见cJSON;
- 集成libuv事件库,可用于实现高性能事件驱动的应用程序;
- 集成libevent通信库,可用于实现高性能事件驱动的应用程序;
- 集成Websocket和MQTT库,用户可基于Websocket通道上使用MQTT协议开发云加端的应用;
- 集成libcurl库,可支持http的上传于下载,配合一起使用可实现电子设备的OTA全量、增量、灰度等升级方法;
更多详情,可异步到ERPC主页了解,里面的文档将持续更新,也欢迎大家贡献自己的文采,或者使用ERPC编写例程,贡献您使用过程中发现的问题,或者直接贡献您所编写的例程。
嵌入式ERPC框架正式发布了相关推荐
- 《安富莱嵌入式周报》第284期:Matlab2022b发布,支持从 .NET 调用,耳机放大器,牛屎芯片替换,JSON可视化,开源的飞行软件和嵌入式系统框架
往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...
- 嵌入式linux驱动自动化测试,通用的嵌入式自动化测试框架 - 心心草的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
目前通用的嵌入式自动化测试框架,四层结构: 解释几个术语: 1.测试包(test suite):只要点一个按钮就可以完成一次测试必须用到的东西. 2.数据驱动(Data driven):测试数据与测试 ...
- 用 Shell 快速写一个嵌入式测试框架
大家好,转发我朋友老吴的一篇文章,我们在做测试框架的时候用的是python,但是一些理论基础和用shell是一样的,在这里,语言并不是关键.希望对大家有帮助. 哈喽,我是老吴. 作为一个嵌入式底层码农 ...
- QT嵌入式之_QT介绍_安装_以及环境变量配置---QT嵌入式图形框架工作笔记001
WPS也是用qt开发的,用qt开发,主要是可以方便的移植到各种平台,以及嵌入式平台. 也可以用QT来开发,在STM32平台运行的程序. 对于网络编程来说,如果我们基于传统的套接字来开发,会很慢,麻烦, ...
- 嵌入式系统框架----硬件篇
1.系统框架图 对于一个嵌入式系统,最重要的当然是运算以及存储单元,基本的嵌入式系统可以简化成如下系统框架图: 图1.1 系统框架图 对于一个嵌入式系统,我们从常见的嵌入式ARM板进行分析:(从淘宝上 ...
- 新一代嵌入式UI框架 HaaS UI 使用JS在嵌入式开发炫酷前端
HaaS UI 是一款面向AIoT 领域的渐进式JS应用开发框架,以移动开发理念有效降低开发者研发AIoT带屏应用难度. 理念 移动开发模式,全面拥抱JavaScritp开源生态,且系统服务通过统一的 ...
- 【嵌入式UI框架:LVGL】使用NXP GUI Guider 拖拽式设计LVGL
LVGL是一个免费的开源嵌入式图形库,它提供创建嵌入式GUI所需的功能,具有易于使用的图形元素.精美的视觉效果和低内存占用.完整的图形框架包括供您在创建GUI时所用的各种小部件,并支持更高级的功能,例 ...
- 嵌入式 linux restful,嵌入式 RESTful 框架 express.java
express.java 是一个微型的 RESTful Web 框架.可用于嵌入应用内部,替代 JMX 用于跨语言通讯. 示例代码: WebServer.jettyServer().get(" ...
- 嵌入式知识框架之六-接口与总线(SPI\I2C\ USB\PCI\PCI-E\SD\SDIO\以太网接口)
接口是外设和主设备连接的方式/规则/协议的名称:XX总线是主设备连接某一类接口的名称 1.串口 串行数据接口标准(根据时间发展顺序介绍): RS-232:命名为EIA-232-E标准:通信距离短.速率 ...
- 猿团YTFramework UI框架正式发布 提高开发效率
由猿团开发的全新移动端UI框架:YTFramework UI(以下简称YTF UI)正式推出,即日起,开发者即可在YTF UI 页面进行框架的下载和使用. YTF UI是一款前端UI框架,以rem作为 ...
最新文章
- Codeforces Round #403 (Div. 1, based on Technocup 2017 Finals)
- 终极JPA查询和技巧列表–第2部分
- 斑马888t打印机墨盒安装_硒鼓?墨盒?究竟哪个才是打印机的“灵魂伴侣”?...
- javascript Date对象 之 获取时间
- 浅析MySQL中exists与in的使用
- 维纳(Wiener)滤波及Matlab代码
- split分割造成索引越界异常问题
- Scan2CAD中文版
- 苹果手机服务器暂时不可用,服务暂时不可用【操作途径】
- Go语法·类型选择(type switch)
- 淘宝优惠券(高省)那些套路,我已经看穿了
- mac系统升级后npm安装依赖报错gyp: No Xcode or CLT version detected
- RFQ 、IFB、RFP 、RFI的区别是什么
- 页面浏览pdf或图片iframe
- android实现拍照及获取照片上传至接口
- JS字符串转数组和数组转字符串
- Harbor docker login x509 certificate signed by unknown authority
- java 给word加水印,Java 实现在线给word 文档添加水印
- python内置模块re_13.python内置模块之re模块
- 铁电存储器这样应对充电桩存储痛点
热门文章
- PHP-FPM 配置文件详解
- Flink1.13.0 + Hudi 0.11.1 + Hive2.1.1 + presto0.273.3 + yanagishima 18.0
- Rancher Cluster is being upgraded
- 001-电脑操作规范-2019年03月.doc
- wav pcm格式文件解析
- 西数硬盘刷新固件_关于西数硬盘转速的fake news
- QoS mechanisms——LLQ(拥塞管理,低延时队列)
- 联盟营销最佳实践:提高联盟计划的投资回报率
- 采用commons-emai发送电子邮件
- 如何将一个向量投影到一个平面上_数学一轮复习32,平面向量数量积及其应用,三角形‘四心’模型...