From 41fe1449870d53aa4f8c58b46cb79dc5072d0b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chic=20Ye=28=E5=8F=B6=E6=99=BA=E5=BC=BA=29?= Date: Mon, 18 Oct 2021 09:35:25 +0800 Subject: [PATCH 1/3] =?UTF-8?q?Chic=EF=BC=9A=E4=BF=AE=E8=AE=A2=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Advanced_development/zh/HeliosSDK/Helios_SDK_01.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/Advanced_development/zh/HeliosSDK/Helios_SDK_01.md b/docs/Advanced_development/zh/HeliosSDK/Helios_SDK_01.md index 6e15d7b..0ba4e62 100644 --- a/docs/Advanced_development/zh/HeliosSDK/Helios_SDK_01.md +++ b/docs/Advanced_development/zh/HeliosSDK/Helios_SDK_01.md @@ -1,5 +1,13 @@  +## 文档历史 + +**修订记录** + +| **版本** | **日期** | **作者** | **变更表述** | +| -------- | ---------- | -------- | ------------ | +| 1.0 | 2021-09-30 | Chic | 初始版本 | + ## SDK概述 -- Gitee From de1c2e21d42e76156c2a639bda7e8a43cf4e63bb Mon Sep 17 00:00:00 2001 From: ChicYe <767904101@qq.com> Date: Fri, 22 Oct 2021 14:52:06 +0800 Subject: [PATCH 2/3] =?UTF-8?q?Chic=EF=BC=9A=E5=B8=A6=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Advanced_development/zh/HeliosSDK/Helios_SDK_03.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Advanced_development/zh/HeliosSDK/Helios_SDK_03.md b/docs/Advanced_development/zh/HeliosSDK/Helios_SDK_03.md index 10710c8..6e80df9 100644 --- a/docs/Advanced_development/zh/HeliosSDK/Helios_SDK_03.md +++ b/docs/Advanced_development/zh/HeliosSDK/Helios_SDK_03.md @@ -565,7 +565,7 @@ QPYcom上会得到如图所示的输出: * 新增了Python模块`modtest`的方法`modtest.func_withargs(str)`对应的C语言功能函数`modtest_func_withargs`。该示例中,使用`mp_obj_str_get_str(str)`获取用户从Python层输入的字符串参数。 * 使用宏`MP_DEFINE_CONST_FUN_OBJ_1`将增加一个function对象`modtest_obj_func_withargs`,即第38行代码。 - * 将新增的`modtest_obj_func_noargs`对象注册到modtest中,即第44行代码。 + * 将新增的`modtest_obj_func_withargs`对象注册到modtest中,即第44行代码。 ![image_1f5fmta2oakmps0115mb8r1q0s20.png-205.9kB](media\Helios_SDK_03_15.png) -- Gitee From 9c2daf893be0bf8f15a1bfcc1e732b85664c93de Mon Sep 17 00:00:00 2001 From: ChicYe <767904101@qq.com> Date: Tue, 26 Oct 2021 15:01:25 +0800 Subject: [PATCH 3/3] =?UTF-8?q?Chic=EF=BC=9A=E4=BF=AE=E6=AD=A3=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5=E8=AF=8D=E8=AF=AD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zh/HeliosService/HeliosService_2.md | 2 +- .../zh/HeliosService/HeliosService_3.md | 18 ++++++++++-------- .../HeliosService/media/HeliosService3_09.png | Bin 0 -> 21110 bytes 3 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 docs/Advanced_development/zh/HeliosService/media/HeliosService3_09.png diff --git a/docs/Advanced_development/zh/HeliosService/HeliosService_2.md b/docs/Advanced_development/zh/HeliosService/HeliosService_2.md index d58bbc6..98a3ebf 100644 --- a/docs/Advanced_development/zh/HeliosService/HeliosService_2.md +++ b/docs/Advanced_development/zh/HeliosService/HeliosService_2.md @@ -140,7 +140,7 @@ cloud服务config.json的内容 ### 三方组件 -主要有gpio, 中断, 定时器, 看门狗的封装, 还有安全组件, 断传的封装 +主要有gpio, 中断, 定时器, 看门狗的封装, 还有安全组件, 断点续传的组件(网络挂掉的时候暂存到本地,恢复之后重新发)等 diff --git a/docs/Advanced_development/zh/HeliosService/HeliosService_3.md b/docs/Advanced_development/zh/HeliosService/HeliosService_3.md index 4b7ad66..00e8d51 100644 --- a/docs/Advanced_development/zh/HeliosService/HeliosService_3.md +++ b/docs/Advanced_development/zh/HeliosService/HeliosService_3.md @@ -40,8 +40,8 @@ ![image-20210825134134474](media\HeliosService3_02.png) -1. 我们将写好的一些系统级别的提供了一些服务这些服务的发布者可能来自, 系统底层或者用户发布等 -2. 用户只需要订阅网络服务, 当网络信号不好或者, 断网服务会发起自动重连,并且通知所有订阅的者函数, 通知各种状态 +1. 我们将写好的一些针对系统级别的提供了一些服务, 这些服务的发布者可能来自可以接受系统底层的回调, 和用户主动发布给不同的订阅者获取等 +2. 例如用户只需要订阅网络服务, 当网络信号异常或者网络信号不好时或者网络断开重连时, 网络服务会发起自动重连, 并且通知所有订阅了网络服务函数, 通知当前网络的状态相关信息, 订阅者即可收到相关信息进行处理 3. 例如日志服务等是需要用户自己承当发布者的作用的 4. 发布者和订阅者是毫无关系的, 发布者无需关注订阅者, 只用把发布的数据给用户即可 5. 发布者发布到服务是, 服务再到订阅者是异步的, 我们同时也提供了同步的配置和支持 @@ -88,7 +88,7 @@ #### monitor设计原理 - 负责监控每个服务在每隔15秒给服务一个心跳, 如果, 服务, 收到这个心跳包, 会将这个发给的指定的接收人的, monitor接收到心跳包, 即认为, 服务运行正常 -- 可以设置, 当服务几次运行失败后执行什么样的行为, 比如说失败三次后执行, 重启设备或者 +- 可以设置, 当服务几次运行失败后执行什么样的行为, 例如:设置当服务心跳连续多次失败后, 重启设备或者停止该服务等行为, [目前默认底层做了处理, 用户无需设置] **示例** @@ -96,12 +96,14 @@ #### config设计原理 -为了方便配置文件的读取和设置等, 特此讲配置文件路径统一到config下面设置按照下列规则的config.json文件 +为了方便配置文件的读取和设置等, 将配置文件路径统一放到了config下面设置按照下列规则的config.json文件 -- app_config - - 用户层级的配置文件设置, 用户按照一定的文件夹格式, 我们将会自动读取里面的配置文件, 在组织进容器中, 以便用户进行获取, 相关接口参考, 请参考`API文档` -- system_config - - 系统级别的配置我们会按照系统级别的配置文件作为提供对外, 用于区分和读取, 因为后期我们有可能会提供相应的配置文件, 和相关服务 +![HeliosService3_09](media\HeliosService3_09.png) +- app_config [用户配置文件夹] + - 下面对应的是用户配置的配置文件, 如上图所示, app_config下面存在 + - 例如:cloud文件夹, cloud文件夹下面存在一个config.json, 我们将映射文件自动读取文件给cloud服务装载它config.json中的内容, 当cloud服务不存在, 我们将自动保存配置文件和服务的映射关系, 通过`guard_context.service_config`获取服务和映射的config.json的内容 +- system_config [系统配置文件夹] + - 配置系统级别的服务, 我们会按照系统级别的配置文件作为提供对外, 我们会读取系统服务的配置文件, 当服务存在时, 我们可以自动装配, 服务不存在是我们会保存相关映射关系, 用户可以通过`guard_context.system_config`获取映射内容 **示例:** diff --git a/docs/Advanced_development/zh/HeliosService/media/HeliosService3_09.png b/docs/Advanced_development/zh/HeliosService/media/HeliosService3_09.png new file mode 100644 index 0000000000000000000000000000000000000000..53ab8c0eff1948d947dc9015784069de95e865a6 GIT binary patch literal 21110 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%0DqBS7z_k{gdk6*N!t=ijZc1hg zyj(#~L7>d1991~qIzL!EN6~D4IkW8bsO+$d!XDFZs}TAj6;x$^mN&w3XnqI6mRu>f zP>hxK6ggmckX@NuO+5AZib+wZj?>hB;BI`i)pTa@zw!>_(Hnj~%lks{Ei8d{>)d@F z%`v1~?miZWud2U1r|^~nzqxUr){scilzB$uYO_{K#VKUtl#n_N^w!`lh~K_6tUYc> z&eX9V@+&-$NE3@rhO4PMOB6r8*lVt}*R%>cCLgGKBR@#? z$JHe+8wh1maI0rt(61S}bk3ZV@BJ#9Sr%V?XRNV5DNoNYNJrhiHh@GT1U3DbxOPoH zje-z{n&0V;Xj(ui_gSDafLw6k`hsG6OZO?eoVD74| z#=Wl@ei^6w$^BnkU9|XNWk_VIqZ`gpw1PvO+-4GOx02+kGg5b3Z oH$YE>2^Rzj{=eJ*;s=>f$(|q|aHNQCg0+Qkf3Y^JFma9iJ09&5&j0`b literal 0 HcmV?d00001 -- Gitee