标签:lvgl 管理器 FreeRTOS task 任务 handler LVGL
目录lvgl需要系统滴答声(心跳)才能知道动画和其他任务的经过时间,所以我们必须要配置好lvgl的心跳。
要处理lvgl的任务我们需要定期调用 lv_task_handler(任务管理器),及时我们没有使用到lvgl的任务也需要配置好lvgl的任务管理器,因为lvgl库本身就用到了任务管理器,除非我们对lvgl进行了精简裁剪,否则默认情况下都需要配置好任务管理器。
配置lvgl心跳(Tick)
参考lvgl中文文档中的说明:http://lvgl.100ask.net/documentation/02_porting/05_tick.html
实现freertos中的 Tick滴答钩子函数:void vApplicationTickHook() :
- 该函数在Tick中断函数中调用,所以该函数的运行时间越短越好,不能加任何delay。
- 该函数调用的周期性很强(1MS),一些定时器计数器(自定义的计数器)可以在该函数里面实现
- 在
FreeRTOSConfig.h
中配置configUSE_IDLE_HOOK
为1
- 运行周期:由
configTICK_RATE_HZ
决定, 一般都设置为 1MS - 实现 void vApplicationTickHook()
void vApplicationTickHook()
{
// 告诉lvgl已经过去了1毫秒
lv_tick_inc(1);
}
配置lvgl任务管理器(Task Handler)
参考lvgl中文文档中的说明:http://lvgl.100ask.net/documentation/02_porting/06_task-handler.html
- 设置任务并分配普通任务的最高优先级,堆栈建议设为 512;
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);
}
LVGL中文手册
lvgl官方的教程是英文的,这个是我在做项目时顺便做出来的中文教程站点(持续更新维护),不仅仅只是照搬lvgl官方文档的翻译,同时总结了我们在实际开发中遇到的各种细节,让这个文档更加适合我们在实际开发中的需求。
- lvgl官方原版教程: https://docs.lvgl.io
- lvgl中文教程(中文手册):http://lvgl.100ask.net
标签:lvgl,管理器,FreeRTOS,task,任务,handler,LVGL 来源: https://www.cnblogs.com/zhouyuebiao/p/14800175.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。