折腾一个晚上,终于把 littlevgl移植到新唐N32903U1DN芯片上面裸奔了.
soc只支持16bit颜色,
littlevgl改成16bit编译出错,
所以显示就酱紫了,
接下来继续找bug
离线
差不多搞定N32903显示 littlevgl了。
离线
把我的车载GPS 5寸 800x480 LCD屏点起来!
离线
很好奇littlevgl的流程程度,楼主能否共享一下代码
离线
速度怎么样
离线
能移植到NUC972上吗?
离线
大神,能看下您移植的代码吗,最近也在用N32905移植littlevgl,一直没成功
离线
谢谢,现在才一个积分,怎么才能快点挣积分?
离线
没人告诉吗,怎么样才能快速挣积分
离线
看到酷客的972上有littlevgl,应该可以用在32903
离线
谢谢Lvy,现在已经能够正常显示测试demo了,现在触摸还不行,正在找问题
离线
离线
上传两张照片,下周上班在解决触摸问题
离线
这个是mian函数
这个是实现的tft_init
这个是触摸屏实现函数
现在显示可以,但是触摸没有反应,哪位大神帮忙看看是啥问题,感谢
最近编辑记录 oldersu (2019-05-13 09:00:14)
离线
没有实现,还是官方的源码
离线
这个要怎么实现,晕哥,有没有可以参考的
离线
这个是timer的实现
离线
https://github.com/littlevgl/lvgl/blob/master/lv_misc/lv_task.c
/**
* Call it periodically to handle lv_tasks.
*/
LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void)
{
LV_LOG_TRACE("lv_task_handler started");
/*Avoid concurrent running of the task handler*/
static bool task_handler_mutex = false;
if(task_handler_mutex) return;
task_handler_mutex = true;
static uint32_t idle_period_start = 0;
static uint32_t handler_start = 0;
static uint32_t busy_time = 0;
if(lv_task_run == false) return;
handler_start = lv_tick_get();
/* Run all task from the highest to the lowest priority
* If a lower priority task is executed check task again from the highest priority
* but on the priority of executed tasks don't run tasks before the executed*/
lv_task_t * task_interrupter = NULL;
lv_task_t * next;
bool end_flag;
do {
end_flag = true;
task_deleted = false;
task_created = false;
LV_GC_ROOT(_lv_task_act) = lv_ll_get_head(&LV_GC_ROOT(_lv_task_ll));
while(LV_GC_ROOT(_lv_task_act)) {
/* The task might be deleted if it runs only once ('once = 1')
* So get next element until the current is surely valid*/
next = lv_ll_get_next(&LV_GC_ROOT(_lv_task_ll), LV_GC_ROOT(_lv_task_act));
/*We reach priority of the turned off task. There is nothing more to do.*/
if(((lv_task_t *)LV_GC_ROOT(_lv_task_act))->prio == LV_TASK_PRIO_OFF) {
break;
}
/*Here is the interrupter task. Don't execute it again.*/
if(LV_GC_ROOT(_lv_task_act) == task_interrupter) {
task_interrupter = NULL; /*From this point only task after the interrupter comes, so the interrupter is not interesting anymore*/
LV_GC_ROOT(_lv_task_act) = next;
continue; /*Load the next task*/
}
/*Just try to run the tasks with highest priority.*/
if(((lv_task_t *)LV_GC_ROOT(_lv_task_act))->prio == LV_TASK_PRIO_HIGHEST) {
lv_task_exec(LV_GC_ROOT(_lv_task_act));
}
/*Tasks with higher priority then the interrupted shall be run in every case*/
else if(task_interrupter) {
if(((lv_task_t *)LV_GC_ROOT(_lv_task_act))->prio > task_interrupter->prio) {
if(lv_task_exec(LV_GC_ROOT(_lv_task_act))) {
task_interrupter = LV_GC_ROOT(_lv_task_act); /*Check all tasks again from the highest priority */
end_flag = false;
break;
}
}
}
/* It is no interrupter task or we already reached it earlier.
* Just run the remaining tasks*/
else {
if(lv_task_exec(LV_GC_ROOT(_lv_task_act))) {
task_interrupter = LV_GC_ROOT(_lv_task_act); /*Check all tasks again from the highest priority */
end_flag = false;
break;
}
}
if(task_deleted) break; /*If a task was deleted then this or the next item might be corrupted*/
if(task_created) break; /*If a task was deleted then this or the next item might be corrupted*/
LV_GC_ROOT(_lv_task_act) = next; /*Load the next task*/
}
} while(!end_flag);
busy_time += lv_tick_elaps(handler_start);
uint32_t idle_period_time = lv_tick_elaps(idle_period_start);
if(idle_period_time >= IDLE_MEAS_PERIOD) {
idle_last = (uint32_t)((uint32_t)busy_time * 100) / IDLE_MEAS_PERIOD; /*Calculate the busy percentage*/
idle_last = idle_last > 100 ? 0 : 100 - idle_last; /*But we need idle time*/
busy_time = 0;
idle_period_start = lv_tick_get();
}
task_handler_mutex = false; /*Release the mutex*/
LV_LOG_TRACE("lv_task_handler ready");
}
是这个吗?
------------------------------
不对, 上面说错了, 是 lv_tick_inc 这个函数有没有实现?
在线
在线
晕哥,你说的是这个吗
离线
lv_tick_inc() 这个函数实现是这样的
离线
晕哥,加了这句有反应了,这句是干什么用的?
离线
这个是button按钮,现在触摸有反应了,但是button事件还是不响应,我的是电阻触摸屏,需要先上电校准吗?
离线
https://whycan.cn/files/members/1647/button.png
这个是button按钮,现在触摸有反应了,但是button事件还是不响应,我的是电阻触摸屏,需要先上电校准吗?
对的, 把触摸获取到的 X/Y 和 LCD 显示的 X/Y 一 一对应起来就可以了, 所以要先校准。
晕哥,加了这句有反应了,这句是干什么用的?
这个相当于单片机的晶振, 提供时钟源。
在线
好的,我去把触摸屏校准下
离线
现在把屏幕校准完毕了,做了个滑块,能够得到滑动的值,但是滑块的指针不跟着动是为啥啊?那位大神告诉下?
离线
创建的slider
slider的action
现在把屏幕校准完毕了,做了个滑块,能够得到滑动的值,但是滑块的指针不跟着动是为啥啊?那位大神告诉下?
离线
串口调试的结果,显示能够取得新的slider值,但是指针不变,请晕哥,帮忙看下是哪的问题啊?
离线
模拟器试了可以,正常滑动
离线
好的,那我慢慢调试吧
离线
晕哥,你那有触摸屏滑动触摸的程序吗,能发我参考下吗,不知道滑动触摸程序该怎么处理,看了下littlevgl的程序也没看懂,有其他的程序吗?发我参考学习下
最近编辑记录 oldersu (2019-05-14 08:33:37)
离线
在线
好的
离线
晕哥,你那有触摸屏滑动触摸的程序吗,能发我参考下吗,不知道滑动触摸程序该怎么处理,看了下littlevgl的程序也没看懂,有其他的程序吗?发我参考学习下
把触摸驱动写好,落笔抬笔,坐标等参数传递正确,滑动肯定没有问题的。
离线
把触摸驱动写好,落笔抬笔,坐标等参数传递正确,滑动肯定没有问题的。
你那有相关程序吗,参考下,折腾好几天了,没进展
离线
刷新慢是什么问题?有人知道吗
离线
1. 优化一下这个函数 lv_tick_inc(1)
2. 可能的键盘/触摸读取函数阻塞了 UI.
如果是裸奔,键盘/触摸由中断去读数据, 读到队列, 或者更简单一点全局变量里面.
如果是OS, 专门开一个线程去读键盘/触摸数据, 读到队列, 或者更简单一点全局变量里面.
这样操作不会塞住 UI 线程。
UI一旦卡住, 给用户非常不好的体验, 就像早期的安卓机。
在线
这是触摸的程序,如何放到中断
离线
把动画关了,不卡了,但是没有之前的动画效果了
离线
不过还是要找原因,不知道中断如何赋值给这个
indev_drv.read=?
离线
sysEnableCache(CACHE_WRITE_BACK);
使能了系统缓存可以了
离线
不卡了,但是光标闪烁太快,受不了,
离线
改到1000了,还是快
离线
# define LV_TA_CURSOR_BLINK_TIME 10000 /*ms*/
需要修改这个,在lv_conf.h中
离线
一波三折,下一步开始编写界面测试
离线
学习一下
离线
支持,我也用N32905,准备移植这个,谢谢
离线
挖出来学习一下,主要想看看有没加速处理。
离线