跳到主要内容

点灯

创建工程

在device/xradio/xr806/ohosdemo中新建一个文件夹,并命令为LED。

在文件夹中新建文件main.c。

在文件夹中新建文件BUILD.gn。

user:~/workspace/Harmony/device/xradio/xr806/ohosdemo$ tree -L 2
.
├── BUILD.gn
└── LED
├── BUILD.gn
└── main.c

修改device/xradio/xr806/ohosdemo/LED/BUILD.gn

import("//device/xradio/xr806/liteos_m/config.gni")     #必须,config中定义了头文件路径和关键宏定义

static_library("app_led") { #必须,所有应用工程必须是app_打头
configs = []

sources = [
"main.c",
]

cflags = board_cflags #必须,board_cflags是在config.gni中定义的关键宏定义

include_dirs = board_include_dirs #必须,board_include_dirs是在config.gni中定义的文件路径
include_dirs += [
"//base/iot_hardware/peripheral/interfaces/kits", #根据实际情况添加头文件路径
]
}

修改device/xradio/xr806/ohosdemo/BUILD.gn

group("ohosdemo") {
deps = [
"LED:app_led",
]
}

编辑程序

#include <stdio.h>
#include "ohos_init.h" //(7)
#include "kernel/os/os.h"
#include "iot_gpio.h" //(8)

static OS_Thread_t g_main_thread;

#define GPIO_ID_PA21 21

static void MainThread(void *arg)
{
printf("LED test start\r\n");
IoTGpioInit(GPIO_ID_PA21); //(3)
IoTGpioSetDir(GPIO_ID_PA21, IOT_GPIO_DIR_OUT); //(4)

while (1) {
IoTGpioSetOutputVal(GPIO_ID_PA21, 1); //(5)
OS_MSleep(500);
IoTGpioSetOutputVal(GPIO_ID_PA21, 0); //(6)
OS_MSleep(500);
}
}

void LEDMain(void) //(2)
{
printf("LED Test Start\n");
if (OS_ThreadCreate(&g_main_thread, "MainThread", MainThread, NULL,
​ OS_THREAD_PRIO_APP, 4 * 1024) != OS_OK) {
printf("[ERR] Create MainThread Failed\n");
}
}

SYS_RUN(LEDMain); //(1)

(1)Harmony线程入口,在utils/native/lite/include/ohos_init.h中定义,读者可以改成其他入口类型检查差异。

(2)实际入口,负责创建线程。

(3)初始化IO口,调用该函数会令该IO口复位为悬空输入。

(4)设置IO口为输出。

(5)输出高电平。

(6)输出低电平。

(7)必须引用ohos_init.h头文件,否则编译时虽然不会出错,但是链接时不会正确识别SYS_RUN,导致功能异常。

(8)Harmony的外设头文件位于//base/iot_hardware/peripheral/interfaces/kits,已经在BUILD.gn:include_dirs中添加路径,否则会编译报错。