使用freertos时如何为lvgl配置心跳和任务管理器

前言

lvgl需要系统滴答声(心跳)才能知道动画和其他任务的经过时间,所以我们必须要配置好lvgl的心跳。
要处理lvgl的任务我们需要定期调用 lv_task_handler(任务管理器),即使我们没有使用到lvgl的任务也需要配置好lvgl的任务管理器,因为lvgl库本身就用到了任务管理器,除非我们对lvgl进行了精简裁剪,否则默认情况下都需要配置好任务管理器。

配置lvgl心跳(Tick)

参考lvgl中文文档中的说明:http://lvgl.100ask.net/7.11/documentation/02_porting/05_tick.html

实现freertos中的 Tick滴答钩子函数:void vApplicationTickHook() :

  • 该函数在Tick中断函数中调用,所以该函数的运行时间越短越好,不能加任何delay。
  • 该函数调用的周期性很强(1MS),一些定时器计数器(自定义的计数器)可以在该函数里面实现
  1. FreeRTOSConfig.h中配置configUSE_TICK_HOOK1
  2. 运行周期:由configTICK_RATE_HZ决定, 一般都设置为 1MS
  3. 实现 void vApplicationTickHook()
void vApplicationTickHook()
{
	// 告诉lvgl已经过去了1毫秒
	lv_tick_inc(1);
}

配置lvgl任务管理器(Task Handler)

参考lvgl中文文档中的说明:http://lvgl.100ask.net/7.11/documentation/02_porting/06_task-handler.html

  1. 设置任务并分配普通任务的最高优先级,堆栈建议设为 512
  2. 5ms周期执行 vTaskDelayUntil 函数即可。
#define LVGL_TASK_HANDLER_PRIORITY 		(tskIDLE_PRIORITY + 3)	// lvgl task handel
#define LVGL_TASK_HANDLER_STACK_SIZE 	(512)

xTaskCreate( lv_100ask_task_handler, "lvgl_task_handler", LVGL_TASK_HANDLER_STACK_SIZE, NULL, LVGL_TASK_HANDLER_PRIORITY, (TaskHandle_t *) NULL );									

static portTASK_FUNCTION( lv_100ask_task_handler, pvParameters )
{
	TickType_t xLastWakeTime;
	const TickType_t xPeriod = pdMS_TO_TICKS( 5 );
	
	// 使用当前时间初始化变量xLastWakeTime ,注意这和vTaskDelay()函数不同 
	xLastWakeTime = xTaskGetTickCount();  
	
	for(;;)
	{		
		/* 调用系统延时函数,周期性阻塞5ms */    
		vTaskDelayUntil( &xLastWakeTime,xPeriod );
		lv_task_handler();
	}
	vTaskDelete(NULL);
}

freeRTOS教程

韦东山freeRTOS系列教程:入门文档教程+进阶视频教程(全部免费的freeRTOS系列教程、freeRTOS学习路线)https://blog.csdn.net/qq_35181236/article/details/122070883

LVGL中文手册

lvgl官方的教程是英文的,这个是我在做项目时顺便做出来的中文教程站点(持续更新维护),不仅仅只是照搬lvgl官方文档的翻译,同时总结了我们在实际开发中遇到的各种细节,让这个文档更加适合我们在实际开发中的需求。V7.11中文已经更新完成,v8.1中文更新进行中

lvgl视频教程

[video(video-usChQxXe-1639108755632)(type-bilibili)(url-bilibili html5 player)(image-https://img-blog.csdnimg.cn/img_convert/18f43eb5b4f86d9c6eb975fa670d4b5c.png)(title-百问网LVGL(v8)系列课程(韦东山·监制) 教程基于lvgl v8.1版本,课程适配多个平台、多款板子)]

百问网LVGL(v8)视频课程(韦东山·监制) 教程基于lvgl v8.1版本,课程适配多个平台、多款板子!视频学习地址:https://www.bilibili.com/video/BV1Ya411r7K2

视频教程配套资料

相关学习资源