一个人的周末

老婆回家看海月去了,我独自一个人过这个周末,多少有些无聊。

一大早起来,拿着摄像机到外面拍了一圈,准备下个月回国的时候给家里人讲解一下我在日本的生活环境。

回到家来,用Skype和老婆聊了几句,她就去陪海月去了。 几天我都没有正经吃顿饭,于是就花了点时间好好做了点,中午吃了个饱。

一个人在家,甚至连写程序的精神都提不起来,所以就开始上网闲逛。偶尔看到“激流中国-富人和农民工”,这是日本NHK电视台拍的关于中国的记录片,描写了几位身价亿万的富翁和几位一贫如洗的农民工的生活。无论哪个国家,我想最富的人和最穷的人的差距大概都会有这么大,不过这么真实地对比,看着总觉得心里头不舒服。

日本媒体很喜欢报道一些中国的负面的东西。几乎没有在电视上看到过什么说中国哪方面好的节目:纸做的包子、虚假新闻、盗版、带农药的蔬菜、带药物的鳗鱼等等等等。我不经常看电视,偶尔打开看看总能看到这类新闻报道或者专题节目。

对于日本人来说,报道这些负面新闻,一方面能够提高收视率,一方面能够抑制中国产品对日本的出口,怎么说都是有利的。对中国人来说,看到这样的节目,虽然知道它所说的都是实话,可是多少都会有些生气。一方面生气日本人为什么老说我们的坏话,一方面恨中国自己不争气。

记录片没有看完,实在是看不下去了。于是找了个轻松的电影混了混时间。家里待久了不舒服,于是接着到附近的超市去逛逛。

我正无精打采地在超市里闲逛着,突然间提到了久违的汉语歌曲:“一样的血,一样的种....”,是刘德华的“中国人”,精神为之一振,凑近前一看,原来是从那家中国菜馆的柜台里放出来的,虽然他们只是为了促销放点歌曲,我却站在那里静静地把这首歌听完了。本来中午有剩菜,无需再买,可是在日本能听到这样的中国歌曲,实在是太难得,所以我随便拿起一盒菜,交钱走人,算是感谢一下这个菜馆吧。

回想起中午看的那个记录片,不禁感慨万千。虽然是“一样的血,一样的种”,可是为什么中国不和谐的地方这么多!虽然日本这么好,中国不和谐的地方这么多,可是为什么我却仍然期盼着早日回到中国?

突然想起《白马啸西风》最后那句:「那都是很好很好的,可是我偏不喜欢。」


C++调用C的函数

RY DSP开发 2007/07/29

以前从来没有写过C++的程序,最近一个项目中的源程序都是cpp文件,需要调用一个用C语言写好的函数库,结果遇到了大麻烦。

这个库是别的公司提供的,包含一个库文件和一个头文件,还有调用的例子。这个例子能毫无问题地编译连接。但是把这个库文件放到我们自己的工程中,link时却总是报错,说是找不到我们要调用的函数。经过一番比较,发现我们的工程和那个例子之间唯一的差别就是:

例子程序的主函数所在的文件名是main.c,而我们工程中的文件名是main.cpp。这个问题总结一下就是:在main.c文件中的main函数中调用库函数没有问题,而在main.cpp文件中的main函数中调用库函数,就出现连接错误。

google一下,发现了解决方法:

把包含头文件的那句#include  "***.h"改为:

extern  "C"{
#include  "***.h"
}

那么为什么这么做就可以解决问题了呢?这是因为C++和C对函数符号所做的修改不一样。也就是说同样一个函数名,用C和C++编译之后的符号是不同的,这样连接是就出现了问题。extern "C"就是告诉编译器,它其中包含的所有符号全部按照C语言的规定来做,这样就能够正常连接C编译器编译的库函数了。关于这个问题的详细信息,可以google: extern "C"。有不少好文章介绍。


McBSP的DX引脚的状态

RY DSP开发 2007/07/13

DSP reset之后,不对McBSP进行任何处理,其DX引脚的状态会是怎样的呢?

最近我碰到了这个问题。硬件上McBSP0、1、2的DX引脚分别与不同的DAC相连,帧信号和时钟信号统一设置为外部输入。一般情况下,这3个McBSP都处于工作状态,不过在某种特殊的配置下,McBSP2不需要输出,这种情况下,DSP启动的时候,通过别的引脚判断是否需要McBSP2的输出。

既然不需要输出,那么我的程序就跳过了McBSP2的初始化,使其处于DSP reset之后的缺省工作状态,我认为McBSP2处于reset状态的话,DX2引脚上不会有输出,因此DAC也不会输出声音波形。

可是在实际调试过程中,与McBSP2相连的声音输出端口偶尔会出现巨大的爆裂噪声。这种噪声显然是数字信号噪声,而非电路中的模拟信号的噪声。 因此推断DAC从DX2引脚读入了非0数据。而McBSP2处于reset状态,应该不会输出信号的。

这个问题困扰了我很久,最后我终于发现,在Reset状态下,McBSP不控制DX引脚,因此DX引脚处于浮动状态,硬件上的其它回路或者引脚可能会产生噪声使得DX引脚在0,1之间跳变,因为帧信号和时钟信号一直都有,因此DX引脚的这些变化会被DAC转换为模拟信号输出。这样的噪声因此毫无规律,而且通常音量很大。

那么怎么解决这个问题呢?初始化McBSP2之后,输出0当然是一种解决办法,不过这样太麻烦了。我直接配置McBSP2的PCR寄存器,设置McBSP2的DX引脚为泛用I/O模式,并且为输出低电压的状态。这样DX引脚就完全由McBSP控制了,不会因为其它电路的影响而上下浮动。

这样这个问题就完全解决了。