|
在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函数里引用相关函数创建任务,并启动调度。
编译,烧录到单片机里
通过串口观察运行情况:
已经成功运行起来了。
|
|