请问裸机f1c100s+lvgl可以屏幕旋转90°吗,我限制已经实现了lvgl裸机了,屏幕分辨率是1280*720,但是屏幕是竖屏,不知道怎么样才可以改成横屏,屏幕的驱动器本身不支持90°旋转,,lvgl用的是6.1 ,
离线
硬件不支持的话,可以在绘图驱动哪里软件改,无非是处理xy对应pixel的值
离线
可以的,lvgl8里面有属性 lv_disp_drv_init(&disp_drv);
disp_drv.sw_rotate = 1;
disp_drv.rotated = LV_DISP_ROT_90;
初始化的时候定义一下角度就行了,非常简单
离线
请问有lvgl8.0+rtt的f1c200s历程吗,我一直搞不定,一直报错 6.1.1已经跑通了
8.0出错如下
\ | /
- RT - Thread Operating System
/ | \ 4.0.1 build Nov 21 2021
2006 - 2019 Copyright by rt-thread team
[SFUD] Find a Winbond flash chip. Size is 16777216 bytes.
[SFUD] gd25qxx flash device is initialize success.
Start...
PERIPH_get_pll_clk:600M
CPU_get_clk:704M
AHB_get_clk:200M
APB_get_clk:100M
[2021-11-21 02:10:23.319]# RECV ASCII>
[Thread]Uart2Rec Created.
[Thread]VirCursor Created.
msh />[Thread]GUIThread Created.
lv_example_switch_1
thrd_LVGL_Loop1
Execption:
r00:0x4046af5a r01:0xe9ec686c r02:0x804bd2dc r03:0x00000000
r04:0x800b0a5c r05:0x800b0368 r06:0x000001df r07:0x000001e0
r08:0x00000000 r09:0x00000000 r10:0x8080393c
fp :0x000001e0 ip :0x000000cd
sp :0x80000594 lr :0x804bd75c pc :0x804bd75c
cpsr:0xa0000013
undefined instruction
thread - GUI_Lvgl stack:
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
GUI_Lvgl 11 ready 0x00000044 0x00001000 07% 0x00000012 000
VirCurso 29 suspend 0x0000008c 0x00000800 06% 0x00000014 000
Uart2Rec 10 suspend 0x000000ac 0x00000800 08% 0x00000014 000
tshell 20 suspend 0x00000134 0x00001000 07% 0x0000000a 000
mmcsd_de 22 suspend 0x000000c8 0x00000800 09% 0x00000014 000
tidle0 31 ready 0x00000050 0x00000100 46% 0x0000000e 000
main 10 close
[2021-11-21 02:10:23.380]# RECV ASCII>
0x00000060 0x00000800 26% 0x00000007 000
shutdown...
出错代码在这个地方
while (1)
{
rt_kprintf("thrd_LVGL_Loop1\n");
lv_task_handler();
rt_thread_delay(5);
rt_kprintf("thrd_LVGL_Loop2\n");
}
}
""lv_task_handler();""进入到这里就死了,跟踪进去,是在这个地方死机的
do {
timer_deleted = false;
timer_created = false;
LV_GC_ROOT(_lv_timer_act) = _lv_ll_get_head(&LV_GC_ROOT(_lv_timer_ll));
while(LV_GC_ROOT(_lv_timer_act)) {
/*The timer might be deleted if it runs only once ('repeat_count = 1')
*So get next element until the current is surely valid*/
next = _lv_ll_get_next(&LV_GC_ROOT(_lv_timer_ll), LV_GC_ROOT(_lv_timer_act));
if(lv_timer_exec(LV_GC_ROOT(_lv_timer_act))) {
/*If a timer was created or deleted then this or the next item might be corrupted*/
if(timer_created || timer_deleted) {
TIMER_TRACE("Start from the first timer again because a timer was created or deleted");
break;
}
}
LV_GC_ROOT(_lv_timer_act) = next; /*Load the next timer*/
}
这里 if(lv_timer_exec(LV_GC_ROOT(_lv_timer_act)))没返回死机了
离线
@smiletiger
解决了吗?我也遇到了类似的问题?UI卡死了,我怀疑是这里导致的断言错误进入了死循环导致的
/*Add a custom handler when assert happens e.g. to restart the MCU*/
#define LV_ASSERT_HANDLER_INCLUDE <stdint.h>
//#define LV_ASSERT_HANDLER while(1);
#define LV_ASSERT_HANDLER do{printf("[%s:%d] assert error\n",__FUNCTION__,__LINE__);}while(1); /*Halt by default*/
这段代码在lv_conf.h中,注释的那行是原来的,下面的那行是我修改的,目前修改后的还在测试
最近编辑记录 981378640 (2021-12-03 10:31:53)
离线
@981378640
6.几的版本升级8.几的,我以前也遇到过死机,后面改显示和触摸驱动注册那部分的变量全改为静态的就可以了,copy了很多大神的代码,我有RTT+LVGL8.0,文件系统,FREETYPR字体,png,gif解码这些都集合了的,需要可以留邮箱
在线
现在也是,不知道怎么解决,旋转90度只能单缓存,而且很容易就卡死了
离线
@642242855
您好,方便给一份吗,3453636314@qq.com
离线
lvgl6有没有接口可以直接旋转的?
离线
@642242855
大佬,能方便给一份吗?
mc233@qq.com
离线
@642242855
大佬求一份
743393648@qq.com
离线
可以的,lvgl8里面有属性 lv_disp_drv_init(&disp_drv);
disp_drv.sw_rotate = 1;
disp_drv.rotated = LV_DISP_ROT_90;
初始化的时候定义一下角度就行了,非常简单
学习了,谢谢。
离线
@642242855
能麻烦发我一份给我参考一下吗?编译完LVGL8.2,死的样子和上面的一样。
离线
@smiletiger
裸机请问你如何跟踪进去的?
离线
我现在用LVGL-latest的版本,也就是9.0.0的版本,也是死机!!!
\ | /
- RT - Thread Operating System
/ | \ 4.1.1 build Oct 30 2022 19:25:52
2006 - 2022 Copyright by RT-Thread team
clk_divider_set_rate 29491216 198000000 0clk_divider_set_rate 48 198000000 0periph_get_pll_clk:600000000
cpu_get_clk:408000000
ahb_get_clk:200000000
apb_get_clk:100000000
msh />not used
Execption:
r00:0x80551f84 r01:0x8058ae98 r02:0x00000005 r03:0x00000016
r04:0x805119d0 r05:0x8058aeb8 r06:0x8058ae90 r07:0x000001df
r08:0x00000000 r09:0x000001e0 r10:0x00000000
fp :0x000027d1 ip :0x000001c1
sp :0x8058ae4c lr :0x80037200 pc :0x80037200
cpsr:0x600000d3
shutdown...
哪个大神能看看是什么问题
离线
我用的是lichee nano+Thread 4.1.1 + LVGL-latest,跑 LVGL v7.7.1的版本都跑通了,上到LVGL-8.0以后就没跑通过
离线
@642242855
能麻烦发我一份给我参考一下吗?编译完LVGL9.0.0,死的样子和上面的一样。
312038951@qq.com
离线
Lvgl8.2,一样的问题,大家有解决吗,709691151@qq.com
离线
Lvgl8.2,一样的问题,大家有解决吗,709691151@qq.com
这里放开定义:启用竖屏
https://gitee.com/kasira/f1c200s_rtt_lvgl830/blob/master/applications/lv_conf.h
//#define LV_VERTICAL_DISPLAY // 定义竖屏显示 但是软件转换影响性能 最好能找到竖屏
// 这里配置 sw_rotate 和 rotated
https://gitee.com/kasira/f1c200s_rtt_lvgl830/blob/master/applications/lv_port_disp.c
#if defined LV_VERTICAL_DISPLAY
disp_drv.sw_rotate = 1; // add for rotation
disp_drv.rotated = LV_DISP_ROT_90; // add for rotation
#endif
如果显示不全的话 使用 LV_DISP_ROT_270 这个可以显示全 或者修改 338行
if (area->x2 < 0 || area->y2 < 0 || area->x1 > hres - 1 || area->y1 > vres - 1){
lv_disp_flush_ready(disp_drv);
return;
}
将x y 调换一下
我是调成功了的
离线
请问裸机f1c100s+lvgl可以屏幕旋转90°吗,我限制已经实现了lvgl裸机了,屏幕分辨率是1280*720,但是屏幕是竖屏,不知道怎么样才可以改成横屏,屏幕的驱动器本身不支持90°旋转,,lvgl用的是6.1 ,
请问您的是什么屏幕,如果是SPI协议的某些小屏,在初始化代码里面就可以修改的了
离线