跳转至

点灯

创建工程

在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中添加路径,否则会编译报错。