OpenCPU 接入

更新时间:2022-11-24 09:20:00

OpenCPU 方案介绍

您购买 Cat.1 模组后,通常使用 Cat.1 模组提供的通信及连接能力连接涂鸦云,具体的设备功能通过 MCU 与外部电路协作来完成。MCU 与 Cat.1 模组之间通过串口连接,完成设备与云端的信息交互,如下图:
OpenCPU 接入

该方案属于通用型方案,客户可以根据设备功能,自由设计外部电路、选择 MCU 型号。但是,对于部分功能需求相对简单的物联网设备来说,完全可以利用 Cat.1 模组自身提供的通用外设接口连接外部功能电路,省去 MCU 成本,使 Cat.1 的 CPU 成为一个开放给外部开发使用的 CPU,即 OpenCPU,如下图:
OpenCPU 接入
OpenCPU 方案中,软件功能上,需要将原来在 MCU 上运行的固件功能,放在 Cat.1 模组的 SoC 芯片上运行;同时,原来通过串口协议交互完成的功能,也变成通过 OpenAPI 调用的方式来完成。软件开发、编译及烧录上,需要开放一套 OpenCPU SDK,SDK 中提供了给外部开发使用的 OpenAPI,同时提供固件编译方法及烧录工具,使外部开发的软件可以独立编译成固件,并支持独立烧录。
OpenCPU 接入

OpenCPU 技术原理

此处以 UIS8910 芯片为例,讲解 OpenCPU 编译实现的技术原理
OpenCPU 接入

开发阶段将 OpenAPI 列表写入 core_export.list 文件,系统固件编译时,通过 gcc 和 dtools 工具,编译 core_export.list 生成 core_export.o 和 core_stub.o,两个文件的作用如下:

  • core_export.o
    主要包含 appImageLoadStub函数定义,该函数在系统加载用户固件阶段调用,主要功能是将用户固件中调用的 OpenAPI 函数实地址填充到用户固件的桩函数区域;
  • core_stub.o
    打桩 core_export.list 中开放的 OpenAPI 函数。用户固件生成阶段,固件调用的所有 OpenAPI 接口,在链接时都链接到 core_stub.o 中对应的桩函数。系统加载用户固件时,再利用 core_export.o 中定义的 appImageLoadStub 函数,将 OpenAPI 中的实函数地址(系统固件区)填充到对应的桩函数(用户固件区)中;
    编译构建过程分为系统固件构建和用户固件构建两个阶段,区别如下:
阶段 开发者 依赖开发包 生成产物
系统固件构建 Cat.1模组开发人员 Cat.1模组SDK Cat.1模组系统固件、OpenCPU SDK
用户固件构建 应用开发人员 OpenCPU SDK 用户固件