收藏官网首页
查看: 1519|回复: 0

[经验分享] 在harmonyos liteos-m移植机智云协议 基于ch307系列

106

主题

107

帖子

7261

积分

论坛元老

Rank: 8Rank: 8

积分
7261
跳转到指定楼层
楼主
 楼主| 发表于 2023-9-4 00:03:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
    在harmonyos上移植机智云协议,我们可以参考机智云的Common版移植说明进行移植。

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



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



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

首先包含机智云的头文件

  1. #include <string.h>
  2. #include "gizwits_product.h"
  3. #include "common.h"
复制代码


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

串口初始化函数:



串口中断函数:



定时器初始化函数:



定时器中断函数:



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

  1. void UART5_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
  2. void TIM6_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
复制代码


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

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

  1. void UART_IRQ_FUN(uint8_t recvData)
  2. {
  3.   uint8_t value = 0;
  4.   //value = USART_ReceiveData(USART2);//STM32 test demo
  5.   value=recvData;
  6.   gizPutData(&value, 1);
  7. }
复制代码


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



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

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


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

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



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



编译,烧录到单片机里

通过串口观察运行情况:


已经成功运行起来了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表