嵌入式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框架正式发布了 的相关文章

  • Java与Scala的转换

    一 java Map 转为 scala collection immutable Map public static
  • 遥感+python 1.4 RPC校正

    遥感 python 1 4 RPC校正 目录 遥感 python 1 4 RPC校正 一 正射校正 二 RPC校正原理 三 代码实现 本章节 笔者主要讲述RPC校正的概念 原理 即代码实现 一 正射校正 正射校正一般是通过在像片上选取一些地
  • doris & StarRocks 错题本

    一 spark streaming load写入失败 Reason column count mismatch expect 25 real 1 src line demo masking 1 2018 02 17 1 B35C300672
  • Golang RPC性能测试

    最近刚好要使用Golang的RPC 因此对Golang标准库的RPC进行了一下测试 看看其性能到底如何 RPC服务端和客户端的实现完全使用RPC的net rpc标准库 没有经过特殊的优化 主要针对下面三个场景进行测试 测试之前需要先说明一下
  • 事件驱动型状态机EFSM介绍及C语言实现

    一 什么是状态机 有限状态机 英语 Finite state machine FSM 又称有限状态自动机 简称状态机 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型 有限状态机是一种用来进行对象行为建模的工具 其作用主要是描
  • rpc、gRPC快速入门,python调用,protobuf协议

    什么是rpc grpc又是什么 什么是RPC 远程过程调用协议RPC Remote Procedure Call Protocol RPC是指远程过程调用 也就是说两台服务器A B 一个应用部署在A服务器上 想要调用B服务器上应用提供的函数
  • 至多一次和恰好一次

    我正在研究分布式系统 当涉及到 RPC 部分时 我听说过这两种语义 最多一次和恰好一次 据我所知 当我们不希望重复执行时 最多一次用于数据库实例 第一个问题 这是如何实现的 服务器如何知道它不应该再次执行该请求 它可能是重复的 但也可能是合
  • GWT (2.4.0) + XSRF

    我一直在尝试让 XSRF 在网络应用程序上运行 但没有成功 我正在研究一个典型的登录实现 我正在关注谷歌的代码 https developers google com web toolkit doc latest DevGuideSecur
  • iPhone + Drupal + JSON RPC 服务器问题

    我不知道如何使用 Obj C 发布 JSON RPC 请求 谁能帮我 到目前为止我有 responseData NSMutableData data retain NSMutableURLRequest request NSMutableU
  • 为什么恰好一次语义不可行?

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

    用例 一个 Java 进程与一个或两个 C 进程 始终在同一台机器上 需要双向 二进制 非持久通信 其中一个 C 进程负责实例化其他进程 我环顾四周 看到了 XML JSON RPC Protocol Buffers Thrift zero
  • 使用 .NET 获得快速 RPC 的最简单方法?

    在 NET 中获取 RPC 最简单的方法是什么 我看到有 NET Remoting和WCF 根据维基百科 WCF是 NET Remoting的后继者 到目前为止 我只尝试了远程处理的东西 这似乎非常简单 到目前为止 我也没有遇到任何应用程序
  • ipc:// 上的 ZeroMQ REQ/REP 和并发性

    我使用 REQ REP 0MQ ipc 套接字实现了一个 JSON RPC 服务器 我遇到了奇怪的行为 我怀疑这是由于 ipc 底层 unix 套接字不是真正的套接字 而是一个事实一根管子 根据文档 必须强制执行严格的 zmq send z
  • 序列化和封送处理有什么区别?

    我知道就几种分布式技术 例如 RPC 而言 使用了术语 编组 但不明白它与序列化有何不同 它们不是都将对象转换为一系列位吗 Related 什么是序列化 https stackoverflow com questions 633402 wh
  • 我应该使用什么 RPC 模块在 Python 中实现 RCP,并且以后能够更改连接方法?

    我确实必须实现一些从 Python 到 Python 的 RPC 但出于安全原因 连接方法非常有限 目前看来我可以使用以下方式进行连接SSH并在远程系统上运行单个 python 脚本 将来 当我们可能必须使用其他东西进行连接时 这可能会发生
  • 异步双向 RPC

    我正在寻找使用 TCP 的 Java 或 Python 首选 Python 的 RPC 库 它应该支持 异步 双向 RPC 某种事件循环 带有回调或类似 有什么建议吗 我看过像 bjsonrpc 这样的东西 这似乎是正确的东西 但是服务器似
  • PHP 的同步 AMQP

    PHP 能否像 RPC 服务一样对待 AMQP 发送消息并阻塞直到返回回复 是否有任何好的示例 是否有任何库以易于使用的方式包装此类功能 我希望拥有代理消息传递系统的灵活性 但避免 Web 层需要了解其异步性质 当然 绝对 看看 RPC 风
  • 如何在Python中使用gRPC处理自定义异常?

    我需要实现自定义异常来使用 Python 处理 gRPC 请求错误 对于 HTTP 请求 它很简单 当出现错误代码等时 请求库可以很好地捕获它 我正在寻找 gRPC 的类似方法来执行以下操作 try send gRPC request ex
  • 远程过程调用认证

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

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

随机推荐

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