【鸿蒙智能硬件】(二)Windows开发环境

目录

四、windows下开发环境的搭建

使用vscode开发工具建立c的开发环境

安装插件

vscode与wsl的ubuntu系统建立链接构建鸿蒙开发路径

应用模块测试

在app目录下创建文件夹以及子文件夹进行项目开发

1.步骤1:创建工程目录

2.步骤2:编写业务代码,调用启动功能模块宏执行函数

3.步骤3:编写应用模块构建脚本BUILD.gn

4.步骤4:配置应用模块helloapp到应用子系统

进行编译、下载out路径和烧写到板卡

1.编译

2.下载

3.烧写

4.运行测试

运行流程

[步骤1:内核启动后,第一个入口函数hi_void app_main(hi_void)](#步骤1:内核启动后,第一个入口函数hi_void app_main(hi_void))

步骤2:调用鸿蒙系统初始化方法:HOS_SystemInit()

步骤3:调用MODULE_INIT(run);

步骤4:调用SYS_RUN(helloworld);

核心板Led灯开发

开发步骤

1.GPIO相关的概念

2.头文件函数

[(1)GpioInit,Initializes the GPIO device设备初始化函数](#(1)GpioInit,Initializes the GPIO device设备初始化函数)

[(2)IoSetFunc,Sets the multiplexing function for a GPIO pin设置GPIO功能](#(2)IoSetFunc,Sets the multiplexing function for a GPIO pin设置GPIO功能)

[(3)GpioSetDir,Sets the direction for a GPIO pin设备的方向(输入或者输出)](#(3)GpioSetDir,Sets the direction for a GPIO pin设备的方向(输入或者输出))

[(4)GpioSetOutputVal,Sets the output level value for a GPIO pin](#(4)GpioSetOutputVal,Sets the output level value for a GPIO pin)

3.实现led灯亮灭的操作

(1)编写源代码

[(2)编写应用模块构建脚本 BUILD.gn(app/youdianjike/code2/BUILD.gn)](#(2)编写应用模块构建脚本 BUILD.gn(app/youdianjike/code2/BUILD.gn))

4.编译、下载、烧写、运行


四、windows下开发环境的搭建

使用vscode开发工具建立c的开发环境

需要使用vscode访问Ubuntu系统.并在hmcode目录建立相关开发路径。

下载地址:https://code.visualstudio.com/

下载完成后进行安装,安装完,双击桌面的vscode图标,进入vscode开发界面

安装插件

需要安装c语言、gn、wsl插件

WSL

C/C++ C/C++ Themes

GN GN Format GN Language

vscode与wsl的ubuntu系统建立链接构建鸿蒙开发路径

view->Command Palette...

输入wsl->WSL:Connect to WSL

打开hmcode鸿蒙的开发目录

/root/hmcode/

app--项目源代码目录,可以创建文件夹和c的源文件

BUILD.gn---app的构建配置文件

应用模块测试

安装开发板的驱动程序

在安装之前,连接主板到电脑。

双击CH341SER.EXE进行驱动的安装

点击安装直到完成,在设备管理器中查看,端口CH340

在app目录下创建文件夹以及子文件夹进行项目开发

1.步骤1:创建工程目录

在app目录下创建文件夹及子文件夹

2.步骤2:编写业务代码,调用启动功能模块宏执行函数
3.步骤3:编写应用模块构建脚本BUILD.gn
4.步骤4:配置应用模块 helloapp 到应用子系统

进行编译、下载out路径和烧写到板卡

1.编译

进入ubuntu的~/hmcode目录,运行:

python build.py wifiiot

2.下载

将out目录复制到e:的test目录下:e:\test

3.烧写

双击HiBurn.exe运行烧写程序

4.运行测试

双击"IPOP 4.1.EXE",进入主板运行界面,点击"终端工具"

运行流程

启动步骤:

内核启动后,第一个入口函数hi_void app_main(hi_void)

调用鸿蒙系统初始化方法:HOS_SystemInit()

调用MODULE_INIT(run);

调用SYS_RUN(HelloWorld);

步骤1:内核启动后,第一个入口函数hi_void app_main(hi_void)

路径:vendor\hisi\hi3861\hi3861\app\wifiiot_app\src\app_main.c

步骤2:调用鸿蒙系统初始化方法:HOS_SystemInit()

路径:base/startup/services/bootstrap_lite/source/system_init.c

步骤3:调用MODULE_INIT(run);

需要查找app下的BUNILD.gn文件

路径:base/startup/services/bootstrap_lite/source/system_init.c

步骤4:调用SYS_RUN( h ello w orld);

路径:applications/sample/wifi-iot/app/youdianjike/code1/hellodemo.c

核心板Led灯开发

用跳线帽连接 J8 的两个 pin

使用GPIO9

输出低电平点亮

输出高电平熄灭

开发步骤

初始化GPIO设备

设置管脚WIFI_IOT_IO_NAME_GPIO_9功能为IO

设置引脚WIFI_IOT_IO_NAME_GPIO_9方向为输出

给管脚WIFI_IOT_IO_NAME_GPIO_9输出低电平点亮LED灯

给管脚WIFI_IOT_IO_NAME_GPIO_9输出高电平熄灭LED灯

1.GPIO相关的概念

在头文件\\base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_gpio.h中,定义了GPIO功能相关枚举:

WifiIotGpioDir,Enumerates GPIO directions

WifiIotGpioValue,numerates GPIO level values.

在头文件\\base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_gpio_ex.h中,定义了在Wi-Fi模块上提供专用设备的相关枚举:

WifiIotIoName,Enumerates GPIO hardware pin IDs

WifiIotIoFuncGpio9,Enumerates the functions of GPIO hardware pin 9

WifiIotGpioDir,Enumerates GPIO directions

复制代码
/**
 * @brief Enumerates GPIO directions.
 */
typedef enum {
    /** Input */
    WIFI_IOT_GPIO_DIR_IN = 0,
    /** Output */
    WIFI_IOT_GPIO_DIR_OUT
} WifiIotGpioDir;

WifiIotGpioValue,Enumerates GPIO level values

复制代码
/**
 * @brief Enumerates GPIO level values.
 */
typedef enum {
    /** Low GPIO level */
    WIFI_IOT_GPIO_VALUE0 = 0,
    /** High GPIO level */
    WIFI_IOT_GPIO_VALUE1
} WifiIotGpioValue;

WifiIotIoName,Enumerates GPIO hardware pin IDs

复制代码
/**
 * @brief Enumerates GPIO hardware pin IDs.
 */
typedef enum {
    /** GPIO hardware pin 0 */
    WIFI_IOT_IO_NAME_GPIO_0,
    /** GPIO hardware pin 1 */
    WIFI_IOT_IO_NAME_GPIO_1,
    /** GPIO hardware pin 2 */
    WIFI_IOT_IO_NAME_GPIO_2,
    /** GPIO hardware pin 3 */
    WIFI_IOT_IO_NAME_GPIO_3,
    /** GPIO hardware pin 4 */
    WIFI_IOT_IO_NAME_GPIO_4,
    /** GPIO hardware pin 5 */
    WIFI_IOT_IO_NAME_GPIO_5,
    /** GPIO hardware pin 6 */
    WIFI_IOT_IO_NAME_GPIO_6,
/** GPIO hardware pin 7 */
    WIFI_IOT_IO_NAME_GPIO_7,
    /** GPIO hardware pin 8 */
    WIFI_IOT_IO_NAME_GPIO_8,
    /** GPIO hardware pin 9 */
    WIFI_IOT_IO_NAME_GPIO_9,
    /** GPIO hardware pin 10 */
    WIFI_IOT_IO_NAME_GPIO_10,
    /** GPIO hardware pin 11 */
    WIFI_IOT_IO_NAME_GPIO_11,
    /** GPIO hardware pin 12 */
    WIFI_IOT_IO_NAME_GPIO_12,
    /** GPIO hardware pin 13 */
    WIFI_IOT_IO_NAME_GPIO_13,
    /** GPIO hardware pin 14 */
    WIFI_IOT_IO_NAME_GPIO_14,
    /** Maximum value */
    WIFI_IOT_IO_NAME_MAX,
} WifiIotIoName;

WifiIotIoFuncGpio9,Enumerates the functions of GPIO hardware pin 9.

复制代码
/**
 * @brief Enumerates the functions of GPIO hardware pin 9.
 */
typedef enum {
    /** GPIO9 function */
    WIFI_IOT_IO_FUNC_GPIO_9_GPIO,
    /** I2C0 SCL function */
    WIFI_IOT_IO_FUNC_GPIO_9_I2C0_SCL,
    /** UART2 RTS function */
    WIFI_IOT_IO_FUNC_GPIO_9_UART2_RTS_N,
    /** SDIO D2 function */
    WIFI_IOT_IO_FUNC_GPIO_9_SDIO_D2,
    /** SPI0 TXD function */
    WIFI_IOT_IO_FUNC_GPIO_9_SPI0_TXD,
    /** PWM0 OUT function */
    WIFI_IOT_IO_FUNC_GPIO_9_PWM0_OUT,
    /** I2S0 MCLK function */
    WIFI_IOT_IO_FUNC_GPIO_9_I2S0_MCLK = 7,
} WifiIotIoFuncGpio9;
2.头文件函数

在头文件\\base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_gpio.h中,定义了GPIO功能相关操作函数:

GpioInit,Initializes the GPIO device

GpioSetDir,Sets the direction for a GPIO pin

GpioSetOutputVal,Sets the output level value for a GPIO pin

在头文件\\base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_gpio_ex.h中,在Wi-Fi模块上提供专用设备操作接口,包括ADC、AT、闪存、GPIO、I2C、I2S、分区、PWM、SDIO、UART和看门狗:

IoSetFunc,Sets the multiplexing function for a GPIO pin

(1)GpioInit,Initializes the GPIO device设备初始化函数
复制代码
/**
 * @brief Initializes the GPIO device.
 *
 * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful;
 * returns an error code defined in {@link wifiiot_errno.h} otherwise.
 * @since 1.0
 * @version 1.0
 */
unsigned int GpioInit(void);
(2)IoSetFunc,Sets the multiplexing function for a GPIO pin设置GPIO功能
复制代码
/**
 * @brief Sets the multiplexing function for a GPIO pin.
 *
 * @param id Indicates the GPIO pin.
 * @param val Indicates the I/O multiplexing function. For example,
 * if the value of <b>id</b> is {@link WIFI_IOT_IO_NAME_GPIO_0},
 * the value type of <b>val</b> is {@link WifiIotIoFuncGpio0}.
 * If the value of <b>id</b> is {@link WIFI_IOT_IO_NAME_GPIO_1},
 * the value type of <b>val</b> is {@link WifiIotIoFuncGpio1}.
 * The same rule applies to other values.
 * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful;
 * returns an error code defined in {@link wifiiot_errno.h} otherwise.
 * @since 1.0
 * @version 1.0
 */
unsigned int IoSetFunc(WifiIotIoName id, unsigned char val);
(3)GpioSetDir,Sets the direction for a GPIO pin设备的方向(输入或者输出)
复制代码
/**
 * @brief Sets the direction for a GPIO pin.
 *
 * @param id Indicates the GPIO pin ID.
 * @param dir Indicates the GPIO input/output direction.
 * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful;
 * returns an error code defined in {@link wifiiot_errno.h} otherwise.
 * @since 1.0
 * @version 1.0
 */
unsigned int GpioSetDir(WifiIotGpioIdx id, WifiIotGpioDir dir);
(4)GpioSetOutputVal,Sets the output level value for a GPIO pin
复制代码
/**
 * @brief Sets the output level value for a GPIO pin.
 *
 * @param id Indicates the GPIO pin ID.
 * @param val Indicates the output level value.
 * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful;
 * returns an error code defined in {@link wifiiot_errno.h} otherwise.
 * @since 1.0
 * @version 1.0
 */
unsigned int GpioSetOutputVal(WifiIotGpioIdx id, WifiIotGpioValue val);
3.实现led灯亮灭的操作

实现Led灯的亮灭操作

(1)编写源代码

新建code2目录,创建文件leddemo.c

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #include <stdio.h> #include "ohos_init.h" #include <unistd.h> #include "wifiiot_gpio.h" #include "wifiiot_gpio_ex.h" #include "ohos_types.h" void leddemo(void) { GpioInit(); //初始化GPIO设备 IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);//设置设备的功能 GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);//设置设备的方向,WIFI_IOT_GPIO_DIR_OUT表示输出方向 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_VALUE0);//设置设备的输出值,需要指定设备的名称和值,VALUE0低电位 printf("led open \n"); usleep(4000000);//点亮四秒后熄灭 GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_VALUE1);//value1是高电位 printf("led close \n"); } SYS_RUN(leddemo); |

(2)编写应用模块构建脚本 BUILD.gn(app/youdianjike /code2/BUILD.gn )

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| static_library("ledapp") { sources = [ "leddemo.c" ] include_dirs = [ "//utils/native/lite/include", "//base/iot_hardware/interfaces/kits/wifiiot_lite" ] } |

(3)编写app目录下的BUILD.gn(/app/BUILD.gn),注册到应用子系统中

|-------------------------------------------------------------------------------------------------------------------------------------------|
| import("//build/lite/config/component/lite_component.gni") lite_component("app") { features = [ "youdianjike/code2:ledapp", ] } |

(4)编译、下载、烧写、运行

编译:python build.py wifiiot

......

相关推荐
前端不太难1 小时前
AI 时代,鸿蒙 App 还需要传统导航结构吗?
人工智能·状态模式·harmonyos
前端技术2 小时前
【鸿蒙实战】从零打造智能物联网家居控制系统:HarmonyOS Next分布式能力的完美诠释
java·前端·人工智能·分布式·物联网·前端框架·harmonyos
前端不太难2 小时前
Flutter / iOS 迁移鸿蒙 ArkUI 的真实成本
flutter·ios·harmonyos
HMS Core2 小时前
【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit
华为·harmonyos
sbjdhjd2 小时前
RHCE | Linux 例行性工作(定时任务)从入门到精通
linux·运维·服务器·华为·云计算
大雷神3 小时前
HarmonyOS APP<玩转React>开源教程二:ArkTS 语言基础
react.js·开源·harmonyos
youyudexiaowangzi3 小时前
Ubuntu环境下编译鸿蒙动态库
linux·ubuntu·harmonyos
HwJack203 小时前
HarmonyOS ArkUI列表性能优化实战:懒加载与缓存的艺术
缓存·性能优化·harmonyos
小雨青年3 小时前
鸿蒙 HarmonyOS 6 | 多媒体 (03) 图像处理 Image Kit 与 PixelMap 实战
图像处理·华为·harmonyos