mmuyu 发表于 2023-9-4 00:03:51

在harmonyos liteos-m移植机智云协议 基于ch307系列

    在harmonyos上移植机智云协议,我们可以参考机智云的Common版移植说明进行移植。

首先,我们添加两个文件夹,Gizwits和Utils,用于存放机智云的组件。



接下来,我们到配置页面 c/c++ build ->path and symbol ->include ->gun c 包含机智云文件目录



在完成项目目录包含后,我们可以开始对main文件进行配置。

首先包含机智云的头文件

#include <string.h>
#include "gizwits_product.h"
#include "common.h"

机智云协议的运行,依赖串口进行数据通信和定时器的1ms中断进行相关事件处理和时间函数运行
因此,我们要初始化一个串口和一个定时器中断为机智云协议服务

串口初始化函数:



串口中断函数:



定时器初始化函数:



定时器中断函数:



两个中断都使用快速中断定义

void UART5_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void TIM6_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

中断里引用的是机智云的函数,因此我们还得额外在机智云的头文件**函数

void TIMER_IRQ_FUN();
void UART_IRQ_FUN(uint8_t recvData);这里对串口接收函数进行了小小的修改,把接收的函数传递给数据处理函数

void UART_IRQ_FUN(uint8_t recvData)
{
uint8_t value = 0;
//value = USART_ReceiveData(USART2);//STM32 test demo
value=recvData;
gizPutData(&value, 1);
}

对于串口接收的函数,我们只需要依照机智云的伪代码要求进行编写即可



由于之前机智云的协议并未依赖任何操作系统,直接裸机进行开发的,因此循环函数由while进行处理,而在操作系统里,每个循环可以理解成由任务进行处理。

因此我们要使用harmonyos 创建一个任务用于运行机智云相关函数运行。


代码里,我们创建一个main_task用于机智云组件运行,运行完成后释放cpu10ms,由于机智云协议大部分依赖中断进行处理,因此这10ms的暂时延迟几乎不会影响机智云协议的运行,相反,在设备功能简单的情况下,还能降低cpu的功耗和延长设备的使用寿命。

接下来,。我们创建任务,注意栈大小的分配,机智云自身协议运行大概需要2kb ram ,因此分配内存要大于2kb



最后,我们在main函数里引用相关函数创建任务,并启动调度。



编译,烧录到单片机里

通过串口观察运行情况:


已经成功运行起来了。
页: [1]
查看完整版本: 在harmonyos liteos-m移植机智云协议 基于ch307系列