|
【HarmonyOS HiSpark Wi-Fi IoT 套件試用連連載】我和鴻蒙的親密接觸----點亮第一顆LED, 對于liteos_m有了一定認識之后,就不多說廢話了,直接開始。
首先需要在某個目錄新建一個一個文件夾存放業(yè)務邏輯代碼。
目錄路徑:./applications/sample/wifi-iot/app,在該路徑下新建一個文件夾LED,其中l(wèi)ed.c,BUILD.gn為編譯腳本,具體目錄結構如下:
目錄地址.png (12.92 KB, 下載次數: 0)
下載附件 保存到相冊
昨天 19:12 上傳
新建并編寫led.c的業(yè)務邏輯代碼以及編譯腳本
新建./applications/sample/wifi-iot/app/led下的led.c文件,在led.c中新建業(yè)務入口函數led,并實現led的GPIO初始化。調用HarmonyOS啟動恢復模塊接口SYS_RUN()啟動業(yè)務。
1、BUILD.gn為編譯腳本
2、led.c為led代碼
led.c
- #include <stdio.h>
- #include <unistd.h>
- #include “ohos_init.h“
- #include “cmsis_os2.h“
- #include “wifiiot_gpio.h“
- #include “wifiiot_gpio_ex.h“
- #define LED_INTERVAL_TIME_US300000
- #define LED_TASK_STACK_SIZE512
- #define LED_TASK_PRIO 25
- enum LedState
- {
- LED_ON = 0,
- LED_OFF,
- LED_SPARK,
- };
- enum LedState g_ledState = LED_SPARK;
- static void *LedTask(constchar *arg)
- {
- (void)arg;
- while (1)
- {
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1);
- switch (g_ledState)
- {
- case LED_ON:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1);
- usleep(LED_INTERVAL_TIME_US);
- break;
- case LED_OFF:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
- usleep(LED_INTERVAL_TIME_US);
- break;
- case LED_SPARK:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
- usleep(LED_INTERVAL_TIME_US);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 1);
- usleep(LED_INTERVAL_TIME_US);
- break;
- default:
- usleep(LED_INTERVAL_TIME_US);
- break;
- }
- }
- return NULL;
- }
- static voidLedExampleEntry(void)
- {
- osThreadAttr_t attr;
- GpioInit();
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_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;
- printf(“[LedExample] try to createLedTask!\n“);
- if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL)
- {
- printf(“[LedExample] Falied tocreate LedTask!\n“);
- }
- }
- SYS_RUN(LedExampleEntry);
復制代碼 同級目錄下的BUILD.gn
- static_library(“l(fā)ed_example“){
- sources = [
- “l(fā)ed.c“
- include_dirs = [
- “//utils/native/lite/include“,
- “//kernel/liteos_m/components/cmsis/2.0“,
- “//base/iot_hardware/inteRFaces/kits/wifiiot_lite“,
- }
復制代碼 上一級目錄的BUILD.gn
- import(“//build/lite/config/component/lite_component.gni“)
-
- lite_component(“app“) {
- features = [
- “l(fā)ed:Wiking“,
- ]
- }
復制代碼 在虛擬機上執(zhí)行python build.py wifiiot進行編譯,當出現下圖時,編譯成功即可燒入。
編譯成功.png (19.27 KB, 下載次數: 0)
下載附件 保存到相冊
昨天 23:43 上傳
燒入操作可以借鑒上一帖。
亮燈.png (43.48 KB, 下載次數: 0)
下載附件 保存到相冊
昨天 23:45 上傳 |
|