我在很久很久以前曾经写过一篇介绍TRACE的文章,那里介绍了不少TRACE技能和解决BUG的技巧。这次只把其中的TRACE的应用说进一步介绍。这里假设你对MTK自带的TRACE函数kal_prompt_trace有了比较深刻的认识,对其应用范围和使用的局限性也有了一定了解的情况下可来阅读本文。

理论上来说,kal_prompt_trace可以应用在可以应用TRACE的任何场合,但也有其很明显的局限性。比如以下三种情况:

1.USB方面的BUG,占用了插口,无法使用,不包括使用硬件加串口的情况。

2.充电方面的BUG,原因同上

3.MMI层未初始化的情况下

4.有些驱动代码中,该函数无法正常运行

5.没有数据库校准文件或者校准文件不正确的情况下

如何对上面的TRACE做一些改造,以适应上面的情况,不仅仅是一个很有趣的问题,同时也是一个很有现实意义的问题。比如对于1和2,我们很多同志采用找硬件工程再接一个端口的情况,这当然也是可以的,但能用软件解决,就有软件解决,有利于节约公司的资源。对于后两种情况,我们常常使用直接写端口的函数PutUARTBytes来解决。能不能统一一下,写一个公共函数来实现满足以上所有条件的调试函数呢?

#if 1 //jia #define TIMEFILE L"E://mytrace.txt" #define MY_TRACE_TYPE (0) //选择TRACE方式,可选0,1,2,3,4,,5 void WriteTimeFile( WCHAR * fn, U8 * data, U32 len) { FS_HANDLE pf; U32 wlen; S8 ret; MMI_ASSERT((fn != NULL) && (data != NULL)); pf = FS_Open(fn, FS_READ_WRITE|FS_CREATE); if (pf >= 0) { FS_Seek(pf, 0, FS_FILE_END); FS_Write(pf, data, len, &wlen); FS_Commit(pf); FS_Close(pf); } } void drawChineseString(U8 *s, U16 len, S32 x, S32 y, color c) { S8 des[256] = {0}; S8 * src; MMI_ASSERT((src != NULL) && (len != 0)); src = (S8 *)s; mmi_chset_text_to_ucs2(des, len + 2, src); gui_move_text_cursor(x, y); gui_set_text_color(c); gui_print_text(des); return; } void my_trace(char *fmt, ...) { #ifdef MMI_ON_HARDWARE_P va_list list; char buf[255]; char *ptr = (char*)buf; memset(buf, 0, sizeof(buf)); strcpy(ptr, "[jia]: "); ptr += strlen("[jia]: "); va_start(list, fmt); vsprintf(ptr, fmt, list); va_end(list); strcat(buf, "/r/n"); buf[255] = 0; #if (MY_TRACE_TYPE == 1) PutUARTBytes(0, (kal_uint8 *)buf, strlen(buf));//直接写端口 #elif (MY_TRACE_TYPE == 2) WriteTimeFile(TIMEFILE, buf, strlen(buf));//USB充电状态使用 #elif (MY_TRACE_TYPE == 3) //这里我隐藏了一个直接把手机窗口做为输出窗口调试的函数 #elif (MY_TRACE_TYPE == 4) kal_prompt_trace(MOD_WAP, buf);//catcher #elif (MY_TRACE_TYPE == 5) printf(buf);//模拟器 #endif #endif } #endif

函数一切如上,使用手机窗口调试时同时可以输出中文,作为思考,有兴趣的朋友可以自己实现一下试试。

声明:本文是作者原创,受著作权法保护,请勿转载和用于商业用途,作者保留对侵权行为追究的权力!

MTK 调试的奇巧淫技相关推荐

  1. 算法很美第一章 位运算的奇巧淫技

    第一章 位运算的奇巧淫技 1.2 题解:如何找数组中唯一成对的那个数 知识点: A^A=0 A^0=A(一个数与0进行按位异或,结果是他自己) 对一个序列进行按位异或,可以消除掉序列中的重复项,比如: ...

  2. iOS 开发的一些奇巧淫技

    iOS开发的一些奇巧淫技1&2 CGfloat和float的区别? 现在上架的app都要求支持64位系统,那么CGFloat和float的区别就在这里.command+左键点击CGFloat. ...

  3. 【奇巧淫技】python 助你每天早上八点自动发送天气预报邮件到QQ邮箱

    此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉. 补充 有不少杠精小婊贝留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!! ...

  4. 位运算概览与奇巧淫技

    文章目录 一.位运算概述 二.位运算概览 异或 二进制数的原码.反码.补码 左移 << 右移 >> 无符号右移 >>> 三.位运算的使用奇巧淫技 判断奇偶数 ...

  5. 蓝桥杯算法竞赛系列第一章——位运算的奇巧淫技及其实战

    遇见蓝桥遇见你,不负代码不负卿! 第二章"递归"已将更新咯,欢迎铁汁们点评!蓝桥杯算法竞赛系列第二章--深入理解重难点之递归(上)_安然无虞的博客-CSDN博客 目录 一.位运算符 ...

  6. iOS调试奇巧淫技(一)

    你以为,你以为的就是你以为的吗? 你以为你代码写的很OK啦? 你以为你的是大牛啦? 你以为的就是你以为的吗? 你的代码经得起考验吗?(PS:爱经得起考验吗) iOS调试的技巧很多,通过调试我们不仅可以 ...

  7. Django REST framework的一些奇巧淫技(干货!!!)

    开始之前,假设你已经有Django和Django REST framework的一些基础了 mixins,ViewSet和routers配合使用 minxis的类有5种 CreateModelMixi ...

  8. C基础 那些年用过的奇巧淫技

    引言 - 为寻一颗明星 为要寻一颗明星 徐志摩 1924年12月1日<晨报六周年纪念增刊>我骑著一匹拐腿的瞎马,向著黑夜里加鞭:--向著黑夜里加鞭,我跨著一匹拐腿的瞎马.// 我冲入这黑绵 ...

  9. iOS开发的一些奇巧淫技2

    能不能只用一个pan手势来代替UISwipegesture的各个方向? 1 - (void)pan:(UIPanGestureRecognizer *)sender 2 { 3 4 typedef N ...

最新文章

  1. 如何在一场面试中展现你对Python的coding能力?| 技术头条
  2. Flex DataGrid设置不同行高度和自动换行
  3. 9周的项目实训从今天就开始了,
  4. AutoHotKey 的使用 —— 使用键盘调节 windows 声音
  5. 【小白学PyTorch】16.TF2读取图片的方法
  6. Android 使用Listview的优化
  7. python size和count_python中size和count的区别
  8. (转)用 Maven 部署 war 包到远程 Tomcat 服务器
  9. 图解Python多修饰器时哪个先起作用
  10. oracle查看会话(常规操作)
  11. 软件one pin错误是啥意思_理想ONE,从交车就开始道歉,是有礼貌的新势力
  12. 失焦事件触发_JavaScript event 事件详解
  13. VB6.0数据库访问技术与例程解析Java教程
  14. 2012年4月份第3周51Aspx源码发布详情
  15. tableau如何生成HTML文件,Tableau 入门
  16. Excel里怎么冻结某一行某一列
  17. 查看各大网站服务器操作系统
  18. Win10企业版转专业版
  19. 使用单元测试测试您的 Room 数据库
  20. Redis——Redis入门和一些笔记

热门文章

  1. LeetCode:二叉树层序遍历
  2. linux WC命令解析
  3. PPT文件找回打开密码
  4. Springboot配置多个视图解析器,项目同时有jsp和html
  5. 智慧景区导航导览系统,一部手机玩转整个景区
  6. 计算机考试二级模拟试题,2015年计算机等级考试二级VB模拟试题
  7. 职场--电挂支持之注意事项
  8. 非正弦信号发生器的组成和分析方法
  9. HTML5期末大作业:爱折扣电商购物网站设计——清新爱折扣电商购物网站(5页) HTML+CSS+JavaScript 关于电商的HTML网页设计-----网购
  10. 涨跌停计算器_涨跌停计算器手机版,新股涨停收益表