[文章]【HarmonyOS HiSpark Wi-Fi IoT 套件试用连连载】我和鸿蒙的亲密接触----点亮第一颗LED

阅读量0
0
0
`对于liteos_m有了一定认识之后,就不多说废话了,直接开始。首先需要在某个目录新建一个一个文件夹存放业务逻辑代码。
目录路径:./applications/sample/wifi-iot/app,在该路径下新建一个文件夹led,其中led.c,BUILD.gn为编译脚本,具体目录结构如下:
目录地址.png

新建并编写led.c的业务逻辑代码以及编译脚本
新建./applications/sample/wifi-iot/app/led下的led.c文件,在led.c中新建业务入口函数led,并实现led的GPIO初始化。调用HarmonyOS启动恢复模块接口SYS_RUN()启动业务。
1、BUILD.gn为编译脚本
2、led.c为led代码
led.c
  1. #include <stdio.h>
  2. #include <unistd.h>

  3. #include "ohos_init.h"
  4. #include "cmsis_os2.h"
  5. #include "wifiiot_gpio.h"
  6. #include "wifiiot_gpio_ex.h"

  7. #define LED_INTERVAL_TIME_US300000
  8. #define LED_TASK_STACK_SIZE512
  9. #define LED_TASK_PRIO 25

  10. enum LedState
  11. {
  12.     LED_ON = 0,
  13.     LED_OFF,
  14.     LED_SPARK,
  15. };

  16. enum LedState g_ledState = LED_SPARK;

  17. static void *LedTask(constchar *arg)
  18. {
  19.     (void)arg;
  20.     while (1)
  21.     {

  22.         GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1);
  23.         switch (g_ledState)
  24.         {
  25.         case LED_ON:
  26.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1);
  27.             usleep(LED_INTERVAL_TIME_US);
  28.             break;
  29.         case LED_OFF:
  30.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
  31.             usleep(LED_INTERVAL_TIME_US);
  32.             break;
  33.         case LED_SPARK:
  34.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
  35.             usleep(LED_INTERVAL_TIME_US);
  36.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 1);
  37.             usleep(LED_INTERVAL_TIME_US);
  38.             break;
  39.         default:
  40.             usleep(LED_INTERVAL_TIME_US);
  41.             break;
  42.         }
  43.     }

  44.     return NULL;
  45. }

  46. static voidLedExampleEntry(void)
  47. {
  48.     osThreadAttr_t attr;

  49.     GpioInit();
  50.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
  51.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);

  52.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
  53.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);

  54.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
  55.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);

  56.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
  57.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);

  58.     attr.name = "LedTask";
  59.     attr.attr_bits = 0U;
  60.     attr.cb_mem = NULL;
  61.     attr.cb_size = 0U;
  62.     attr.stack_mem = NULL;
  63.     attr.stack_size = LED_TASK_STACK_SIZE;
  64.     attr.priority = LED_TASK_PRIO;
  65.     printf("[LedExample] try to createLedTask!
  66. ");
  67.     if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL)
  68.     {
  69.         printf("[LedExample] Falied tocreate LedTask!
  70. ");
  71.     }
  72. }

  73. SYS_RUN(LedExampleEntry);
复制代码
同级目录下的BUILD.gn
  1. static_library("led_example"){
  2.     sources = [
  3.         "led.c"

  4.     include_dirs = [
  5.        "//utils/native/lite/include",
  6.        "//kernel/liteos_m/components/cmsis/2.0",
  7.        "//base/iot_hardware/interfaces/kits/wifiiot_lite",
  8. }
复制代码
上一级目录的BUILD.gn
  1. import("//build/lite/config/component/lite_component.gni")

  2. lite_component("app") {
  3.     features = [
  4.          "led:Wiking",
  5.     ]
  6. }
复制代码
在虚拟机上执行python build.py wifiiot进行编译,当出现下图时,编译成功即可烧入。
编译成功.png

烧入操作可以借鉴上一帖。

`
亮灯.png

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友