根据坑网上搜索的资料和github上的文档, 对AWTK进行了一直, 系统是全志tina, 但是现在awtk在静态显示界面很好, 遇到窗口动画, 或者按下触摸屏时, 就开始频繁闪烁, 包括出现的屏保界面, 效果请看视频.
不知道如何解决, 就想请大家告知一下对f1c200s移植时的一些注意事项, 包括awtk_config.h的定义, 请大家帮助!
此处是我进行一直的awtk_config.h:
/**
* File: awtk_config.h
* Author: AWTK Develop Team
* Brief: config
*
* Copyright (c) 2018 - 2019 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2018-09-12 Li XianJing <xianjimli@hotmail.com> created
*
*/
#ifndef AWTK_CONFIG_H
#define AWTK_CONFIG_H
/**
* 嵌入式系统有自己的main函数时,请定义本宏。
*
* #define USE_GUI_MAIN 1
*/
/**
* 如果需要支持预先解码的位图字体,请定义本宏。一般只在RAM极小时,才启用本宏。
* #define WITH_BITMAP_FONT 1
*/
/**
* 如果支持png/jpeg图片,请定义本宏
*
* #define WITH_STB_IMAGE 1
*/
#define WITH_STB_IMAGE 1
/**
* 如果用stb支持Truetype字体,请定义本宏
*
* #define WITH_STB_FONT 1
*/
/**
* 如果用freetype支持Truetype字体,请定义本宏。
*
* #define WITH_FT_FONT 1
*/
#define WITH_FT_FONT 1
/**
* 如果支持从文件系统加载资源,请定义本宏
*
* #define WITH_FS_RES 1
*/
#define WITH_FS_RES 1
/**
* 如果定义本宏,使用标准的UNICODE换行算法,除非资源极为有限,请定义本宏。
*
* #define WITH_UNICODE_BREAK 1
*/
#define WITH_UNICODE_BREAK 1
/**
* 如果定义本宏,将图片解码成BGRA8888格式,否则解码成RGBA8888的格式。
* 当硬件的2D加速需要BGRA格式时,请启用本宏。
*
* #define WITH_BITMAP_BGRA 1
*/
/**
* 如果定义本宏,将不透明的PNG图片解码成BGR565格式,建议定义。
* 另外和LCD的格式保存一致,可以大幅度提高性能。
*
* #define WITH_BITMAP_BGR565 1
*/
#define WITH_BITMAP_BGR565 1
/**
* 如果不需输入法,请定义本宏
*
* #define WITH_NULL_IM 1
*/
/**
* 如果有标准的malloc/free/calloc等函数,请定义本宏
*
* #define HAS_STD_MALLOC 1
*/
/**
* 如果有标准的fopen/fclose等函数,请定义本宏
*
* #define HAS_STDIO 1
*/
/**
* 如果有标准的pthread等函数,请定义本宏
*
* #define HAS_PTHREAD 1
*/
/**
* 如果有优化版本的memcpy函数,请定义本宏
*
* #define HAS_FAST_MEMCPY 1
*/
/**
* 如果出现wcsxxx之类的函数没有定义时,请定义该宏
*
* #define WITH_WCSXXX 1
*/
/**
* 如果启用STM32 G2D硬件加速,请定义本宏
*
* #define WITH_STM32_G2D 1
*/
/**
* 如果启用NXP PXP硬件加速,请定义本宏
*
* #define WITH_PXP_G2D 1
*/
/**
* 在没有GPU时,如果启用agge作为nanovg的后端(较agg作为后端:小,快,图形质量稍差),请定义本宏。
*
* #define WITH_NANOVG_AGGE 1
*/
#define WITH_NANOVG_AGGE 1
/**
* 在没有GPU时,如果启用agg作为nanovg的后端(较agge作为后端:大,慢,图形质量好),请定义本宏。
* 注意:agg是以GPL协议开源。
*
* #define WITH_NANOVG_AGG 1
*/
/**
* 如果启用鼠标指针,请定义本宏
*
* #define ENABLE_CURSOR 1
*/
/**
* 对于低端平台,如果不使用控件动画,请定义本宏。
*
* #define WITHOUT_WIDGET_ANIMATORS 1
*/
/**
* 对于低端平台,如果不使用窗口动画,请定义本宏。
*
* #define WITHOUT_WINDOW_ANIMATORS 1
*/
/**
* 对于低端平台,如果不使用对话框高亮策略,请定义本宏。
*
* #define WITHOUT_DIALOG_HIGHLIGHTER 1
*/
/**
* 对于低端平台,如果不使用扩展控件,请定义本宏。
*
* #define WITHOUT_EXT_WIDGETS 1
*/
/**
* 对于低端平台,如果内存不足以提供完整的FrameBuffer,请定义本宏启用局部FrameBuffer,可大幅度提高渲染性能。
*
* #define FRAGMENT_FRAME_BUFFER_SIZE 32 * 1024
*/
#endif /*AWTK_CONFIG_H*/
视频效果:
目前还是处于demoui的测试方面, 还没有开始动手写程序...
离线
是有点抖, 等作者 @lixianjing 上线诊断一下。
晕哥 坛子不能编辑自己的帖子吗? 我发现好多错别字啊.. 真尴尬..
离线
在 awtk-port/fb_info.h 中,把FBIO_WAITFORVSYNC的执行结果打印出来看看:
static inline void fb_sync(fb_info_t* info) {
int ret = 0;
int zero = 0;
ret = ioctl(info->fd, FBIO_WAITFORVSYNC, &zero);
log_debug("FBIO_WAITFORVSYNC: %d %d\n", ret, zero);
return;
}
离线
在 awtk-port/fb_info.h 中,把FBIO_WAITFORVSYNC的执行结果打印出来看看:
static inline void fb_sync(fb_info_t* info) { int ret = 0; int zero = 0; ret = ioctl(info->fd, FBIO_WAITFORVSYNC, &zero); log_debug("FBIO_WAITFORVSYNC: %d %d\n", ret, zero); return; }
不好意思昨天家里有事所以没及时回复.
今天跟踪了一下, 发现根本没有执行这个fb_sync函数.
此处还有一个我修改的地方, 就是原本我交叉编译完成demoui后, 会出现段错误, 经过调试发现是
if (fb_is_2fb(fb)) {
log_debug("%p, %d, %p\n", fb->fbmem0, size, fb->fbmem1); // 自己加的调试语句
fb->fbmem1 = fb->fbmem0 + size;
memset(fb->fbmem1, 0xff, size); // 段错误所在
}
所以我从上面分配内存的地方进行了修改,
// fb->fbmem0 = (uint8_t*)mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fb->fd, 0); // 变更为下面, size*2
fb->fbmem0 = (uint8_t*)mmap(0, size*2, PROT_READ | PROT_WRITE, MAP_SHARED, fb->fd, 0);
修改了之后就没有段错误了.
之前我并没有进行完整的跟踪, 现在看来, fb_sync是fb_is_1fb时候用的函数, 而我经过fb_open后竟然判定的是fb_is_2fb, 难道是我系统参数某个地方设置错了??
---------------- 更新 -----------------
在去掉了 tslib 的log_debug输出, keyboard 和 mouse 两条线程, 再去掉 lcd_mem_linux_swap 函数中的 printf 后, 界面有了很大的提升, 闪屏明显变少了. 但是核心问题应该不在这里.
一下是自己加了一些输出后的结果:
./demoui
app_root_is_valid:43 app_root != NULL
try /mnt/SDCARD/release/bin
app_root=/mnt/SDCARD/release
========> filename: /dev/fb0
======>
id: (null)
smem_start: 82100000
smem_len: 3072000
type: 0
type_aux: 0
visual: 2
xpanstep: 1
ypanstep: 1
ywrapstep: 0
line_length: 3200
mmio_start: 00000000
mmio_len: 0
accel: 0
capabilities: 0
fb_info_t: /dev/fb0
fb_info_t: xres=800 yres=480 bits_per_pixel=32 mem_size=1536000
fb_info_t: red(16 8) green(8 8) blue(0 8)
!!!, 0xb69f9000, 1536000, 0
!!!1
!!!2
line_length=3200 mem_size=1536000 smem_len=3072000
xres_virtual =800 yres_virtual=960 xpanstep=1 ywrapstep=0
========> fb_open success
========> s_ttyfd >= 0
========> fb is 2fb
========> bgra8888!!!!!!
========> awtk-port/lcd_linux_fb.c:223
ratio=1.000000 800 480
Build at: Nov 21 2019 13:59:50
window preload open
window system_bar open
main
window main open
window preload close
main
main
tslib pointer down:611 418
tslib pointer up:200 396
tslib pointer down:688 253
tslib pointer up:151 316
tslib pointer down:252 351
tslib pointer up:252 351
func_call_parser_parse:42 tokenizer_has_more(tokenizer) == TRUE
func_call_parser_parse:42 tokenizer_has_more(tokenizer) == TRUE
func_call_parser_parse:42 tokenizer_has_more(tokenizer) == TRUE
func_call_parser_parse:42 tokenizer_has_more(tokenizer) == TRUE
ignore_user_input
main to_background
window svg_image open
svg_image
tslib pointer down:781 31
tslib pointer up:781 31
tslib pointer down:777 24
tslib pointer up:777 24
EVT_REQUEST_CLOSE_WINDOW
ignore_user_input
tslib pointer down:775 21
animating ignore input
animating ignore input
animating ignore input
tslib pointer up:775 21
animating ignore input
animating ignore input
animating ignore input
animating ignore input
main
widget_get_prop:1426 widget != NULL && name != NULL && v != NULL
widget_get_prop:1426 widget != NULL && name != NULL && v != NULL
widget_get_prop:1426 widget != NULL && name != NULL && v != NULL
widget_get_prop:1426 widget != NULL && name != NULL && v != NULL
widget_get_prop:1426 widget != NULL && name != NULL && v != NULL
widget_get_prop:1426 widget != NULL && name != NULL && v != NULL
widget_get_prop:1426 widget != NULL && name != NULL && v != NULL
widget_get_prop:1426 widget != NULL && name != NULL && v != NULL
main to_foreground
tslib pointer down:710 394
tslib pointer up:46 452
tslib pointer down:708 390
tslib pointer up:95 418
tslib pointer down:658 303
tslib pointer up:117 323
tslib pointer down:443 273
tslib pointer up:443 273
on_app_exit
这是带有 lcd_mem_linux_swap 的调试输出结果(部分):
./demoui
app_root_is_valid:43 app_root != NULL
try /mnt/SDCARD/release/bin
app_root=/mnt/SDCARD/release
========> filename: /dev/fb0
======> fb->fix:
id: (null)
smem_start: 82100000
smem_len: 3072000
type: 0
type_aux: 0
visual: 2
xpanstep: 1
ypanstep: 1
ywrapstep: 0
line_length: 3200
mmio_start: 00000000
mmio_len: 0
accel: 0
capabilities: 0
fb_info_t: /dev/fb0
fb_info_t: xres=800 yres=480 bits_per_pixel=32 mem_size=1536000
fb_info_t: red(16 8) green(8 8) blue(0 8)
line_length=3200 mem_size=1536000 smem_len=3072000
xres_virtual =800 yres_virtual=960 xpanstep=1 ywrapstep=0
========> fb_open success
========> s_ttyfd >= 0
========> fb is 2fb
========> bgra8888!!!!!!
========> awtk-port/lcd_linux_fb.c:223
ratio=1.000000 800 480
Build at: Nov 21 2019 13:59:50
window preload open
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
window system_bar open
main
window main open
window preload close
main
main
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
tslib pointer down:660 396
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
tslib pointer up:212 408
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
tslib pointer down:700 359
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
tslib pointer up:154 396
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
tslib pointer down:166 394
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
tslib pointer up:603 385
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
FBIOPAN_DISPLAY ret=0 yoffset=480
FBIOPAN_DISPLAY ret=0 yoffset=0
.....
我现在比较纠结的是 为什么屏幕会是 BGRA8888, 32位像素, 这个我改sys_config.fex 貌似不大好用,,我也是一知半解无从下手.
最近编辑记录 hxhlb (2019-11-23 13:52:40)
离线
顶一下,顶上去!
离线
关注,正考虑使用f1c200s+awtk
离线
顶一下,顶上去!
遇到同样问题了,Tina Linux自带的minigui和播放视频正常,AWTK就闪烁严重啊
兄弟,你找到原因了吗
离线
遇到同样问题了,Tina Linux自带的minigui和播放视频正常,AWTK就闪烁严重啊
兄弟,你找到原因了吗
为撒我视频播放都闪烁呢 方便分享一下配置 和测试方法么
离线
我运行qt也遇到这个抖屏问题了,感觉是cpu刷不过来,说明书说支持1280x720,60fps
离线
这篇文章有介绍几种情况下的闪烁问题 — 嵌入式中 gui 显示单缓冲、双缓冲、三缓冲的原理 https://blog.csdn.net/Longyu_wlz/article/details/96474333
离线