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),一些定时器计数器(自定义的计数器)可以在该函数里面实现
  1. FreeRTOSConfig.h中配置configUSE_IDLE_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/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);
}

LVGL中文手册

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

最新文章

  1. 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
  2. JVM探索之内存管理(三)
  3. 两个不等式(Nopier)
  4. Windows phone 8 学习笔记(4) 应用的启动(转)
  5. My_Plan
  6. DNS添加/修改/查询/删除A记录
  7. asp.net连接mysql数据库
  8. JS获取字符串实际长度
  9. glibc漏洞监测并修复
  10. System.Transactions 事务超时属性
  11. Netty事件监听和处理(上)
  12. 查找linux设备的uuid
  13. vue v-for循环的用法
  14. UVA 679 二叉树
  15. 从零开始搭建高性能高可用Tomcat服务器
  16. 【Alpha】Scrum Meeting 4
  17. 31_网络编程-struct
  18. 2018-9 Java.lang.StackOverflowError
  19. CodeForces 19D Points (线段树+set)
  20. Protel画完原理图检查的时候出现了这些错误 #1 Error Multiple Net Identifiers

热门文章

  1. 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql
  2. 七、.net core(.NET 6)使用Serilog进行配置和实现日志记录
  3. Django(47)drf请求生命周期分析
  4. LATEX如何写多个条件推导式推出一个结论
  5. CAP 5.1 版本发布通告 - 你期待的 Redis 来了
  6. 自定义pass编写
  7. Maven execution terminated abnormally (exit code 1) 完美解决
  8. 如何下载安装Python
  9. Java后端精选技术:SpringBoot配置读取
  10. Linux命令大全之帮助命令及压缩命令