嵌入式ERPC框架正式发布了

2023-11-13

一、ERPC开发的原由

随着科技日新月异的快速发展,电子产品的功能越来越多,业务也越来越复杂。以前靠单打独斗完成电子产品的研发的时代已经慢慢远去,更多的是靠一个团队协作共同努力才能完成。这就为电子产品的设计和研发带来了新的问题:

  • 团队的协作,有时是跨部门,甚至是跨地域的,这为沟通带来了很大的成本;
  • 团队的开发,必然引入团队的管理,管理的成本也随团队的扩展而增加;
  • 软件功能的独立性,导致不同功能采用不同的方法实现,接口也并不统一,开发任何新功能都需要研发人员投入大量精力去学习和熟悉,学习成本较高;
  • 由于功能的复杂性,而开发周期一般较短,导致缺乏设计,很多产品的研发投入都是一锤子买卖,很难有一次研发投入,多个产品产出的情况,研发成本较高;
  • 由于产品功能复杂,缺乏设计,产线生产成本,后续产品技术服务成本等后即成本不断上升,有甚者公司的研发、生产、技服的成本投入比达到1:2:3;

为了解决如上所有问题,我开发了这套ERPC框架:

  • 它统一了应用程序开发方法,将编码拆分为功能实现和接口开发,为应用提供了统一标准化的接口方法,从而降低应用与服务开发者之间的沟通成本;
  • 它将开发过程拆分成研发与部署两个阶段,这样更加便于管理优化,这也满足公司部门的划分和职能分工,更利于公司运作;
  • 它简化了应用开发难度,将模块、进程、线程等过程全部吸收,应用只需要关注业务数据的处理实现和接口的编写,从而降低出错的概率;
  • 它自带的监控程序和日志方法,可实时监控程序异常和任何业务的异常,非常便于问题的定位和解决,而不是以前的规避问题;

ERPC的好处远飞如此,我认为它最核心是解决人员依赖的问题,让研发人员将精力放在真正的功能和接口实现,以及功能和性能的优化上面,这无论是对于研发人员,还是公司都是一个逐渐改善全局的、滚雪球式的快速增长方法。

在ERPC中,我还有一个梦想(不认同勿喷啊):希望ERPC能够让Linux系统重新拿回中高端电子产品的市场,实现稳定的、底成本的、可持续发展的方案,从而摆脱安卓的笨重、高成本、受google(美国)限制的状态

我也非常期待华为的鸿蒙系统尽快发布,涨中国之气,灭美国之风!

二、ERPC的特性

ERPC以简化Linux应用设计为目标,当前具备如下特点:

  1. 整个框架采用纯C语言实现,可很好的应用于嵌入式Linux平台中;
  2. 整个框架基于POSIX标准变现,可实现跨硬件平台的多场景、多行业的应用;
  3. 底层采用TCP长链接方式实现,连接稳定,通信效率高;
  4. 通信采用json-rpc协议,具有很好的可视性、可扩展性,并能无缝的与云平台对接;
  5. 通信数据可加密,可使用标准的SSL/TSL加密,也可自定义加密算法,满足通用和个性化数据安全的需求;
  6. 框架实现了远程调用方法,将跨线程、跨进程,甚至跨CPU、跨云服务器的调用过程简化成本地调用过程;
  7. 框架实现了观察者模式,可实现硬件或模块的状态监控、消息通知,配合远程调用方法,可实现当前市面所有的功能需求;
  8. 框架内实现了一个标准的周期任务,周期单位为S,可应用于应用的周期检测任务,用户可自定义是否启用,自定义周期任务类型;
  9. 框架内实现了事件驱动型有限状态机(EFSM),可实现平行、树形、层次等多重状态机业务需求,并且还可独立于框架外使用;
  10. 框架内实现了多远定时器,可同时实现上万个定时任务,且定时时间精度可达纳秒级别,还可定义多重定时器,并且可独立于框架外使用;
  11. 框架内集成了完备的日志管理系统,可实现日志多种输出、自定义等级输出、日志自动转存,可限定日志大小等功能,非常适合嵌入式设备使用;
  12. 框架本身集成了异常监控功能,结合日志系统,可将应用程序的各种异常实时记录,非常便于应用BUG的记录、跟踪、定位和解决;
  13. 框架自身具备配置文件监控功能,当配置文件有修改时,可自动重载配置文件,从而实现动态部署、动态修改日志输出方法;
  14. 框架本身提供了相关的一类工具集接口,可用于获取ERPC版本、运行状态、当前进程名、cJSON复制、字符串比较等等功能,并且还在不断扩展;
  15. 整个框架只需要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);
  • 想快速上手,熟悉其使用方法,详见:快速入门
  • 有关框架及接口的详细介绍,详见:使用手册
  • 有关配置文件的详细介绍,详见:配置文件;

除以上框架本身的功能之外,框架还集成了如下模块,同时具备集成模块的全部功能:

  1. 集成cJSON库,ERPC内部也使用该库处理JSON数据,详见cJSON
  2. 集成libuv事件库,可用于实现高性能事件驱动的应用程序;
  3. 集成libevent通信库,可用于实现高性能事件驱动的应用程序;
  4. 集成Websocket和MQTT库,用户可基于Websocket通道上使用MQTT协议开发云加端的应用;
  5. 集成libcurl库,可支持http的上传于下载,配合一起使用可实现电子设备的OTA全量、增量、灰度等升级方法;

更多详情,可异步到ERPC主页了解,里面的文档将持续更新,也欢迎大家贡献自己的文采,或者使用ERPC编写例程,贡献您使用过程中发现的问题,或者直接贡献您所编写的例程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式ERPC框架正式发布了 的相关文章

  • GRPC详解

    什么是GRPC 官网 gRPC gRPC 是一个现代开源高性能远程过程调用 RPC 框架 可以在任何环境中运行 它可以有效地连接数据中心内和跨数据中心的服务 并提供对负载平衡 跟踪 健康检查和身份验证的可插入支持 它还适用于分布式计算的最后
  • doris & StarRocks 错题本

    一 spark streaming load写入失败 Reason column count mismatch expect 25 real 1 src line demo masking 1 2018 02 17 1 B35C300672
  • 深入浅出 RPC - 深入篇

    深入篇 我们主要围绕 RPC 的功能目标和实现考量去展开 一个基本的 RPC 框架应该提供什么功能 满足什么要求以及如何去实现它 RPC 功能目标 RPC 的主要功能目标是让构建分布式计算 应用 更容易 在提供强大的远程调用能力时不损失本地
  • Thrift快速入门

    文章目录 Thrift的安装 windows下安装 Linux下安装 Thrift的使用 编写IDL文件 命名空间 namespace 基本数据类型 类型定义 typedef 结构体类型 struct 枚举类型 enum 异常类型 exce
  • 如何计算在 RSK 上进行交易时使用的 Gas 价格?

    我需要知道如何为 RSK 网络上的交易设置适当的 Gas 价格 我熟悉eth gasPrice来自以太坊的方法 curl https public node testnet rsk co X POST H Content Type appl
  • Wordpress XML-RPC 和特色图像

    我目前正在为客户端开发一个插件 该插件每小时获取一个 xml feed 并将其发布到 wordpress 中 但我在将特色图像发送到帖子时遇到问题 我可以很好地发布到 WordPress 但我发布特色图像的所有尝试都失败了
  • go-zero开发入门之网关往rpc服务传递数据2

    go zero 的网关服务实际是个 go zero 的 API 服务 也就是一个 http 服务 或者说 rest 服务 http 转 grpc 使用了开源的 grpcurl 库 当网关需要往 rpc 服务传递额外的数据 比如鉴权数据的时候
  • Python远程过程调用(不带远程部分)

    我有一个不以 root 身份运行的 Python 服务器 它面向我正在开发的应用程序 然而 有一些应用程序功能需要访问 RAW 套接字 这意味着 root 权限 显然 我不想以 root 身份运行主服务器 因此我的解决方案是创建一个守护进程
  • 使用 ZeroMQ 的 C++ RPC 框架

    我需要使用 ZeroMQ 推拉套接字模式用 C 编写客户端 服务器应用程序 客户端必须对服务器接口中指定的函数进行 RPC 调用 我想知道是否有一个开源且商业可用的库 框架主要用于此目的 主要是 C 我做了一些谷歌搜索 似乎有一些用 pyt
  • 为什么恰好一次语义不可行?

    在 Erlang 希望最好的 RPC 语义中 SUN RPC 具有至少一次 Java RMI 具有最多一次 但没有人拥有恰好一次语义 为什么拥有一次语义似乎不可行 例如 如果客户端不断重新发送唯一标记的请求 直到收到答复 并且服务器会跟踪所
  • 哪种 rpc/消息传递框架最适合这种情况?

    用例 一个 Java 进程与一个或两个 C 进程 始终在同一台机器上 需要双向 二进制 非持久通信 其中一个 C 进程负责实例化其他进程 我环顾四周 看到了 XML JSON RPC Protocol Buffers Thrift zero
  • 通过管道传输的 Thrift IPC (Windows)

    我一直在关注 Thrift 对 Windows 的支持 并且由于许多贡献者的努力 VS 开发已经取得了长足的进步 有针对编译器和 C 库的 VS 2010 项目 我已经确认它们在 0 8 中运行良好 http thrift apache o
  • java.lang.IllegalArgumentException:无法实例化工厂类:org.springframework.boot.env.EnvironmentPostProcessor

    我是 Spring 新手 作为起点遵循教程 Spring IO 教程 https spring io guides tutorials bookmarks 我已经使用 spring 初始化程序下载了项目Web JPA H2 Lombok并使
  • 协议缓冲区 Java RPC 堆栈

    根据this http en wikipedia org wiki Protocol Buffers维基百科条目 Protocol Buffers 与 Facebook 的 Thrift 协议非常相似 只是它不包含用于定义服务的具体 RPC
  • 如何在 Java 中对 Hive 进行异步调用?

    我想以异步方式在服务器上执行 Hive 查询 Hive 查询可能需要很长时间才能完成 因此我不想阻止调用 我目前正在使用 Thirft 进行阻塞调用 在 client execute 上阻塞 但我还没有看到如何进行非阻塞调用的示例 这是阻止
  • 远程过程调用认证

    我正在使用远程过程调用 RPC 在本地计算机上通信数据 我的要求是使用 RPC 在两个处理之间通信数据 但服务器应该通过某种方式对客户端进行身份验证 我遇到了 RpcBindingSetAuthInfo 它设置身份验证和授权信息 第四个参数
  • 同步 gRPC 客户端同步/异步服务器

    我只是好奇 异步 gRPC 服务器是否支持多个客户端的连接 如果不是 异步的可以吗 以及异步服务器 同步客户端的组合 甚至可能吗 是的 同步 gRPC 支持开箱即用的多个连接客户端 我亲自测试了多达 2000 个同时连接的客户端到一个用 G
  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List
  • Protobuf RPC 在 Hadoop 2.2.0 单节点服务器上不可用?

    我正在尝试在按照本教程安装的本地单节点集群上运行 hadoop 2 2 0 mapreduce 作业 http codesfusion blogspot co at 2013 10 setup hadoop 2x 220 on ubuntu
  • Python 和 C# 之间的 IPC

    我想在 Windows 中的 Python 和 C 应用程序之间传递数据 我希望通道是双向的 事实上 我想将一个包含我用 C SharpPcap 捕获的网络数据包数据的结构传递给 Python 应用程序 然后将修改后的数据包发送回 C 程序

随机推荐

  • unity 控制物体旋转的角度

    using System Collections using System Collections Generic using UnityEngine public class Main MonoBehaviour public float
  • 为“广东数字工商”保驾护航——Apusic应用服务器在广东省工商局的应用

    互联网经济时代 信息技术的变革改变了人们传统的工作 学习 生活和娱乐方式 同时对工商部门的信息化建设提出了挑战 如何利用信息技术改进工商工作 形成新的工作方式 已成为工商系统所关心的问题 数字工商 的提出 便是其中的佐证之一 数字工商 是指
  • 从ping和ping6说起

    1 Windows中的ping ping6 发送ICMP ECHO REQUEST到网络主机 ping6是ICMPv6版的ping实现 t 不停地ping指定的主机 要查看统计信息并继续ping 按Ctl Break 要停止按Ctl C a
  • 垂直广告是什么意思_广告新趋势——内容为王 垂直细分

    广告的变革 曾经的广告投放四大媒介 电视 报纸 杂志 广播 在如今看来早已式微 除了曝光率特别高的综艺节目 影视剧 电影等大屏幕广告以外 其余资源的广告部门或者传统广告代理公司都在纷纷转型 媒体结构变革也意味着广告形式的变革 作为经历传统广
  • 如何配置Git工具

    安装Git 首先确保你已经在计算机上安装了Git 你可以从Git官方网站Git Downloads git scm com 配置用户信息 在命令行终端中 使用下面的命令来配置你的用户名和电子邮件地址 git config global us
  • 如何快速找到paper 提到算法的源码(计算机领域)??

    1 如果该算法有开源的话 首先推荐网站 https paperswithcode com 比较高效 不需要VPN 2 如果算法比较新的话 最好去作者的主页 大佬 去逛一下 3 使用Google 搜索 paper 名字 source code
  • Spring Boot注入Servlet、Filter、Listener 注解方式和使用RegistrationBean二种方式 加源码分析

    目录 Spring Boot 注入Servlet Filter Listener 官方文档 基本介绍 应用实例1 使用注解方式注入 创建 Servlet java 修改Application java 加入 ServletComponent
  • MacBook M1 安装配置conda与python3.9注意事项

    macOS 版本 1 python 3 9 才支持m1 所以需要下载3 9之上的版本 https www python org downloads macos 2 如果需要安装Anaconda 可省略单独安装python anaconda自
  • 苹果CMS V10 后台一键采集豆瓣API获取资料(最新版)

    进入苹果CMS根目录后 找到如下文件 application admin view vod info html 大约在718行左右 照图修改两处位置即可 同时列出关键代码如下 修改后一键采集入库资料示例 相关AJAX请求核心代码如下 aja
  • 元宇宙(四)人机接口

    1 VR AR MR 现在的VR AR MR一定程度上试图解决把虚拟世界 展示 给我们的问题 先不说效果如何 这个接口的也只能提供视觉和听觉信息 虽然视觉和听觉为我们提供了大部分信息量 但其它感知能力 触觉 嗅觉 味觉也虚拟世界能让我们有真
  • 华为实习生2022机考、技术面及主管面试

    第一题 第一种情况 a坐标比b坐标小 a的坐标更新为b 1 第二种情况 a坐标比b坐标大 直接加1 对于B来说也是一样 按照这个原则来更新坐标 最后返回即可 第二题 动态规划求地图障碍物的题 不同路径https leetcode cn pr
  • Linux 网络管理

    网络管理 1 网卡命名方式 1 1 网卡名称的组成格式 前两个字母标识固件 以太网卡以 en 开头 无线网卡以 wl 开头 后一个字母标识设备结构 o 主板上集成的设备的设备索引号 s 扩展槽的索引号 p s 基于拓扑的命名 如enp2s1
  • 【使用 BERT 的问答系统】第 1 章 : 自然语言处理简介

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 类模板的使用

    模板类和静态成员 include
  • GUID字符串做主键与Number类型做主键 的执行效率比较

    使用GUID字符串做主键与Number类型做主键 在数据量不太多的时候 如 少于2 万条 查询 插入效率差别几乎可以忽略不计 但在磁盘空间占用方面差别比较明显 对主键的检索完全走的index 检索的次数和采用number的主键理论应该一样
  • S7-200 PLC的CPU模块介绍

    更多关于西门子S7 200PLC内容查看 西门子200系列PLC学习课程大纲 课程筹备中 1 什么是西门子200PLC的CPU 如下图1 1所示 S7 200 PLC CUP是将一个微处理器 一个集成电源 一定的数字量或模拟量I O 一定的
  • 一、markdown 常见公式

    文章目录 公式 字符 希腊字符 三角 对数 指数函数 向量 矩阵 省略号 空格 运算符 累加累积 开方 极限 导数 微积分 括号 绝对值 范数 分段 逻辑运算符 集合运算符 箭头 上下标符 公式 字符 希腊字符 字符 Markdown 字符
  • CSP-J (NOIP普及组) 历年复赛真题考察内容(1998~2021)

    TZOJ题目分类 本博客原文地址 https www cnblogs com BobHuang p 14522022 html 其中 1 较简单题26题左右 2 动态规划17题 其中9题较好做 3 模拟 阅读题目将问题抽象建模写出程序 为1
  • 华为机考模拟题

    一 字符串平均重量 we have defined the necessary header files here for this problem If additional header files are needed in your
  • 嵌入式ERPC框架正式发布了

    一 ERPC开发的原由 随着科技日新月异的快速发展 电子产品的功能越来越多 业务也越来越复杂 以前靠单打独斗完成电子产品的研发的时代已经慢慢远去 更多的是靠一个团队协作共同努力才能完成 这就为电子产品的设计和研发带来了新的问题 团队的协作