1759|2

2885

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

平头哥RVB2601板子-GUI与操作系统任务 [复制链接]

 

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

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

 可以看到有任务的代码。资料很少找到高薪秘诀,跟着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");
}

 

最新回复

支持一下!   详情 回复 发表于 2021-8-4 17:25

赞赏

1

查看全部赞赏

点赞(1) 关注
 
 

回复
举报

7504

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

谢谢分享,期待后续!

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

1942

帖子

2

TA的资源

版主

板凳
 

支持一下!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表