mtk平台软件调试方法与技巧
MTK的音频调试方法

MTK的音频调试方法音频调试小结关于音频的问题,结构有很大的影响。
音频的问题,相当大的比重是由于MIC、REC、SPEAKER的密封不好在壳体内(尤其是直板机)形成共腔体状态,声音在腔体内流动造成声音效果不好。
所以说,在音频调试之前首先要检查一下被调试手机的结构尤其是各个声腔是否密封良好。
以下音频调试方法适用于结构密封良好状况下。
一般:首先连接手机,进入META调试状态,在调试状态下选择“AUDIO TOOL”,点击“AUDIO TOOL”将切换到以下界面。
上图所示为音频调试界面先点击“Change NVRAM DB”改变相应的数据库文件再点击“Upload flash”从手机中读取音频数据 1)手机的三种状态,Normal ===〉正常模式;Headset ===〉耳机模式;Hand free ===〉免提模式2)对应的是各个参数的默认等级3)可调参数列表Key Tone:按键音量Microphone:MIC 音量 Speech:听筒(REC)音量 Side Tone:侧音(推荐值为“0”)Melody: MP3音量 4)点击“3”中的各个button会有如“4”的内容,该内容是指参数的各级增益ADC值,其中level 0------level 7对应的是手机中音量调节的1---7级(MIC和side T one 只有一级)根据用户的感觉调节参数,以得到所需的音质效果。
以上参数可调范围为0—255,请酌情调整。
ADC值越大对应的增益越高。
调整完成后点击“Download flash”将调整好的音频数据写入手机中。
关闭调试窗口,点击“Reconnect”断开连接。
测试调试效果。
按照上述方法调试直到调试出满意的效果为止。
当全部音频效果都达到满意后,点击“Generate nvram_default_audio.c”保存成“.c”文件交给相关软件人员集成到相关的程序中。
特殊:对于一些回音比较严重的情况,可以对以下参数进行修改,但切忌修改前记录原参数数值,以免参数修改错误无法恢复。
mtk平台软件调试方法与技巧

mtk 模拟器调试前篇文章介绍了手机调试的TRACE技巧,MTK手机调试是比较简单的,除了打TRACE,找ASSERT,分析DUMP外,剩下的就是经验了,有经验的人看到现象就能猜到问题出在什么地方,简单看一下TRACE只是为了确认自己的猜测.初涉此道的朋友往往需要时间,慢慢积累经验.要达到熟练,就需要有空的时候多读多研究代码.熟练的掌握了代码,解决问题就会熟能生巧.MTK的模拟器调试说没技巧也是对的,说有技巧也不错.因为模拟器的技术与其说是MTK经验,不如说是VC经验.由于模拟器能在没有样机的情况做大量的UI方面的开发,同时模拟器具有快捷,所见即所改等优点,因此,受到很多开发老手的青睐.熟练掌握模拟器使用技巧,对于提高工作效率,节省资源具有很积极的意义.工欲善其事,必先利其器.欲了解模拟器调试,就要先了解VC使用.VC调试过程中经常使用的快捷键如下:vc++断点的使用:按F9(设置断点),F5调试,F10单步调试,shift+F5退出调试F10单语句执行,F11单指令执行,Ctrl+F10执行至光标处;F9按行设置/取消断点, Alt+F9可按行,按数据或按消息设置断点;调试时,按Alt+3打开跟踪窗口,Alt+4打开变量窗口,Alt+5打开寄存器窗口,Alt+6打开内存窗口,Alt+7打开堆栈窗口,Alt+8打开汇编指令窗口;1.只要你有源代码,拥有一个模拟器是一件很容易的事.当然,有些情况下,这对于初入MTK的人来说,也是困难的,特别是在一些代码管理不善,公司人员众多,员工流动频繁的公司,你永远想象不出他们的代码会有多糟.不过一般情况下,我到一个新公司,都会试着去使用他们的代码编译得到模拟器,不管他们的代码多么糟,我总能快速的编出模拟器来.只要三个步骤: a.在编译模拟器前请关掉所有SP的宏,这是很重要的,很多SP都不提供在模拟器下运行的库,所以一个项目SP越多,在模拟器下,他无法识别的函数也会越多b.在编译过程中遇到错误,可以把所有与显示无关的代码全部使用#ifdef WIN32宏括起来,把所有不认识的类型使用typedef int xxx;重定义.把一些不能识别的宏定义使用WIN32括起来重定义一下c.在生成MODIS时,会遇到大量不认识的函数,如果少于50个,全部建成void xxx(){}类型的空函数.如果多于一百个,尝试查找这些函数的来源,如果是相关SP的,就再次补充关掉相关SP.当然如果你不怕麻烦,也可以把这一百个函数建成空函数.一般来说,把所有第三方功能和与MTK无关的功能关掉的话,不能识别的函数一般不会超过十个.经过这样三步,一般情况下你都能得一个差不多可以使用的模拟器.有了模拟器,你就可以进行下面的工作了.如果你仍然无法获得模拟器,建议咨询你的项目领导,如果你的领导也无法解决,说明这个软件组是一个组员变动很快,或者说缺乏条理性的部门,当然也有可能这个部门的程序员都是一些MTK的顶尖层高手,他们的程序从来不需要调试.总之这是会让人疯狂的部门.2.如果你顺利到到一个模拟器,那么就可以开始调试了.首先说一下断点,VC中的断点分三大类,一类是本地断点,一类是数据断点(也称之为条件断点,有人称之为高级断点),还是一类是消息断点;这三类断点分别对应于快捷键"ALT+F9"打开的对话框中三个选项卡.由于消息断点是用于跟踪WIN的消息,所以在MTK中用不着.在模拟器中一般我们只使用本地断点与数据断点.本地断点和数据断点在BUG调试中举足轻重,熠熠生辉。
MTK平台软件开发调试工具使用说明

MTK平台软件开发调试工具使用说明
MTK平台软件开发调试工具
使用说明
仅提示工具的基本操作流程
2014年08月
目录
一、体验准备 (3)
二、FlashTool软件下载 (4)
三、sscom32串口调试 (6)
四、Meta设备数据编辑 (7)
五、Catcher系统日志 (8)
一、体验准备
软件发布一般包括下面三个部分:
软件下载工具如下:
使用串口或者USB下载均需提前安装驱动,本文仅针对串口进行说明,先安装PL2303_Prolific_DriverInstaller_v1417.exe
二、FlashTool软件下载
设备关机后,通过串口线连接计算机,启动FlashT ool准备下载,界面如下:
软件下载进度如下:
3、说明
软件小改动,为方便调试,一般选择下载;若软件前后版本差异大,需要格式化升级,然后重新写入IMEI串号、配置参数。
三、sscom32串口调试
四、Meta设备数据编辑
在关机状态下操作设备内的参数,先关机连接计算机:
设备与Meta连接成功后界面如下:
五、Catcher系统日志
Catcher工具一般是在设备运行异常,需要分析软件bug时使用,该工具与前面串口调试工具冲突。
软件运行日志信息默认以设备UART1输出到串口,使用catcher之前,可以手动使用Meta修改日志输出模式,将信息输出到Catcher,也可使用指令自动完成。
按如下步骤将日志默认的串口输出改为catcher输出:
配置完成后不能再使用串口工具,按如下方法加载dataBase启动catcher:
配置端口:
查看日志信息:。
MTK平台手机Atedemo校准调试的原理及方法

MTK-atedemo工具的基本使用
MTK-atedemo工具的基本使用
MTK-atedemo工具的基本使用
• Database文件: Database是在手机软件编译生成时候自动生成的 对应文件。在设置的此项内容的时候,一定要要 选择与此手机软件版本对应的,否则容易出问题, 比如:校准完以后的数据写不进手机等等。 Database文件就好比是地址译码器。所有手机上 的内容都会在手机内存中有个固定的物理地址, 就通过此文件把需要从手机读或者写的时候能从 正确的位置上读或者写。
校准原理
然后计算出每一等级的误差功率: Error[V]= Targer_power[V]-Measured_power[V] 计算出每一功率等级对应的offset值: PL_offset=Erro[V]/slope 把PL_offset 保存到EEP中
MTK-atedemo工具的基本使用
MTK-atedemo工具的基本使用
校准原理
• 对应的具体电路图:
校准原理
校准原理
• 26MHz AFC校准: 1、目的:使得在室温下TCXO稳定工作在 26MHz情况的ADC值和斜率slope (Hz/ADC) 由于TCXO本身就有误差,再加上老化等 原因,TCXO的输出不会在26MHz,因此需 要通过适当改变基带IC控制信号AFC的电 压(ADC值),使得TCXO能工作在 26MHz,满足ETSI规范要求
MTK-atedemo工具的基本使用
• 校准初始化文件(*.ini): 在校准的时候,需要有个初始值,然后对 此初始值进行校准,校准到需要的值上去。 此初始化文件就是在校准的时候把此文件 的内容写入到手机中去。 如果把此文件正确的写入到手机相应的内 存中去,就需要Database
MTK 平台校准原理

MTK 平台校准原理一.AFC(自动频率控制)校准校准目的:校准AFC DAC 值与TCVCXO 输出频率(26MHz)之间的对应关系,使得测试接收信号的频率误差在允许范围之内。
校准步骤:1. 控制综测仪Agilent 8960 或者R&S CMU200 设定在BCCH(广播控制信道)中的某一个信道arfcn_C0_GSM(可以为1-124 中的一个,由板测软件初始设定),并设定发射功率为PDL(dBm)(由板测软件初始设定);2. 设定手机中频部分的接收增益为:-35-PDL(dB),AFC_DAC值为DAC1(由板测软件初始设定),软件发出AFC测试请求,在arfcn_C0_GSM信道上得到N_AFC个采样值;3. 等待CPU计算出接收I/Q信号的频率平均误差:△f1;4. 再设定手机中频部分的接收增益为:-35-PDL(dB),AFC_DAC值为DAC2(由板测软件初始设定),这里DAC2>DAC1,软件发出AFC测试请求,在测量信道上的到N_AFC个采样值;5. 等待CPU计算出接收I/Q信号的频率平均误差:△f2;6. 计算AFC DAC 斜率为:Slope=(△f1-△f2)/(DAC2-DAC1);由得到的Slope 值及DAC1 再计算得到初始ADC 值:INIT_AFC_DAC 为:Use Default Value=△f1/ Slope+DAC1;注:arfcn_C0_GSM、PDL、DAC1、DAC2、N_AFC均在板测配置文件meta_6218B.CFG中初始设定,如下:arfcn_C0_GSM = 70;定义用于AFC 测试的信道为70;P_DL = -60;定义综测仪发射功率为-60dBm;N_AFC = 15;定义AFC 测量此时为15 次;DAC1=4000;定义DAC1 初始值为4000;DAC1=5000;定义DAC2 初始值为5000;判断该项板测结果是否通过,即看得到测量结果值:Slope、INIT_AFC_DAC 是否在上下限值之内,该限值亦在板测配置文件meta_6218B.CFG 中设定,如下:[AFC table] //AFC DAC 参数表MAX_INIT_AFC_DAC = 7000MIN_INIT_AFC_DAC = 2000;(即定义INIT_AFC_DAC最大不超过7000,最小不小于2000)MAX_AFC_SLOPE = 4.0MIN_AFC_SLOPE =2.3;(即定义Slope 值最大不超过4.0,最小不小于2.3)下图为测量频率平均误差对DAC 值曲线,呈线性关系,直线的斜率为Slope。
MTK平台生产软件 使用说明

版本号: 编号: 编制: 日期:
1.测试流程
1.1 SMT 后段测试流程图 (其中软件下载、BSN 写入、校准、综测、功能测试有对应的软件)
图1 1.2 组装测试流程图
( 其中软件升级、整机终测、写IMEI 号有对应的软件)
图2
2.下载
2.1 概述 • MTK 系列主板存储系统有两个Flash 构成,一个是主Flash,用于存放手机代码部分和其他参数;
使用。另外工程人员可以通过口令进入到设置模式下,改变一些常规的设置,而高级的设置则需要 工程人员到相应的配置文件里面修改。
MTK_ATEDEMO.EXE 工具校准项分为射频和基带两个部分,射频部分包括AFC 、APC 、 Path Loss, 基带部分包括ADC • AFC 自动频率控制 • APC 自动功率控制 • Path Loss 接受增益控制 • ADC 电池电量校准
4.2 软件安装
MTK_ATEDEMO.EXE 安装非常简单,只需将整个MTK_ATEDEMO.EXE 目录Copy
到本地即可。如果想删除只需Delete 整个目录。 4.3 硬件环境 4.3.1 设备清单:
• 工控机:Generic Pentium III or above PC • 测试仪:Agilent 8960 、CMU200 • 数控电源:Agilent66xx 、Keithly23xx • GPIB 卡:NI、Agilent(and Driver) • RF Cable、测试线/夹具
另外一个NAND Flash,用于存放MP3。 • 图1 中的下载工位(SMT 后段) 是将手机软件的SOFT 代码部分下载到主板上的Flash 并且将
参数格式化,而图2 中的下载(升级) 工位( 组装段)只是将手机软件的SOFT 代码部分更
MTK平台终端校准软件操作说明V1.0
技术文件技术文件名称:MTK平台终端校准软件操作说明技术文件编号:版本:V1.0共页(包括封面)拟制朱世鸿审核会签标准化批准雅为信息技术(上海)有限公司FAITH CONCEPT Co., LTD修改记录目录1编写目的 (3)2校准项目 (3)2.1AFC自动频率校准: (3)2.2APC自动功率校准: (3)2.3APOC发射频率响应校准: (3)2.4P A TH L OSS 接收增益校准: (3)2.5ADC电池电量校准: (4)3软件安装 (4)4硬件环境 (4)4.1设备清单: (4)4.2连接方式: (4)4.3仪器连接检查: (4)5设置 (5)5.1系统设置: (6)5.2ADC数据和线损设置: (7)5.3NVRAM与C HIP 设置: (7)5.4校准检查标准设置: (8)5.5APOC S ETTING (9)6操作 (10)7故障处理 (10)1编写目的编写本文件的目的在于详细地说明基于MTK平台的GSM终端校准软件的使用目的和操作过程,以便于对校准软件的更好操作。
由于在生产手机时,所用元器件的绝对精度通常不足以满足设备频率、功率电平和其它参数的性能目标。
校准就成为生产中不可或缺的一环, 使元器件能够满足设备频率等性能指标。
如果使用昂贵的、精度更高的、一致性更好的元器件,可以保证手机性能的一致性,就可以省去这个环节。
但是,在现实情况下,每个无线设备生产厂商都刻意要给用户提供价廉物美的产品,故为保证每个手机的性能指标,还是更多的进行手机校准。
本次介绍的校准软件是基于MTK方案。
2校准项目2.1AFC 自动频率校准:手机所发射出去的信号能否被其它接收设备正确识别、解调出来,是取决于发射信道上的中心频率。
自动频率校准就是保证发射信道上的中心频率的准确性。
无线设备一般都设计一个数字压控振荡来保证发射和接收频率的精度。
校准频率的全部物理含义就是精确的实测出数字压控振荡的斜率和节距,将此数学模型写入设备中。
针对MTK平台下-LCD调试步骤以及常见的一些问题
};
void LCD_FunConfig(void)
{
MainLCD = &LCD_func_S6D04H0;
#ifdef DUAL_LCD
SubLCD =
#endif
}
LCD的初始化程序就是在LCD_Init_S6D04H0();这个函数里面写,如下所示:
void LCD_Init_S6D04H0(kal_uint32 bkground, void **buf_addr)
/*Engineering mode*/
LCD_GetParm_S6D04H0,
LCD_SetBias_S6D04H0,
LCD_Contrast_S6D04H0,
LCD_LineRate_S6D04H0,
LCD_Temp_Compensate_S6D04H0
#ifdef LCM_ROTATE_SUPPORT
…
…//中间这一部分是LCD的初始化代码,一般LCD厂会提供。
{
kal_uint16 i,j;
for(i=0;i<LCD_WIDTH;i++)
{
for(j=0;j<LCD_HEIGHT;j++)
{
LCD_DataWrite_CMD(0x0000);
}
}
}//这部分是给屏刷一满屏单色
}
为了验证LCD的初始化程序是否正确我们可以通过把LCD_BlockWrite_S6D04H0();LCD_EnterSleep_S6D04H0();LCD_ExitSleep_S6D04H0();这几个函数RETURN掉,再通过刷一屏单色来看,通过修改上面红色部分的参数就可刷出不同颜色出来,0X0000刷出来的是黑色,0X00FF是蓝色。一般来说如果刷出整屏单色那初始化就是正确的,否则初始化代码就不对的。
我在MTK平台下调试音频ALSA
我在MTK平台下调试⾳频ALSA#硬件原理图因为是我们公司的项⽬,我就不能把完整的原理图给出来。
因为两个MIC不涉及机密,跟MTK的公版是⼀样的。
可以给出来⼤家看看。
这个MIC是⼀个数字MIC,直接输出的就是数字信号,接在MTK8167S的⼀个数字通路上。
#MTK⾳频通路框图嵌⼊式设备和平台关系很⼤,所以做什么平台⼀定要弄清楚平台设备的框图。
MTK8167s⾳频的框图如下不同平台的差异也有不同,不要硬套,需要确认清楚。
图⽚上看到很多通路没?这些通路⾥⾯的东西都是需要根据tinymix来设置的,当然也有其他办法设置。
#通过tinymix配置通路我们正常的tinymix查看配置39 BOOL 1 O00 I05 Switch Off40 BOOL 1 O00 I07 Switch Off41 BOOL 1 O01 I06 Switch Off42 BOOL 1 O01 I08 Switch Off43 BOOL 1 O02 I05 Switch Off44 BOOL 1 O02 I06 Switch Off45 BOOL 1 O03 I05 Switch On46 BOOL 1 O03 I07 Switch On47 BOOL 1 O03 I10 Switch Off48 BOOL 1 O04 I06 Switch On49 BOOL 1 O04 I08 Switch On50 BOOL 1 O04 I11 Switch Off51 BOOL 1 O05 I00 Switch On52 BOOL 1 O05 I03 Switch Off53 BOOL 1 O05 I05 Switch Off54 BOOL 1 O05 I07 Switch Off55 BOOL 1 O05 I15 Switch Off56 BOOL 1 O06 I01 Switch On57 BOOL 1 O06 I04 Switch Off58 BOOL 1 O06 I06 Switch Off59 BOOL 1 O06 I08 Switch Off60 BOOL 1 O06 I16 Switch Off61 BOOL 1 O09 I00 Switch Off62 BOOL 1 O09 I03 Switch On63 BOOL 1 O10 I01 Switch Off64 BOOL 1 O10 I04 Switch On65 BOOL 1 O11 I02 Switch On66 BOOL 1 O11 I05 Switch Off67 BOOL 1 O13 I15 Switch Off68 BOOL 1 O14 I16 Switch Off69 ENUM 1 AIN Mux INT ADC70 ENUM 1 DAIBT Mux MRG71 BOOL 1 I2S O03_O04 Switch Off72 BOOL 1 INT ADDA O03_O04 Switch On73 BOOL 1 MRG BT O02 Switch On74 BOOL 1 PCM0 O02 Switch Off75 ENUM 1 Left PGA Mux OPEN76 ENUM 1 Right PGA Mux OPEN77 ENUM 1 AIF TX Mux Digital MIC78 ENUM 1 HPOUT Mux OPEN79 ENUM 1 LINEOUT Mux OPEN80 BOOL 1 DMIC Data Gen Switch Off81 BOOL 1 AMIC Data Gen Switch Off82 BOOL 1 SDM Tone Gen Switch Offaiv8167sm3_bsp:/ #⾥⾯已经有很多开关了,我们要做的时候通过tinymix把in 和 out对接起来。
MTK新版音频调试工具使用指引
新版Audio tuning音频工具使用指引
1.MT6739,MT6750,MT6755,MT6763,MT6765平台都需要使用新版的音频调试工具才可以调试音频。
2.手机的软件版本需要是工程版本的。
3.手机开机后,插上USB,然后打开Audio tuning tool,点击连接。
4.连接后的界面如下:
5.界面介绍
6.例:调试3G通话下听筒音量;
7.例:调试2G通话的免提音量
8.例:更改录音的音量
9.例:更改播放器播放音乐的声音大小
10.音频参数导出
11.查看参数
参数导出的文件是打不开的,发给软件就可以了。
自己想查看的话,可以在文件后面加个TAR的后缀,然后解压成XML文件用notepad打开。
Writer: Patrick Hsueh SHEN ZHEN 2018-8-15。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mtk 模拟器调试前篇文章介绍了手机调试的TRACE技巧,MTK手机调试是比较简单的,除了打TRACE,找ASSERT,分析DUMP外,剩下的就是经验了,有经验的人看到现象就能猜到问题出在什么地方,简单看一下TRACE只是为了确认自己的猜测.初涉此道的朋友往往需要时间,慢慢积累经验.要达到熟练,就需要有空的时候多读多研究代码.熟练的掌握了代码,解决问题就会熟能生巧.MTK的模拟器调试说没技巧也是对的,说有技巧也不错.因为模拟器的技术与其说是MTK经验,不如说是VC经验.由于模拟器能在没有样机的情况做大量的UI方面的开发,同时模拟器具有快捷,所见即所改等优点,因此,受到很多开发老手的青睐.熟练掌握模拟器使用技巧,对于提高工作效率,节省资源具有很积极的意义.工欲善其事,必先利其器.欲了解模拟器调试,就要先了解VC使用.VC调试过程中经常使用的快捷键如下:vc++断点的使用:按F9(设置断点),F5调试,F10单步调试,shift+F5退出调试F10单语句执行,F11单指令执行,Ctrl+F10执行至光标处;F9按行设置/取消断点, Alt+F9可按行,按数据或按消息设置断点;调试时,按Alt+3打开跟踪窗口,Alt+4打开变量窗口,Alt+5打开寄存器窗口,Alt+6打开内存窗口,Alt+7打开堆栈窗口,Alt+8打开汇编指令窗口;1.只要你有源代码,拥有一个模拟器是一件很容易的事.当然,有些情况下,这对于初入MTK的人来说,也是困难的,特别是在一些代码管理不善,公司人员众多,员工流动频繁的公司,你永远想象不出他们的代码会有多糟.不过一般情况下,我到一个新公司,都会试着去使用他们的代码编译得到模拟器,不管他们的代码多么糟,我总能快速的编出模拟器来.只要三个步骤: a.在编译模拟器前请关掉所有SP的宏,这是很重要的,很多SP都不提供在模拟器下运行的库,所以一个项目SP越多,在模拟器下,他无法识别的函数也会越多b.在编译过程中遇到错误,可以把所有与显示无关的代码全部使用#ifdef WIN32宏括起来,把所有不认识的类型使用typedef int xxx;重定义.把一些不能识别的宏定义使用WIN32括起来重定义一下c.在生成MODIS时,会遇到大量不认识的函数,如果少于50个,全部建成void xxx(){}类型的空函数.如果多于一百个,尝试查找这些函数的来源,如果是相关SP的,就再次补充关掉相关SP.当然如果你不怕麻烦,也可以把这一百个函数建成空函数.一般来说,把所有第三方功能和与MTK无关的功能关掉的话,不能识别的函数一般不会超过十个.经过这样三步,一般情况下你都能得一个差不多可以使用的模拟器.有了模拟器,你就可以进行下面的工作了.如果你仍然无法获得模拟器,建议咨询你的项目领导,如果你的领导也无法解决,说明这个软件组是一个组员变动很快,或者说缺乏条理性的部门,当然也有可能这个部门的程序员都是一些MTK的顶尖层高手,他们的程序从来不需要调试.总之这是会让人疯狂的部门.2.如果你顺利到到一个模拟器,那么就可以开始调试了.首先说一下断点,VC中的断点分三大类,一类是本地断点,一类是数据断点(也称之为条件断点,有人称之为高级断点),还是一类是消息断点;这三类断点分别对应于快捷键"ALT+F9"打开的对话框中三个选项卡.由于消息断点是用于跟踪WIN的消息,所以在MTK中用不着.在模拟器中一般我们只使用本地断点与数据断点.本地断点和数据断点在BUG调试中举足轻重,熠熠生辉。
熟练掌握断点技巧,可以使工作事倍功半。
可能有些人会使用断点,但却不知道断点在模拟器中有什么妙用.断点有两个最常使用也的作用,一是跟踪代码执行情况,二是观察断点处局部变量值的变化.这两个功能应用最多.但他在MTK模拟器中还有两个隐含的用途,一就是快速定位文件,MTK本身的源代码大约有差不多上万个文件,而加入SP后,代码大约已经超过了万数.在这里面查找文章,查找函数,是一件很困难的事,这时就需要使用断点了.你在代码阅读工具SI中可以很轻松的利用"CTRL+O"打开文件,也可以使用"F7"快速定位到函数,但在VC中却没这么方便,不过你可以使用断点,比如想在VC中打开某个文件wgui_categories_CM.c,只要VC中使用"ALT+F9",在break at编辑框里输入{,E:\JMT_1120\plutommi\mmi\GUI\GUI_SRC\wgui_categories_CM.c,} .4693,按F5执行DEBUG后VC就能自己定位到这个文件wgui_categories_CM.c的4693行。
这是文件断点,也可以打函数断点,比如文件wgui_categories_CM.c的4693行对应的是函数ShowCategory16Screen,也可以直接在break at编辑框里输入ShowCategory16Screen,使用F5键DEBUG时,函数运行到拨号界面时,就会停下来供你调试。
本地断点就是这样使用的。
那么本地断点有什么用呢?或者说有什么特殊用途呢?简单举几个例子吧,但断点可以应用于解决十分多的问题中,不要因为我的例子束缚了你的想象力.a.如何使用断点快速定位到问题点呢?如果我们发现,拨号窗口显示出了问题,但我们对代码不熟,不知道拨号窗口的代码在哪个文件,哪一行,我们就可以在EntryNewScreen函数上打断点,当进入拨号时他就会停下来,这时我们能过堆栈窗口信息就可以很轻松的找到这个窗口的实现函数。
详细研究代码,就可以找到解决方法.b.断点可以用于快速解决窗口显示问题,比如我们的拨号窗口,有一个图片显示不正常,这时我们可以在绘图函数gdi_image_codec_draw上打上断点,进入拨号窗口中,每一次显示图片,都会在该函数上停下来,结合堆栈,我们可以很容易找到是哪个地方代码出来问题,从而找到解决方法.有关此类的函数太多,不一一举例.C.断点可以用来研究全局变量被意外修改问题,我们打开断点对话框,选第二个选项卡,把需要跟踪的变量打进去,当每次变量变化时,VC都会停下来等我们调试.也可以设置条件,假设某全局变量U8 g_XXX, 其值等于5时会出错,但你不知道这个全局变量在什么地方被什么代码赋值为5,这时就可以设置数据断点,在第二选项卡上面的对话框里输入g_XXX == 5,当其值为5时就会停下来.d.研究代码也可以使用断点,比如MTK代码里使用有很多函数指针封装,例如gui_print_text 指针,你想研究他的实现过程,但由于是指针,你找不到他的函数体,这时你就可以在数据断点中,把指针gui_print_text输入进去,重启模拟器时,他就会定位到ui_print_text函数处. 兹举这四个例子吧,断点可以使用于你需要调试的任何场合,但过多的断点会影响你查找问题的速度,等熟练使用时,就可以有针对性的对某些变量和函数打断点以解决问题.这是一个积累的过程3.堆栈调试,Alt+7打开堆栈窗口.该窗口中我们可以看到函数之间的调用关系,这是十分有用的,一般都是结合断点使用,定位BUG和研究代码十分有用.由于上面有例子,这里就不举了4.变量窗口,Alt+4打开变量窗口,该窗口会自动显示断点代码处使用的变量及其值,阅读代码解决BUG时使用,单步执行时经常参考该窗口数据5.WATCH窗口,按Alt+3打开,由于变量窗口自动显示的变量有时不是我们需要的,这时就可以把我们需要查看的变量拖放到该窗口研究,结合断点使用,并且这里也支持表达式取值,真是太棒了.6.内存窗口,Alt+6打开内存窗口,内存窗口可以显示一块内存的内容,这是很有用的,比如我们要跟踪短信内容,有一个短信内容的指针,把该指针输入WATCH窗口,只能看到该指针指向的第一个值,要看其他的,会很麻烦,你只能输入表达式,但你把该指针输入内存窗口,就不必这样费事了7.Alt+8打开汇编指令窗口,这个窗口用处不是很大,学习汇编的话,还是有用处的.一般情况下,如果第三方的库文件出了问题,也就只能使用这个窗口调试了.普通情况下,如果错误定位在C标准库文件的汇编代码上,只有一种可能,就是你的调用出错了.调试占了研发的很大一部分时间,调试的基本技术就这样,一般情况下是综合运用,灵活掌握,以期快速解决问题,稳定代码.剩下就是经验积累的问题了.注:MTK Modis 使用简介Modis PC仿真,要进行如下操作:(假设工程路径为D:\X)第一步:在如下目录中D:\X执行 make Prj_Name GPRS gen_modis第二步:转到modis目录 D:\X\modis执行 createmodis.pl ..\make\Prj_Name_GPRS.mak第三步:再切换到 D:\X执行 make Prj_Name GPRS codegen_modis第四步:最后转到modis目录,执行 modiscodegen.pl ..\make\Prj_Name_GPRS.mak第五步:开始使用Modis仿真--运行D:\X\modis\Modis.dsw,编译工程;第六步:启动Modis->开机->Option->Luanch Catcher&NS,这样就可以进行模拟操作并从catcher中得到日志;注意:老版本的Catcher下出现NS不能控制的情况。
make WMD6225_GEMINI GPRS gen_modiscd modiscreatemodis.pl ..\make\WMD6225_GEMINI_GPRS.makcd ..make WMD6225_GEMINI GPRS codegen_modiscd modismodiscodegen.pl ..\make\WMD6225_GEMINI_GPRS.makMTK调试入门之一曾有朋友让我写一些调试技巧方面的文章.调试对于软件是十分重要的,但却不是一篇二篇文章能讲清楚的.有很多调试技巧都是零零碎碎的东西,用的时候能很容易使用,但要写出来时,却还是比较麻烦的.MTK的调试一般来说可以分为仿真调试与手机调试.这两种调试对于研发新功能,修改BUG,研究算法都是十分重要的.当然,这两种调试也有差异,有时会出现在模拟器运行正常,在手机却运行失败,或者相反,这就突出了软件模拟环境与硬件手机环境的差别.原因可能是各种各样的,比如可能是有些硬件软件没有办法模拟,有些新功能对硬件依赖强,不能模拟,新软件的有些函数只能在手机上运行,没有写相应的模拟器代码.等等原因都会导致两者差异.这里不一一赘述,大家知道模拟器和手机有差异就行了.模拟器调试具有直观,快速,追踪方便能优点,受到很多MMI开发者的喜欢.而有关模拟器的调试,其他也就是VC调试功能的使用.由于国内软件教育重编程,算法,轻调试,所以很少有系统的调试方书的书.在开发过程中,我也见过许多人压根就不使用模拟器,他们认为模拟器也就是在没有手机的时候使用.详细讲解模拟器的调试就放到以后,因为模拟器断点,内存,堆栈,变量各个方面的调试,详细写来都可以成一篇文章.这里先讲一个手机调试的TRACE使用.以前曾写过一篇DUMP调试的文章.通过出错的DUMP信息查找错误.有兴趣的朋友可以参考. Detail_RD.Blog_blogercn_19169.html1.在MTK平台,我们最常使用的TRACE函数是kal_prompt_trace函数,这个函数是系统提供给我们的用于在catcher里调试错误的.在这个函数不能使用的场合,有时我们会使用函数system_print或者dbg_printf,这两个函数可以不使用catcher的情况,使用WIN自带的工具超级终端来调试程序.有时驱动的朋友会自己用函数PutUARTBytes写自已TRACE函数,这些函数可以使用超级终端调试,如下,就是别人写的一个TRACE函数.打印某一块数据的内容,常常TRACE内存数据,指定地址,指定大小void perun_dump(void *buf, prn_int16 size){#ifdef PRN_TRACE_OPEN#ifdef MMI_ON_HARDWARE_Pchar str[2048];char *ptr = (char*)str;char *ptr1 = buf;int i = 0;memset(str, 0, sizeof(str));strcpy(ptr, "[Perun_dump]: ");ptr += strlen("[Perun_dump]: ");while (i < size){sprintf(ptr, " %02x", *ptr1);ptr += 3;++ptr1;++i;}sprintf(ptr, "\r\n");PutUARTBytes(0, (kal_uint8 *)str, (kal_uint16)strlen(str));#endif#endif}也可以写一个像MTK自带的一样的函数来TRACE,如下,该函数也是可以运行在终端中: Void perun_trace(char *fmt, ...){#ifdef PRN_TRACE_OPEN#ifdef MMI_ON_HARDWARE_Pva_list list;char buf[2048];char *ptr = (char*)buf;memset(buf, 0, sizeof(buf));strcpy(ptr, "[Perun_trace]: ");ptr += strlen("[Perun_trace]: ");va_start(list, fmt);vsprintf(ptr, fmt, list);va_end(list);strcat(buf, "\r\n");buf[2047] = 0;PutUARTBytes(0, (kal_uint8 *)buf, strlen(buf));#endif#endif}2.TRACE语句的编写是十分重要的.如何写出的TRACE既能在仿真下使用,也能在手机中使用,我一般会使用如下的格式:#ifdef WIN32#define MYTRACE printf#else#define MYTRACE(...) kal_prompt_trace(MOD_WAP, __VA_ARGS__)#endif经过如下的封装,MYTRACE就可以既能在手机上运行,也能在电脑中运行, 并且我已经消除了MTK自带的函数与printf在调用上的不同.顺便说一下,模拟器调用函数MYTRACE时,会在控制制输出该函数的打印信息.手机调用MYTRACE时,会在filiter为MOD_WAP时输出信息.3.有时为了便于观察,我会为我的TRACE语句添加一个前缀,比如我自己的TRACE前面添加十个>或者我自己的拼音名字,我会如下修改我的MYTRACE:#ifdef WIN32#define MYTRACE printf#else#define STR(s) #s#define MYTRACE(...) kal_prompt_trace(MOD_WAP, STR(>>>>>>>>>>)##__VA_ARGS__) #endif经过这样的改进,我的TRACE在输出信息时,信息头就是我的名字,我可以使用查找全部功能把我需要的TRACE全抓出来.如果你对#号的使用,有疑问,请自己查找相关资料4.种种迹象和从理论上看来,TRACE和MMI_ASSERT是调试的好帮手,但在发布软件时,带上了这个会引来不必要的麻烦.MMI_ASSERT增加了系统重启的频率.TRACE增加了系统的ROM,RAM 和CPU的开销.在工作中,我们曾经发现一款手机,由于ROM过于紧张,添加几条TRACE就会出现编译错误,去掉TRACE就编译通过了,导致出了BUG调试十分的麻烦.如何写一种使用时可以TRACE错误,不使用时又不占用系统资源的TRACE呢,我见许多人这样处理,因为NULL会被编译器优化点,后面括号变成一个表达式了.表达式对系统的开销自然小于函数了.MTK通过TRACE的栈信息寻找BUG原因与解决方法(2010-02-02 20:00:21)前几天去一个公司帮他们解决BUG。