此文针对嵌入式软件的业余初学者,高手请自行路过打酱油。 嵌入式中,调试手段通常有两种,一是远程gdb,一是直接printf。如果是调试自己玩的小板子,用gdb有点大张旗鼓了,大多数情况下printf就可以搞定。不过printf的问题是stdio lib的size太大,稍微有点程序,加上几个常用的库,比如stdio和string,超过16k甚至32k(已经大于一些低端芯片的flash容量了)是很正常的事情,而且通常比较慢,程序越多,越麻烦。道理很简单,标准C语言库的规范中,Printf() 必须处理大量的数据格式,包括字符串、字符、(各种长度的有符号和无符号)数字,以及浮点值。而且格式字符串还要包括用于更改文本对齐、基数、间距、字段宽度和精度的调节器和指示器。符合这个规范的代码必然会是冗长和繁重的。一些嵌入式系统库倒是提供了一些之针对整数的printf,但还是有问题,首先是还是太大,其次是你没有自己的调整权限。 其实printf也就是IO的调用包装而已,我们完全可以自己写一个简易版本的printf满足自己的需要,并随时根据需要裁剪。具体来说,printf在这里要起的作用就是将调试字符串从嵌入式目标空闲的串口压出,并在运行于宿主工作站的终端模拟器上显示结果。下面就简单介绍一下,如何来自己写一个简易printf函数。
Archives for December 2008
Python3的参考书出来了
http://www.qtrac.eu/py3book.html 500多页吧,挺薄,有兴趣的朋友看看。今天圣诞,就不多写了:)
X86架构上构建Android
Lim,GeunSik刚刚在android-porting讨论组中详细阐述了这个方法。我先把方法放过来,不过还没来得及验证,他用的是ASUS Eee,估计效果和N810上的差不多的。一下所有步骤都是基于Fedora的,ubuntu用户自行参考。 开发环境: – Linux PC: Fedora 9 ( 2.6.25.6-55.fc9 i686) . CPU: Intel(R) Core(TM)2 Duo CPU T5750 @ 2.00GHz ( Samsung SENS R60 Laptop ) . RAM: Samsung DDR Ram – Target: Eee PC (ASUS) and Samsung nettop NC01 – Reference: http://www.kandroid.org/board/board.php?board=androidsource&command=body&no=19
vim插件surround介绍
在我写程序的时候,经常会遇到一些比较烦的修改情况,比如一个程序块 { xxxxx xxxxx } 现在想删除{},怎么办?我是直接删除{然后numG跳到}再删除,但如果代码块比较长,就很不方便,有时候还要加上f}。 再比如,你有一个字符串“<div>foo<div>”,你想把他变成“foo”,怎么变? Bdf>wdf> 还有很多很多例子,总的来说就是像这种环绕的字符,删除或者修改是非常不方便的。
两个有趣的图片
在MSDN Rowe的blog上看到的,放到这里来,估计是比较火星了。 第一个是文本编辑器的学习曲线。说是文本编辑器,其实vim,emacs都不算纯的文本编辑器,更不用说可怜的再次受鄙视的VS了。我是一个vim的坚定支持者,原因就在于vim的学习曲线。当然,你看起来很陡很短的坡,我用熟练也花了至少3个月,也没有那么短的:) Anyway, it’s worthy of efforts. 下一个图片是典型的口水图片。
告密者,幽灵回归
告密者(GMZ),一种历史上曾经声名狼藉的幽灵,突然浮出水面,成了当下的新闻热点。前有华东政法大学的杨师群案,因为对此不了解,据说背后还有别的东西,所以不便多说。而武汉晚报的报道称,湖北大学数计学院某班出台新班规,要求学生实行“盯人”战术,每名学生暗中监视另一名同学,并在所谓“天使信条”上写下对被监视对象的意见。这些披着“天使外衣”的GMZ,以“关爱同学”的名义复活,蔚成校园文化的诡异风气。
这是一个很有意思但让人无奈的风气回归。在中世纪的教会独裁时代,GMZ曾经把大批无辜者送进异端裁判所,令她们以女巫的名义被活活烧死。这种告密传统此后在东德达到辉煌的高度。乔治奥威尔的反面乌托邦小说《1984》,就是这种现实的寓言体镜像。但所有那些西方史迹,跟本土厂卫制度相比,却只能黯然失色。朱元璋是中国的GMZ教父,率先设立锦衣卫以监视官民,此后,历代皇帝又设东厂监视锦衣卫,再设西厂监视锦衣卫和东厂,复设内行厂监视锦衣卫和东西厂,甚至利用江湖流氓建构更为庞大的眼线和告密网络。这种复杂的四重监视体系,培训了庞大的GMZ队伍,成为专制王朝的最大帮手。