RVB2601开发板上手——GUI与操作系统任务

简介: 本文主要测试了LVGL系统GUI函数和操作系统的任务创建

作者:bigbat


平头哥RVB2601板子的CH2601系统是可以支持操作系统的,本次测评就来新建一操作系统任务。该任务系统不是很复杂,就是轮询三个信号灯。


首先是找到一个带有任务的样例,这个样例就是ch2601_gui_demo,这个例程可以从网上直接下载。

1.jpg

可以看到有任务的代码。资料很少找到高薪秘诀,跟着AliOS Things轻松入门操作系统:任务这点资料。


aos_task_new("gui", gui_lvgl_task, NULL, 10 * 1024);

非常意外的是这资料中介绍了AliOS的任务,但是确没有介绍aos_task_new()这函数的参数!那么只能通过函数的声明进行猜测了。据我目测的结果“NULL”的参数应该是任务参数吧。而且任务也没有优先级,这让我感到有点不好理解。反正这篇文章看的我是一头雾水,我对freeRTOS和ucOS较为熟悉。很多的理解都是参照这两个系统。


如果想建立任务就要编写任务函数,gui_led_task(),这里需要注意函数必须是static的函数。

static void gui_led_task(void *arg)
{
uint32_t d=0;
led_init();
while (1){
aos_msleep(500);
csi_gpio_pin_toggle(&pin_led_red);
csi_gpio_pin_toggle(&pin_led_green);
csi_gpio_pin_toggle(&pin_led_blue);
}
}

任务不复杂就是点了三个led。其中的aos_msleep(500)很重要!对于这种实时的操作系统,如果在任务中的工作完成后要及时将CPU的控制权交给系统,如果不这样做整个系统的效率就会很低!所以一定要及时让出控制权。通常sleep函数都可以做到。


其中的led_init函数也是我写的;

static void led_init(void)
{
  csi_pin_set_mux(PA7, PIN_FUNC_GPIO); //Red LED
    csi_pin_set_mux(PA25, PIN_FUNC_GPIO); //Green LED
    csi_pin_set_mux(PA4, PIN_FUNC_GPIO); //Blue LED
  csi_gpio_pin_init(&pin_led_red, PA7);
    csi_gpio_pin_dir(&pin_led_red, GPIO_DIRECTION_OUTPUT);
    csi_gpio_pin_init(&pin_led_green, PA25);
    csi_gpio_pin_dir(&pin_led_green, GPIO_DIRECTION_OUTPUT);
    csi_gpio_pin_init(&pin_led_blue, PA4);
    csi_gpio_pin_dir(&pin_led_blue, GPIO_DIRECTION_OUTPUT);
}


任务的准备过程就算完成,接下来就是创建任务函数了。

/**
 * main
 */
int main(void)
{
    board_yoc_init();
    aos_task_new("gui", gui_lvgl_task, NULL, 10 * 1024);
  aos_task_new("led", gui_led_task, NULL, 2 * 1024);
    return 0;
}

aos_task_new("led", gui_led_task, NULL, 2 * 1024);这个函数的第一参数:线程的名字,第二参数:就是线程的函数,第三参数:知不道啦,第四参数:是任务的内存堆栈。


我也不知道最小堆栈是多少,所以就给了2048的大小。看到任务执行正常。


顺便说一下GUI的测试,这个测试可以看到任务就是显示三行字符到屏幕上面。关于这个GUI的资料不是很多,通过源码了解一些。可以显示字符和图像。但是GUI系统通常都是吃flash和ram大户,所以能不能裁剪很重要,平头哥能给个例程还是很不错的。

static void gui_label_create(void)
{
    lv_obj_t *p = lv_label_create(lv_scr_act(), NULL);
    lv_label_set_long_mode(p, LV_LABEL_LONG_BREAK);
    lv_label_set_align(p, LV_LABEL_ALIGN_CENTER);
    lv_obj_set_pos(p, 0, 4);
    lv_obj_set_size(p, 128, 60);
    lv_label_set_text(p, "THEAD RISC-V\nGUI\nDEMO");
}


本文源自:平头哥芯片开放社区

欢迎关注公众号:芯片开放社区(ID:OCC_THEAD),查看更多应用实战文章。

相关文章
|
3月前
|
存储 人工智能 算法
操作系统的演化之路:从单一任务到多任务处理
【8月更文挑战第12天】 在计算机科学的历史长河中,操作系统作为硬件与软件之间的桥梁,其发展经历了由简单到复杂、由单一到多元的转变。本文旨在探究操作系统如何实现从执行单个任务到同时管理多个任务的飞跃,并分析这一变革对现代计算技术的影响。通过回顾操作系统的关键发展阶段,我们将理解多任务处理机制的起源和优化过程,以及它如何塑造了今天的数字世界。
|
2月前
|
安全 Unix Linux
Unix是一个多用户、多任务的操作系统
Unix是一个多用户、多任务的操作系统
102 3
|
26天前
|
存储 iOS开发 MacOS
MacOS环境-手写操作系统-33-多任务多窗口
MacOS环境-手写操作系统-33-多任务多窗口
20 0
|
2月前
|
机器学习/深度学习 人工智能 算法
操作系统的未来:从多任务到深度学习的演变之路
本文将探讨操作系统如何从处理简单多任务发展到支持复杂的深度学习任务。我们将分析现代操作系统面临的新挑战,以及它们如何适应人工智能和大数据时代的要求。文章不仅回顾过去,也展望未来,思考操作系统在技术演进中的角色和方向。
54 3
|
2月前
|
人工智能 算法 数据挖掘
操作系统的演变:从单任务到多任务的旅程
操作系统(OS)是计算机系统的核心,它管理硬件资源、提供用户界面并运行应用程序。本文将探讨操作系统如何从单任务环境演变为支持多任务的环境,包括这一过程中的技术挑战和解决方案。我们将看到,随着计算需求的增长,操作系统必须适应更复杂的任务管理和资源分配策略,以提高效率和用户体验。通过这个旅程,我们不仅能够理解操作系统的发展,还能洞察未来可能的趋势。
47 5
|
3月前
|
机器学习/深度学习 人工智能 安全
操作系统的未来:从多任务处理到人工智能
【8月更文挑战第23天】本文将探讨操作系统的发展历程及其未来趋势,特别是人工智能在操作系统中的应用。我们将看到如何通过引入人工智能技术,操作系统能够更加智能化地管理资源,提高系统性能和用户体验。
|
3月前
|
Web App开发 机器学习/深度学习 物联网
操作系统的演变:从单任务到现代多任务系统
【8月更文挑战第15天】操作系统作为计算机硬件与软件之间的桥梁,其设计和发展反映了计算技术的进步。本文将探讨操作系统的演变过程,从早期的单一任务处理到现代复杂的多任务和多用户环境。我们将分析这一转变如何影响用户体验、资源管理和系统安全性,并展望操作系统未来的可能发展方向。
52 2
|
3月前
|
安全 物联网 调度
操作系统的演变:从单一任务到多任务处理
【8月更文挑战第9天】在数字时代的浪潮中,操作系统的发展经历了从单任务到多任务处理的转变。本文将探讨这一转变背后的原因、影响及其对未来技术趋势的启示。我们将通过分析操作系统的架构变化,揭示其如何适应日益增长的计算需求和用户期望。文章还将讨论多任务处理对软件开发、用户体验和系统性能的影响,以及这些变化如何塑造了我们今天所使用的技术。
|
3月前
|
安全 Unix 物联网
操作系统的演进:从单任务到现代多任务环境
在数字时代的心脏跳动着的是操作系统,它是计算机硬件与软件之间的桥梁。本文将探讨操作系统如何从简单的单任务处理发展至复杂的多任务和多用户环境。我们将穿越时空,回顾那些定义了现代计算的关键时刻,见证技术创新如何塑造我们的数字生活。
|
3月前
|
人工智能 并行计算 大数据
操作系统的演变之路:从单任务到多任务再到并行计算
本文将探讨操作系统(OS)的发展脉络,着重分析从早期单任务系统到现代多任务和并行处理系统的演进。我们将通过浅显易懂的语言和比喻,揭示这一技术变革如何影响我们的日常生活和工作方式,并展望未来可能的发展趋势。