OpenHarmony系统调试实验-三色灯与任务
1.头文件:Linux类系统调用头文件,提供usleep延时函数。OpenHarmony初始化头文件,提供APP_FEATURE_INIT注册宏。CMSIS-RTOS2标准内核头文件,操作系统任务相关结构体与创建函数。2.相关函数以及结构体:任务配置结构体,常用成员:-const char *name :任务名称-uint32_t attr_bits :属性标志,填0-void *cb_mem :
OpenHarmony系统调试实验-三色灯与任务
一、工程创建
1.在项目中创建如下文件夹

二、相关API介绍
1.头文件:
①#include <unistd.h>
Linux类系统调用头文件,提供usleep延时函数。
②#include "ohos_init.h"
OpenHarmony初始化头文件,提供APP_FEATURE_INIT注册宏。
③#include "cmsis_os2.h"
CMSIS-RTOS2标准内核头文件,操作系统任务相关结构体与创建函数。
2.相关函数以及结构体:
①osThreadAttr_t
任务配置结构体,常用成员:
- const char *name :任务名称
- uint32_t attr_bits :属性标志,填0
- void *cb_mem :任务控制块内存,NULL内核分配
- uint32_t cb_size :控制块大小,0自动分配
- void *stack_mem :栈内存,NULL内核分配
- uint32_t stack_size :任务栈总字节数
- osPriority_t priority :任务优先级
②osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr)
创建系统线程任务,其参数及返回类型:
- func:任务函数指针
- argument:任务形参,不用传NULL
- attr:属性结构体地址
- 返回:任务句柄;NULL创建失败
③usleep(useconds_t us)
当前线程阻塞延时,其参数:
- us:延时数值,单位μs
三、程序内容
1.在app路径下的BUILD.gn中写入如下代码

2.在3.0_RGB_Blink_Thread路径下的BUILD.gn中写入如下代码

3.在3.0_RGB_Blink_Thread路径下RGB_Blink.c文件中写入如下代码
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "hi_gpio.h"
#include "hi_io.h"
static void thread1(void)
{
hi_gpio_init();
// 配置GPIO2(红)、GPIO8(绿)、GPIO7(蓝)
hi_io_set_func(HI_GPIO_IDX_2, HI_IO_FUNC_GPIO_2_GPIO);
hi_gpio_set_dir(HI_GPIO_IDX_2, HI_GPIO_DIR_OUT);
hi_io_set_func(HI_GPIO_IDX_8, HI_IO_FUNC_GPIO_8_GPIO);
hi_gpio_set_dir(HI_GPIO_IDX_8, HI_GPIO_DIR_OUT);
hi_io_set_func(HI_GPIO_IDX_7, HI_IO_FUNC_GPIO_7_GPIO);
hi_gpio_set_dir(HI_GPIO_IDX_7, HI_GPIO_DIR_OUT);
// 全部先设为低电平(初始全灭)
hi_gpio_set_ouput_val(HI_GPIO_IDX_2, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_8, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_7, HI_GPIO_VALUE0);
while (1)
{
hi_gpio_set_ouput_val(HI_GPIO_IDX_2, HI_GPIO_VALUE1);
hi_gpio_set_ouput_val(HI_GPIO_IDX_8, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_7, HI_GPIO_VALUE0);
usleep(500000);
hi_gpio_set_ouput_val(HI_GPIO_IDX_2, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_8, HI_GPIO_VALUE1);
hi_gpio_set_ouput_val(HI_GPIO_IDX_7, HI_GPIO_VALUE0);
usleep(500000);
hi_gpio_set_ouput_val(HI_GPIO_IDX_2, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_8, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_7, HI_GPIO_VALUE1);
usleep(500000);
hi_gpio_set_ouput_val(HI_GPIO_IDX_2, HI_GPIO_VALUE1);
hi_gpio_set_ouput_val(HI_GPIO_IDX_8, HI_GPIO_VALUE1);
hi_gpio_set_ouput_val(HI_GPIO_IDX_7, HI_GPIO_VALUE1);
usleep(500000);
hi_gpio_set_ouput_val(HI_GPIO_IDX_2, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_8, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_7, HI_GPIO_VALUE0);
usleep(500000);
hi_gpio_set_ouput_val(HI_GPIO_IDX_2, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_8, HI_GPIO_VALUE1);
hi_gpio_set_ouput_val(HI_GPIO_IDX_7, HI_GPIO_VALUE1);
usleep(500000);
hi_gpio_set_ouput_val(HI_GPIO_IDX_2, HI_GPIO_VALUE1);
hi_gpio_set_ouput_val(HI_GPIO_IDX_8, HI_GPIO_VALUE1);
hi_gpio_set_ouput_val(HI_GPIO_IDX_7, HI_GPIO_VALUE0);
usleep(500000);
hi_gpio_set_ouput_val(HI_GPIO_IDX_2, HI_GPIO_VALUE1);
hi_gpio_set_ouput_val(HI_GPIO_IDX_8, HI_GPIO_VALUE0);
hi_gpio_set_ouput_val(HI_GPIO_IDX_7, HI_GPIO_VALUE1);
usleep(500000);
}
}
/******任务二:串口打印******/
static void thread2(void)
{
while (1)
{
printf("任务二成功执行!\r\n");
usleep(3000000);
}
}
/******创建两个任务******/
static void LedExampleEntry(void)
{
osThreadAttr_t attr;
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 1024 * 4;
// 创建任务1
attr.name = "thread1";
attr.priority = 25;
if (osThreadNew((osThreadFunc_t)thread1, NULL, &attr) == NULL)
{
printf("Failed to create thread1!\n");
}
// 创建任务2
attr.name = "thread2";
attr.priority = 25;
if (osThreadNew((osThreadFunc_t)thread2, NULL, &attr) == NULL)
{
printf("Failed to create thread2!\n");
}
}
// 开机自动执行
APP_FEATURE_INIT(LedExampleEntry);
完成代码后记得保存文件
四、编译烧录与测试
1.在DevEco Device Tool插件中点击rebuild进行清理与编译

编译成功后如下

2.在Linux系统中找到如下地址文件out/hispark_pegasus/wifiiot_hispark_pegasus/Hi3861_wifiiot_app_allinone.bin
并将其复制到windows系统中
打开hiburn选择波特率为921600进行烧录
3.烧录成功后按下复位键观察三色灯

观察到三色灯出现了预期现象
更多推荐

所有评论(0)