OpenHarmony开源社区
直播中

xiaopeng

11年用户 224经验值
擅长:嵌入式技术,处理器/DSP
私信 关注
[经验]

【开鸿智谷NiobeU4开发板免费试用体验】多线程与LCD显示

VID_20221001_164141

前言

开鸿智谷开发板NiobeU4板载了一块spi接口的显示屏,分辨率为130*135,用来显示一些关键的信息也是非常不错的。本篇利用这块屏结合多线程来显示中英文,图形等。

建立自己的工程

官方源码的dmo文件夹下提供了很多的例程:

image.png

其中107是LCD的例程,002是多线程例程。这两个例程是本次需要参考的例程。

为了方便后续功能开发,需要建立一个自己的工程,步骤如下:

1、复制107_hdf_spi文件夹并重命名weather_project;

2、修改.application_config文件

11.png

3、修改Kconfig.liteos_m.applications文件

22.png

工程建立到这里就基本完成了,如果不修改源码,应该就可以选择对应的工程直接编译下载了。

添加display任务

新建两个c文件,一个是main.c,另一个是TaskDisplay.c

在main函数中调用display_task_create();函数去创建display任务。

33.png

TaskDisplay.c文件中主要有两个函数的实现,一个是display任务的创建函数,另一个是display任务主体

#include <stdio.h>
#include "stdint.h"
#include "los_task.h"
#include "ohos_run.h"
#include "st7735.h"
#include "config.h"

UINT32 g_taskDisplayId;
extern void color_test(void);
extern void str_test(void);
extern void draw_test(void);

void TaskDisplay(void)
{
    LcdInit();
    while (1) {
        {
            str_test();
            LOS_Msleep(3000);
            draw_test();
            LOS_Msleep(1000);
            color_test();
            LOS_Msleep(1000);
            
        }
        
    }
}

//create display task
void display_task_create(void)
{
    UINT32 ret;
    TSK_INIT_PARAM_S initParam = {0};
    /* 锁任务调度,防止新创建的任务比本任务高而发生调度 */
    LOS_TaskLock();
    printf("LOS_TaskLock() Success!\r\n");

    initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskDisplay;
    initParam.usTaskPrio = TASK_PRIOR_DISPLAY;
    initParam.pcName = "Task Display";
    initParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
    //initParam.uwResved = LOS_TASK_ATTR_JOINABLE; /* detach 属性 允许使用LOS_TaskJoin */

    /* 创建高优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */
    ret = LOS_TaskCreate(&g_taskDisplayId, &initParam);
    if (ret != LOS_OK) {
        LOS_TaskUnlock();

        printf("TaskDisplay create Failed!\r\n");
        return LOS_NOK;
    }
    printf("TaskDisplay create Success!\r\n");    

    /* 解锁任务调度,此时会发生任务调度,执行就绪队列中最高优先级任务 */
    LOS_TaskUnlock();    
}

增加其它文件

任务创建好以后,对于LCD的中英文显示和简单图形的显示,还需要实现一些相关函数。详细过程不在这里做详细说明。

最终实现完成后文件结构如下:

image.png

config.h主要定义一些全局宏。
font.h用来定义中英文字体
gui.c用来实现具体的显示方法
test.c用来实现一些测试用例

修改BUILD.gn文件

代码编写完成后,需要在BUILD.gn文件指定源文件和头文件路径

image.png

选择weather_project工程进行编译

使用make menucofig进入配置界面选择我们自己的工程

image.png

编译

使用hb build -f进行编译

编译完成后如下

image.png

下载

使用esptool.py进行下载

下载完成后如下

image.png

更多回帖

发帖
×
20
完善资料,
赚取积分