一、MCU代码自动生成服务介绍:
前文需知
1、什么是“代码自动生成工具”
自动生成的代码实现了机智云通信协议的解析与封包、传感器数据与通信数据的转换逻辑,并封装成了简单的API,且提供了多种平台的实例代码。当设备收到云端或APP端的数据后,程序会将数据转换成对应的事件并通知到应用层,开发者只需要在对应的事件处理逻辑中添加传感器的控制函数,就可以完成产品的开发。
2、支持的平台
【1】独立MCU方案:stm32f103c8x平台、通用平台(即“其他平台”)
【2】SOC方案:ESP8266平台
代码自动生成工具的使用
1、创建产品,打开机智云链接:http://dev.gizwits.com/
2、添加数据点
3、生成平台目标代码 (注:如果之前没有定义数据点则无法使用自动生成代码服务)
【1】生成MCU方案代码:MCU开发 —》独立MCU方案 —》stm32f103c8x —》生成代码包
【2】生成SOC方案代码:MCU开发 —》SOC方案 —》esp8266 —》生成代码包
自动生成代码说明
1、STM32平台文件说明
Gizwits:机智云协议层,包括通信协议和用户事件处理
Hal:基础驱动层你,包括按键、串口(打印)、看门狗
Lib:ST官方库
Project:工程文件管理层
User:App层,main程序入口函数
Utils:工具层
2、ESP8266平台文件说明
app:
(driver:按键驱动程序
gen_misc.abt
gen_misc.sh:编译工具,执行./gen_misc.sh
Gizwits
Include
user
Utils
)
bin:编译生成的执行文件,烧录使用
include:GAgent接口头文件
ld:ST
lib:GAgent封装库文件
tools:
Soc_ESP8266_API介绍_V0.5.pdf:使用说明
代码二次开发需知
1、代码二次开发需知:串口/定时器 —》gizwits逻辑(动作执行) —》待用户实现(数据采集)
【1】下行处理:例如LED灯开关、电机转速控制等。
【2】上行处理:例如温湿度数据采集,红外传感器状态获取等。
【3】配置处理:配置入网及恢复出厂设置。
2、二次开发举例
【1】下行处理:
首先要完成的是传感器驱动开发,然后在Gizwits目录下的gizwits_product.c文件中的gizwitsEventProcess()函数中处理相应事件即可(如下例中的ledRgbControl(),功能是控制RGB灯的颜色)。
【2】上行处理:
首先要完成的是传感器驱动开发,然后在Gizwits目录下的gizwits_product.c文件中的userHandle()函数中实现传感器数据采集,用户只需并将采集到的数值赋值给对应用户区的设备状态结构体数据位即可(如下例中的:currentDataPoint.valueInfrared = irHandle();)。
【3】配置处理:
除了数据的上行与下行处理外,还需要一些配置操作需要完成,如下:
《1》配置入网和恢复出厂配置
《2》代码为:int32_t gizwitsSetMode(uint8_t mode)
更多信息
1、支持8位、16位、32位的MCU
2、Cubemx无缝对接
3、支持四大类MCU:51单片机、MSP430、STM32、arduino,含正点原子等。
4、兼容esp8266 SOC开发方式,含8M、16M、32M模组。
二、MCU SDK通用平台版移植说明:
前文需知
1、什么是“代码自动生成工具”
2、如何自动生成"通用平台代码"?
3、通用平台移植需知
A. 平台支持两个串口接口(至少一个),一个负责与wifi模组间的数据收发(必须),一个用于调试信息打印(可复用数据收发串口)。
B.平台支持定时器功能(1ms精确定时)。
C.平台支持至少2K的RAM空间(可调整环形缓冲区大小来解决此问题,但易导致数据协议的处理异常)。
通用平台移植说明
1、文件介绍
2、API介绍:
用户调用该接口可以完成Gizwits协议相关初始化(包括协议相关定时器、串口的初始化)。
void gizwitsInit (void)
参数为1时配置模组进入SoftAp模式,参数为2配置模组进入AirLink模式。
void gizwitsSetMode (uint8_t mode)
用户数据处理函数,包括wifi状态更新事件和控制事件。
void gizwitsHandle(dataPoint_t *dataPoint)
该函数中完成了相应协议数据的处理即数据上报的等相关操作。
int8_t gizwitsEventProcess(eventInfo_t info, uint8_t data, uint32_t len)
3、代码结构说明:
a.搭建最小平台工程(必要)。
b.实现串口驱动(必要):包括通信与打印功能。
c.实现定时器驱动(必要)。
d.实现芯片复位函数(可选)。
e.实现应用层逻辑开发(必要):包括数据上下行、入网配置等。
移植步骤介绍
1、搭建最小平台工程(必要)
首先完成目标平台的最小工程搭建,以MSP430为例,我们将通信协议处理的源码文件(Gizwits目录下所有文件)导入到工程中,并将 User目录 下的示例 main.c 文件整合到工程中的主文件中。
2、实现串口驱动(必要)
MCU方案需要用户实现一个串口,用于设备MCU与WIFI模组之间数据通信。用户首先需要实现串口接收中断服务函数接口UART_IRQ_FUN(MSP430平台函数接口为:USCI0RX_ISR),该接口调用gizPutData()函数实现串口数据的接收并且写入协议层数据缓冲区。
3、实现定时器驱动(必要)
协议层使用到了一个系统时间,该事件单位为毫秒,所以要求用户实现一个毫秒定时器(必须是1ms精确定时,若不准确,会影响到超时重发、定时上报等处理),并且实现中断服务函数TIMER_IRQ_FUN(MSP430平台函数接口为:Timer_A),该函数调用gizTimerMs()实现协议层系统时间的维护。
4、实现芯片复位(必要)
根据串口协议文档规定,模组可以发送命令复位设备MCU,所以用户需要实现 gizwits_product.c 中的mcuRestart()接口即可。
5、应用逻辑开发
【1】数据下行控制
数据点方式将转换成数据点事件,开发者只需要在 gizwits_product. c 文件的 gizwitsEventProcess ()相应事件下作具体处理即可。
【2】数据上行控制
该工程源码在 Gizwits\gizwits_product.c 文件的 userHandle() 函数中实现传感器数据采集,并且该函数在while中循环执行,原则上用户只需要关心如何采集数据。
【3】配置入网功能(必要)
根据串口协议文档规定,MCU可以向模组发送命令使其进入相应的配置模式,所以用户可以调用gizwitsSetMode接口(在 gizwits_protocol.c 中)完成相应的操作(例如按键控制)
【4】实现模组状态处理功能(可选)
开发者可以在 gizwits_product. c 文件的 gizwitsEventProcess()函数内获得WIFI状态,并做相应的逻辑处理。
三、STM32CubeMX移植机智云自动生成代码详解:
1、STM官网下载STM32CubeMX工具:https://www.st.com/en/development-tools/stm32cubemx.html
2、创建STM32CubeMX 工程文件,在STM32CubeMX中直接选择您所使用的 MCU(比如这里我们选择STM32L496ZGTx),点击“Project Setting”设置工程目录位置以及相应参数。
3、导入机智云模板配置文件
4、生成工程代码。(点击Project > Generate Code或者点击快捷图标生成工程代码)
5、编译并配置工程。
6、移植代码。
7、添加、修改代码。
8、编译源码烧录测试。
9、进阶开发。
【1】应用相关开发
完成STM32相关平台的移植后,我们可以使用机智云提供的各种工具来开发自己的项目,相关介绍请查看机智云文档中心中的Gokit-MCU发开教程等相关章节。
【2】驱动相关开发
当硬件配置需要更改时,可以使用STM32CubeMX进行相关硬件驱动的配置开发,进而最大限度的减少源码上的重复开发,提高开发效率。
三、8051平台最小资源裁剪说明:
1、查看当前源码工程资源使用情况
2、裁剪资源到最小集
【1】裁剪透传处理代码
【2】裁剪数据点事件处理代码
【3】裁剪日志打印功能
3、总结
以上内容通过裁剪透传处理、数据点生成时间处理、用户区全局变量,来达到资源最小集的生成。
固定包头+包长度+命令+包序号+flags+action+attr_flag(标志位)+attr_vals(数据值)+校验和
作者:桥边风满袖
链接:https://www.jianshu.com/p/e7bfbd2ac89a