关于Hi3861硬件子系统&SDK适配

最近使用最新code2.0canary尝试编写外设控制程序,发现和code1.0硬件子系统适配的API不一样,具体见回帖

鸿蒙设备开发
2021-07-22 09:37:16
浏览
收藏 0
回答 5
已解决
回答 5
按赞同
/
按时间
金水.
1

1、Hi3861 SDK 接口位置
1)code1.0:vendor\hisi\hi3861\hi3861\include\
2)code2.0canary:device\hisilicon\hispark_pegasus\sdk_liteos\include\

2、code1.0 源码中适配的硬件子系统:
1)头文件:base\iot_hardware\interfaces\kits\wifiiot_lite\
2)源代码:vendor\hisi\hi3861\hi3861_adapter\hals\iot_hardware\wifiiot_lite\

3、code2.0 canary源代码适配的硬件子系统
1)头文件:base\iot_hardware\peripheral\interfaces\kits\
2)源代码:device\hisilicon\hispark_pegasus\hi3861_adapter\hals\iot_hardware\wifiiot_lite\

分享
微博
QQ
微信
回复
2021-07-22 09:51:31
金水.

两个源代码版本,对应Hi3861 SDK的接口位置不同,但是API是一致的;适配的硬件子系统都在调用Hi3861 SDK 的API,但提供接口名字不一样了,现在看到硬件外设案例中都是使用code1.0适配的接口,到2.0完全对不上了。

例如设置GPIO的输入/输出:

//sdk提供的API

hi_u32 hi_gpio_set_dir(hi_gpio_idx id, hi_gpio_dir dir);

 

//1.0适配的实现:

unsigned int HalGpioSetDir(HalWifiIotGpioIdx id, HalWifiIotGpioDir dir)
{
    return hi_gpio_set_dir((hi_gpio_idx)id, (hi_gpio_dir)dir);
}

 

//2.0适配的实现:

unsigned int IoTGpioSetDir(unsigned int id, IotGpioDir dir)
{
    return hi_gpio_set_dir((hi_gpio_idx)id, (hi_gpio_dir)dir);
}

分享
微博
QQ
微信
回复
2021-07-22 09:58:22
liangkz_梁开祝

你这code1.0应该是指通过IDE的HPM工具下载和安装的工程吧?或者是直接下载的源码压缩包? 那些工程有些是非常久远以前的鸿蒙系统裁剪出来的,鸿蒙系统在不停地优化和调整,但是这些工程没有同步更新,所以最新的鸿蒙系统,很多子系统/组件的结构和API等,都与远古时期的代码有很大差异。

 

建议在LTS分支上做开发和学习轻量/小型系统,代码教新且稳定。 要学习标准系统,只能在Canary上进行了,但是该分支存在大量的不稳定现象,需要自己看着办。

分享
微博
QQ
微信
回复1
2021-07-22 10:03:11
金水.

如果要开发外设控制应用程序,直接使用sdk提供的API(hi_xx)应该就可以了吧?为什么还要适配硬件子系统??

我理解使用硬件子系统的接口,是为了更换硬件开发板,而外设控制应用程序不需要任何改变的,只需要开发板厂商适配好自己的SDK,给上层应用操作提供统一的接口就好了。

 

不知道这样理解对不对,如果是这样,硬件子系统的接口应该要保持不变吧??

 

现在是硬件还没有改变,源代码从1,0到2.0,外设控制程序就跑不起来了。

 

而且我发现2,0canary版本适配的硬件子系统并不完整,编写GPIO中断案例都不行,最近写的案例都是直接调用sdk提供的API,可能是windows对应金丝雀版本全量代码,还没更新好么?

分享
微博
QQ
微信
回复
2021-07-22 10:10:24
liangkz_梁开祝

去看一下我的文章《OpenHarmony 2.0 Canary 的 IoT硬件子系统》。

 

“如果要开发外设控制应用程序,直接使用sdk提供的API(hi_xx)应该就可以了吧?”

不建议这样做,鸿蒙系统的低耦合性就是通过framework层接口,把上层调用跟底层sdk的实现隔离来实现的,你直接用hi_xx接口,就跟鸿蒙的设计思想背道而驰了。

 

“只需要开发板厂商适配好自己的SDK” 这是对的,但是厂商要适配的接口是HalGpioSetDir/IoTGpioSetDir这一层,鸿蒙系统的这一层接口保持不变,而不是hi_gpio_set_dir这一层,hi_gpio_set_dir这一层是厂商内部自己的接口,A厂家可以是ha_gpio_set_dir,B厂家可以是hb_gpio_set_dir......

 

分享
微博
QQ
微信
回复3
2021-07-22 10:46:03
相关问题
Hi3861 Hilink SDK集成
4403浏览 • 3回复 待解决
Hi3861 SDK编译出现问题
7565浏览 • 3回复 待解决
硬件设备如何适配HarmonyOS?
5112浏览 • 1回复 待解决
Hi3861 支持CAN通信吗
5136浏览 • 2回复 待解决
hi3861编译失败的原因
4223浏览 • 1回复 待解决
Hi3861数据保存到flash
3593浏览 • 1回复 已解决
Hi3861下使用CPP代码错误
1639浏览 • 1回复 待解决
哪里有Hi3861的芯片手册?
4438浏览 • 1回复 待解决
hi3861,mqtt断开自动重连问题
3293浏览 • 1回复 待解决
鸿蒙开发板Hi3861烧录报错?
5295浏览 • 3回复 待解决
Happ现在能部署到Hi3861
2119浏览 • 1回复 已解决
Hi3861开发板的mesh功能
8789浏览 • 4回复 待解决
编译hispark, pegasus, hi3861, wifi 代码失败
2414浏览 • 1回复 待解决
Hi3861 “cmsis_os2.h”查找失败
343浏览 • 1回复 已解决
hi3861能怎么启动OHOS的shell呢
6155浏览 • 2回复 待解决
HI3861 wifi模组能同时支持sta+ap?
4877浏览 • 2回复 待解决
hi3861环境编译出现编码问题
6574浏览 • 1回复 待解决
hi3861开发板nfc例程出现问题
3246浏览 • 1回复 待解决
求指导Hi3861平台的JS应用开发???
2982浏览 • 1回复 待解决