> 文档中心 > Hi3861点灯

Hi3861点灯


Hi3861点灯

自带的源码分析

// app/iothardware/led_example.c  自带源码#include #include #include "ohos_init.h"#include "cmsis_os2.h"#include "iot_gpio.h"#define LED_INTERVAL_TIME_US 300000  // interval 闪烁间隔 微秒#define LED_TASK_STACK_SIZE 512#define LED_TASK_PRIO 25#define LED_TEST_GPIO 9 // for hispark_pegasus  端口9// 灯的三种状态enum LedState {    LED_ON = 0,  // 开    LED_OFF,     // 关    LED_SPARK,   // 闪烁};enum LedState g_ledState = LED_SPARK; //设置状态为闪烁static void *LedTask(const char *arg){    (void)arg;    // 死循环  每种状态对应的操作    while (1) { switch (g_ledState) {     case LED_ON:  IoTGpioSetOutputVal(LED_TEST_GPIO, 1);// 设置灯关闭  usleep(LED_INTERVAL_TIME_US);  break;     case LED_OFF:  IoTGpioSetOutputVal(LED_TEST_GPIO, 0);// 设置灯开启  usleep(LED_INTERVAL_TIME_US);  break;     case LED_SPARK:  IoTGpioSetOutputVal(LED_TEST_GPIO, 0);  usleep(LED_INTERVAL_TIME_US);  IoTGpioSetOutputVal(LED_TEST_GPIO, 1);  usleep(LED_INTERVAL_TIME_US);  break;     default:  usleep(LED_INTERVAL_TIME_US);  break; }    }    return NULL;}static void LedExampleEntry(void){    osThreadAttr_t attr;    IoTGpioInit(LED_TEST_GPIO);  // 初始化    IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT);    attr.name = "LedTask";    attr.attr_bits = 0U;    attr.cb_mem = NULL;    attr.cb_size = 0U;    attr.stack_mem = NULL;    attr.stack_size = LED_TASK_STACK_SIZE;    attr.priority = LED_TASK_PRIO;    if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) { printf("[LedExample] Falied to create LedTask!\n");    } // 新线程打开失败,输出错误}SYS_RUN(LedExampleEntry);  // 用户代码入口

尝试 点灯实现SOS

app目录下新建文件夹 LED_SOS

在文件夹LED_SOS 新建 LED_SOS.c BUILD.gn两个文件

内容如下

// LED_SOS.c#include #include #include "ohos_init.h"#include "cmsis_os2.h"#include "iot_gpio.h"#define LED_INTERVAL_TIME_US 300000#define LED_INTERVAL1  100000#define LED_INTERVAL2  200000#define LED_INTERVAL3  600000#define LED_INTERVAL4  5000000  #define LED_TASK_STACK_SIZE 512#define LED_TASK_PRIO 25#define LED_TEST_GPIO 9 // for hispark_pegasusenum LedState {    LED_ON = 0,    LED_OFF,    LED_SPARK,};enum LedState g_ledState = LED_SPARK;static void *LedTask(const char *arg) {    (void)arg;    int i=0;    while (1) { switch (g_ledState) {     case LED_ON:  IoTGpioSetOutputVal(LED_TEST_GPIO, 1);  usleep(LED_INTERVAL_TIME_US);  break;     case LED_OFF:  IoTGpioSetOutputVal(LED_TEST_GPIO, 0);  usleep(LED_INTERVAL_TIME_US);  break;     case LED_SPARK:  // 三个快闪烁来表示字母“S”  for (i = 0; i < 3; i++) {      IoTGpioSetOutputVal(LED_TEST_GPIO, 0); //打开灯      usleep(LED_INTERVAL2);   //延时200毫秒      IoTGpioSetOutputVal(LED_TEST_GPIO, 1); //关闭灯      usleep(LED_INTERVAL1);   //延时100毫秒  }  //100毫秒延时产生字母之间的间隙  usleep(LED_INTERVAL1);   //延时100毫秒  // 三个慢闪烁来表示字母“O”  for (i = 0; i < 3; i++) {      IoTGpioSetOutputVal(LED_TEST_GPIO, 0); //打开灯      usleep(LED_INTERVAL3);   //延时600毫秒      IoTGpioSetOutputVal(LED_TEST_GPIO, 1); //关闭灯      usleep(LED_INTERVAL1);   //延时100毫秒  }  //100毫秒延时产生字母之间的间隙  usleep(LED_INTERVAL1);   //延时100毫秒  // 三个快闪烁来表示字母“S”  for (i = 0; i < 3; i++) {      IoTGpioSetOutputVal(LED_TEST_GPIO, 0); //打开灯      usleep(LED_INTERVAL2);   //延时200毫秒      IoTGpioSetOutputVal(LED_TEST_GPIO, 1); //关闭灯      usleep(LED_INTERVAL1);   //延时100毫秒  }  //5秒延时产生字母sos的间隙  usleep(LED_INTERVAL4);   //延时5秒  break;     default:  usleep(LED_INTERVAL_TIME_US);  break; }    }    return NULL;}static void LedExampleEntry(void) {    osThreadAttr_t attr;    IoTGpioInit(LED_TEST_GPIO);    IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT);    attr.name = "LedTask";    attr.attr_bits = 0U;    attr.cb_mem = NULL;    attr.cb_size = 0U;    attr.stack_mem = NULL;    attr.stack_size = LED_TASK_STACK_SIZE;    attr.priority = LED_TASK_PRIO;    if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) { printf("[LedExample] Falied to create LedTask!\n");    }}SYS_RUN(LedExampleEntry);
# BUILD.gnstatic_library("led_sos") {    sources = [ "LED_SOS.c"    ]    include_dirs = [ "//utils/native/lite/include", "//kernel/liteos_m/kal/cmsis", "//base/iot_hardware/peripheral/interfaces/kits",    ]}

app目录下的BUILD.gn修改

import("//build/lite/config/component/lite_component.gni")lite_component("app") {    features = [ "LED_SOS:led_sos",    ]}