项目中有时会遇到字节对齐的问题,英文为“Alignment trap”,如果直译,意思为“对齐陷阱”,不过这个说法不太好理解,还是直接用英文来表达。
Linux管道函数使用
背景:项目有个功能是查看版本号(像什么内核版本号、驱动版本号,等等),是通过管道来实现的,网上也有这方面的介绍,就不多说了。 在一次测试过程中,发现不断查看版本号竟然会导致系统复位(比如查看20次、40次、100次),这个bug发现晚的原因是没有谁那么无聊连续查看100次版本号,当然,发现也是碰巧在几次查看之后系统就挂了。后来发现是因为某个地方卡住导致某个线程超时而复位。后来跟踪到了这个管道函数中来。解决的方法是使用读取文件的方法来获取系统版本号(如内核版本)。不过真正原因还没有找到,可能出在popen这类函数中。
SVN、GIT生成版本号
李迟按:代码管理较多的是使用svn、git这类的版本管理工具,版本号是一个重要的东西,自然地,如何让我们显式地看到版本号是十分重要的。一般地,会通过某种手段让当前代码的版本号声明为宏定义字符串,或打印在串口上,或传输到上位机显示。这里介绍了svn和git的版本号生成方式。
复杂多目录的Makefile模板及示例
大约一年多以前,还在移植u-boot,当时参考了u-boot的Makefile,做了一个多目录的Makefile模板。如今,一年过去了,本篇文章还是折腾Makefile模板,本人的水平由此可见一斑。当时的模板没有考虑很多东西,比如将源代码文件及目标文件分离。此次再写一个相对复杂的Makefile模板,自此之后,估计不想再折腾了。
代码随笔——点阵汉字在LCD上的显示
注:本文约在半年到一年前写的。
其实我以前从没想过写Framebuffer的代码,网上流传较多的是LCD的移植(主要改参数),之后没下文了。不过,曾经兴致冲冲地想搞Qtopia移植,在这过程中碰到过一个叫Tslib的东西。后来Qtopia没搞成功,倒研究起Tslib来了——对它的底层原理还没看明白,对于一些代码技巧及代码结构组织还是研究了一点。这个过程,与前几个月研究u-boot,一年前研究rtp以及曾经研究过的enc28j60等等代码很是相似。我这个有个毛病,喜欢研究些小东西,一些有意思的东西。比如说,人家移植u-boot,就是移植到开发板上,出结果就行了,而我,会去看看那些内存地址啊,看看里面的代码啊什么的。——不务正业,从这里可见一斑。
SDL_gfx-2.0.23在windows平台下的编译及例子
SDL_gfx是SDL的一个扩展库,包括了许多图形相关的操作函数,本文介绍该库在Windows平台使用VS2003编译过程,并给出一个简单的例子。
libjpeg在windows下的编译
以前搞图片在LCD屏上显示的时候,曾经在Linux下编译过libjpeg,现在再次编译,不过换了平台而已。本文使用的编译器为VS2003,编译的libjpeg为最新版本,即jpeg-8c。
SDL 1.2.14在windows平台下的编译及例子
背景:初次接触SDL,大约是当初做毕业设计时。如今再次接触,只换了平台而已,但事是人非,年华似水。曾经的理想,如今只有不停写代码、写代码,似乎除了这事情,别的不知做什么了。
在图片中添加自己的文本信息(PNG及JPEG格式)
背景:PNG格式和JPEG格式的图片都有一个表示文本信息的段,这些信息可以是任意的字符串,或者版权信息,或者工作室信息,或者其它的。本文的程序是在原始图片中添加这个段的信息。由于比较简单,不多说。
模拟时钟在LCD上的显示
我很早就想做一个模拟时钟了,网上也有很多C语言写的模拟时钟的代码,不过是基于TC的。后来我找到一个使用easy X lib写的模拟时钟,于是就将它移植到我的开发板屏幕上。前面已经完成了LCD的画点、画线、画圆等等基本函数了。与参考的代码不同的是刷新屏幕问题,我是考虑了一些时间才想到的。
将图片嵌入程序文件的一点研究
背景:重读《程序员的自我修养——链接、装载与库》,里面第3章主要讲目标文件。同时讲到如何将一些二进制文件作为目标文件的一个段(详细的请参考此书)。像图片、音乐文件其实也是二进制文件(作为初级程序的我,还没有达到将一切看成二进制的境界)。本文就以此展开了一些研究,顺便复习一下binutils工具以及gdb的使用。