WhyCan Forum

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132, 微信: whycan_cn (哇酷网/挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-11-21 14:12:28

hxhlb
会员
注册时间: 2019-11-11
累计积分: 21

求助 F1C200s AWTK 界面动画/切换/按下触摸屏闪烁严重

根据坑网上搜索的资料和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的测试方面, 还没有开始动手写程序...

离线

#2 2019-11-21 14:46:03

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 求助 F1C200s AWTK 界面动画/切换/按下触摸屏闪烁严重

是有点抖, 等作者 @lixianjing 上线诊断一下。

离线

#3 2019-11-21 18:58:33

hxhlb
会员
注册时间: 2019-11-11
累计积分: 21

Re: 求助 F1C200s AWTK 界面动画/切换/按下触摸屏闪烁严重

晕哥 说:

是有点抖, 等作者 @lixianjing 上线诊断一下。

晕哥 坛子不能编辑自己的帖子吗? 我发现好多错别字啊.. 真尴尬..

离线

#4 2019-11-21 19:04:48

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 求助 F1C200s AWTK 界面动画/切换/按下触摸屏闪烁严重

没事, 错字才是真实的.

只能编辑3小时内的帖子.

离线

#5 2019-11-22 07:53:58

lixianjing
会员
注册时间: 2019-04-25
累计积分: 52

Re: 求助 F1C200s AWTK 界面动画/切换/按下触摸屏闪烁严重

在 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;
}

离线

#6 2019-11-23 12:51:19

hxhlb
会员
注册时间: 2019-11-11
累计积分: 21

Re: 求助 F1C200s AWTK 界面动画/切换/按下触摸屏闪烁严重

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;
}

不好意思昨天家里有事所以没及时回复.

今天跟踪了一下, 发现根本没有执行这个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)

离线

#7 2019-11-26 16:59:08

hxhlb
会员
注册时间: 2019-11-11
累计积分: 21

Re: 求助 F1C200s AWTK 界面动画/切换/按下触摸屏闪烁严重

顶一下,顶上去!

离线

页脚