1、前言:
开发环境:IAR8.3,STM32F103RE,2.8寸TFTLCD。
屏幕与触控版都正常。
2、现象:
移植后,按按扭没有反应。Debug跟踪发现不能进触控板的读点函数(touchpad_read)中。
3、原因:
初始化函数3中void lv_port_indev_init(void)使用同一个变量对鼠标,按键等多个接口做配置,改变了原有的值。具体如下:
static lv_indev_drv_t indev_drv;
touchpad_init();
/*Register a touchpad input device*/
lv_indev_drv_init(&indev_drv);
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = touchpad_read;
indev_touchpad = lv_indev_drv_register(&indev_drv);
mouse_init();
/*Register a mouse input device*/
lv_indev_drv_init(&indev_drv);
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = mouse_read;
indev_mouse = lv_indev_drv_register(&indev_drv);
。。。
如上可知indev_drv是static的。注册鼠标时,会改变indev_drv.read_cb函数的值。可以推测出lv_indev_drv_register是直接使用indev_drv的变量,而不是做一个拷贝。
4、解决方法:
1)、
将除触控板外的其它函数,用
#if 0
#endif
注释掉。
2)、
如果使用了其它输入设置(比如鼠标),可以多声明几个变量:
static lv_indev_drv_t indev_drv;
static lv_indev_drv_t indev_drv2;
。。。
/*Initialize your touchpad if you have*/
mouse_init();
/*Register a mouse input device*/
lv_indev_drv_init(&indev_drv2);
indev_drv2.type = LV_INDEV_TYPE_POINTER;
indev_drv2.read_cb = mouse_read;
indev_mouse = lv_indev_drv_register(&indev_drv2);
。。。