MTK MMI调试代码归类
在debug时,最重要的是能够准确快速的定位代码,一般常用的有如下几种方式
1.在模拟器中使用断点
F9- 设置/取消断点
模拟器中断跟踪断点设置函数:
// 触屏相关 wgui_touch_screen.c
wgui_general_pen_down_hdlr // 触摸屏按下函数
wgui_general_pen_move_hdlr // 触摸屏移动函数
wgui_general_pen_down_hdlr // 触摸屏松开函数
wgui_general_pen_repeat_hdlr // 重复
wgui_general_pen_abort_hdlr // 放弃操作
在wingui.c 此函数中setup_UI_wrappers有相关全局变量的初始赋值和定义
EntryNewScreen // 进入一个新的screen都会调用的函数
ExecuteCurrKeyHandler // 执行按键的函数
ExecuteCurrHiliteHandler
ExecuteCurrHiliteHandler_Ext // 执行当前高亮的函数
ExecuteCurrProtocolHandler //执行当前协议栈的函数
execute_softkey_function //执行softkey的函数
UI_fill_rectangle // 填充一个矩形框
UI_draw_vertical_line // 画一条垂直线
UI_draw_horizontal_line // 画一条水平线
UI_draw_dotted_horizontal_line //水平虚线
UI_draw_dotted_vertical_line // 垂直虚线
UI_print_text // 画一个字符串
UI_print_bordered_text // 画一个有边色字符串
UI_print_text_n // 画一个有n个字符的字符串
UI_print_bordered_text_n // 画一个有n个字符的带边框色字符串
UI_print_bordered_character //画一个的带边框色字符
UI_print_character //画一个字符
gdi_image_draw //从绘图事件开始跟踪的函数
_show_image // 画一个gif
_show_transparent_image //画有设透明色的图片
_show_animation_frame // 画设置祯数的图片
gdi_layer_blt_previous // 同一个layer刷新某一区域的函数
gdi_layer_blt_ext // 几个layer叠加显示时刷新某一区域的函数
UI_BLT_double_buffer //刷新一块区域
UI_set_font //设置字体
3。在模拟器中设置变量值改变的断点
除了可以设置函数外,还可以对变量进行设置。按ALT+F9 即会弹出如下对话框图一
图一
在Location\Data\Messages菜单栏里选Data。把你想跟踪的变量如UI_device_width复制到第一栏里,如下所示图二
图二
Ok即可。运行当此变量改变时就会出现断点。
当模拟器无法定位时还可以通过如下几种方式
4。搜索菜单ID 如MAIN_MENU_ENTERTAINMENT_MENU_ID
5。搜索字符串ID如MAIN_MENU_MENU_TEXT
6。搜索图片ID 如MAIN_MENU_PHONEBOOK_ICON
如蓝牙、彩信等一些无法在模拟器上调试的界面就可以通过显示的图片或字符串在工程里搜索,再在搜索结果中用排除定位。
还有一些无法确定流程,而模拟器又无法使用的就必须要连到真机调试了。这种情况可以用超级终端或者Catcher调试
7. 超级终端调试:
首先设置串口的端口,在nvram_common_config.里如下设置
图三
图三中选中的项为设置超级终端使用的端口,上面一项为Catcher使用端口,设为0即为UART1。在想跟踪的代码处加如下一段
打开 程序->附件->通讯->超级终端,设置好COM端口和波特率(一般为115200)即可
8.Catcher调试
首先设置Catcher的端口,在nvram_common_config.里如下设置
图四设置Catcher调试端口为1,在想跟踪的代码处加如下一段
打开Catcher即可跟踪,此处就不写Catcher的使用了。
另:也可以在输入*#3646633*(mtk默认)进入工程模式->设备->UART设置端口。