点灯
创建工程
在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中添加路径,否则会编译报错。