Tchaikov’s Journal

January 1, 2008

年末总结和年初展望

Filed under: Life, Work

今天是2008年的第一天。是时候对过去的一年作一下总结了。又一次离开学校的感觉很奇怪,有着很强的愿望想在工作里找到自己的乐趣,但是似乎事与愿违。难道工作只能是工作么?

闲书看了余华的《》,和阿西莫夫的《第二基地》。每个星期的《南方周末》成了奢侈品,最近买的几期都没有看完就撂在一旁,可能是太忙,也可能是心境不佳的原因。不过还好,《环球科学》一直还在看。今年看看能不能订一下。

一直想学的编译器设计没有进展,虎书Compiler design in C 只是开了个头,类似的还有《量化》、COD3Computer Graphics with OpenGL 3rd Ed.《实时计算机图形学》。编译原理是实践性很强的学问,今年恐怕无法继续了。但是体系结构和图形学的四本书年内应该可以看完,习题要有选择的做一下。

文泉驿的工作还间或地在做,本来可以做得更好的,但是很多时候由于心情的原因,不是很上心。scim-sunpin 写完了,不过偶尔会出现一些小问题,等能重现再看看。

去年春节的时候买了个 Wii,后来陆续添置了一些,最近又和老爸合作做了一个 sensor bar。Wii 给我带来了很多乐趣,不过也花费了我相当多的时间和精力。要小心。

November 12, 2007

无题

Filed under: Work, random-rants

昨天是很多光光朋友的节日,我又一次不能幸免。新科兄曾经希望能帮我。我在想,现在的我甚至没有时间思考,做自己喜欢做的事情,又如何能对他人负责?真希望能“学”有余力,在工作之外还能做些其它有意思的事情。

最近工作还是没能进入正轨,就是觉得很累,而且进度很慢。照理说不会这样,自打写程序以来没有这样过。如果再过一段时间还是这样,哎,真不敢想象。

过几天单位要搬家,每个人的缺省话题似乎都是,“今天你搬了没?”,每次说到这个,我都是苦着脸回道“没呢,搬不了啊!”其实,我是想搬的。但是家里持反对意见,我除了方便之外也没特别有说服力的理由。想想也是呵,哪有会一直加班的工作呢?

护照办下来了,其实我不大想出差的。现在一脑袋浆糊,出去又能干啥呢?

July 4, 2006

Debian 上装 TinyOS

Filed under: Work

装的是 1.x 的 TinyOS。就说几点要紧的

1.先装编译 AVR 所要的 tool chain

aptitude install gcc-avr binutils-avr avr-libc 

可能还附带着装上画图的 graphviz。

2.从 sf 下 nesc

wget http://kent.dl.sourceforge.net/sourceforge/nescc/nesc-1.2.7.tar.gz
./configure --prefix=/opt/tos; make; make install

3.当然还有 sun-java5-jdk

aptitude install sun-java5-jdk

加上 SUN Java Communication API version 3.0

unzip comm3.0_u1_linux.zip
cp commapi/lib/*.so $JAVA_HOME/jre/lib/i386/
cp commapi/jar/comm.jar $JAVA_HOME/jre/lib/ext/
cp commapi/docs/javax.comm.properties $JAVA_HOME/jre/lib/

4.最后从 CVS 抓 TinyOS

cvs -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos login
cvs -z9 -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos co tinyos-1.x

4.1.确定 TOS 的安装目录之后,可以在 .bashrc 里加一个函数,以后想干活只要敲tos就可以了:

tos()
{
    export TOSROOT=/home/save/dev/tinyos/tinyos-1.x
    export TOSDIR=\"$TOSROOT/tos\"
    export PATH=$PATH:/opt/tos/bin
    export CLASSPATH=`$TOSROOT/tools/java/javapath`
    cd $TOSROOT
}

4.2.现在 ncc 从 nesc 移到了 TinyOS 里,现在编译 ncc:

cd $TOSROOT/tools/src/ncc
./Bootstrap; ./configure --prefix=/opt/tos; make; make install

看一下是不是所有东西都各就各位了:

./tools/scripts/toscheck

可能 toscheck 认为有的版本不对,这会导致一些问题。在 nesc 生成的汇编程序里,会有许多变量名中间有$符号,gcc-avr 看到这个会不爽。make mica2的时候,会疯狂地报错,类似这样的:

/tmp/cch3uzvj.s:1743: Error: unknown opcode `timertask'
/tmp/cch3uzvj.s:1743: Error: unknown opcode `timertask'
/tmp/cch3uzvj.s:1744: Error: unrecognized symbol type
/tmp/cch3uzvj.s:1744: Error: unknown opcode `packetsent'
/tmp/cch3uzvj.s:1745: Error: unknown opcode `cc1000radi'
/tmp/cch3uzvj.s:1753: Error: unknown opcode `txbufptr'

这位朋友把这看作不听话的后果,其实在$TOSROOT/apps/Makeruls里改改就行:

-OPTFLAGS := -Os
+OPTFLAGS := -Os -Wa,--allow-dollars 

让 gcc-avr 看到刀乐不要慌。

4.3.编译 uisp

用 Debian 自带的 uisp 烧写程序时会报错,说:

/usr/bin/uisp -dprog=mib510 -dserial=/dev/ttyUSB0 -dpart=ATmega128 --wr_fuse_e=ff  --erase --upload  if=build/mica2/main.srec
Direct Parallel Access not defined.

得使 TinyOS 自己的。

cd $TOSROOT/tools/src/uisp
./set-dates
./configure --prefix=/opt/tos && make install

4.4.编译 libgetenv

有的 TinyOS 的 Java 程序会用到 JNI 的 libgetenv。因此需要……编译:

cd $TOSROOT/tools/java/jni make

在 make 之前,还需要修改一个脚本$TOSROOT/tools/scripts/locate-jre。把从37行到47行的程序都注释掉,紧接着加上:

j=\"$JAVA_HOME\"/bin/javac

当然,前提是你设置好了$JAVA_HOME的环境变量。在修改后的第70行,改之:

-dir=\"$jhome/jre/bin
+dir=\"$jhome/jre/lib/i386

这些问题是没有使用 IBM JDK,以及 Debian 没有安装 rpm db 造成的。

5.现在设置一下编程板使用的口,以及 mica2 使用的频段和功率等

写一个文件 $TOSROOT/apps/Makelocal

DEFAULT_PROGRAM=mib510 # 编程板用的型号
MIB510=/dev/ttyUSB0   # USB to serial 在 GNU/Linux 里就是这样的
DEFAULT_LOCAL_GROUP=0x88 #  group id
CFLAGS = -DCC1K_DEFAULT_FREQ=CC1K_433_002_MHZ # 无线通信使用的频段
CFLAGS += -DRADIO_XMIT_POWER=0xFF # 用最大的功率

6.看看硬件是否正常

cd $TOSROOT/apps/MicaHWVerify make mica2 

如果一切正常的话,说明 TinyOS 差不多装好了。之所以说“差不多”,是因为 TinyOS 还附带了相当多的工具,和 Java 库,这些东西我们都还没有编译过呢。接下来,把编译好的程序烧到板子上:

make reinstall mica2 

接下来,跟着Tutorial检查 通信等功能。 到现在,就差不多完成了 TinyOS 在 Debian GNU/Linux 平台上的安装。另外,如果要用 deluge 的话,需要改一下 deluge 的 Makefile:

sed -i -e \"s/DELUGE_PLATFORM=telosb/DELUGE_PLATFORM=mica2/\" \
       -e \"s/CC2420Radio/CC1000Radio/\" $TOSROOT/tools/java/net/tinyos/deluge/Makefile

6.最后有一点,是使用 USB to serial 转接线造成的。

6.1.让 Java 程序认识/dev/ttyUSB0

要修改$JAVA_HOME/jre/lib/javax.comm.properties文件,加一行:

serpath2 = /dev/ttyUSB0

6.2.让 Java 程序设置波特率时不会退出

这只是一个 workaround,就是在 $TOSROOT/tools/java目录下 grep 所有的 java 文件,找出setSerialPortParams的地方,改成这样的:

try {
      serialPort.setSerialPortParams(sf.BAUD_RATE, SerialPort.DATABITS_8,
                                     SerialPort.STOPBITS_1,
                                     SerialPort.PARITY_NONE);
} catch (Exception e) {}
serialPort.setSerialPortParams (sf.BAUD_RATE,
                                SerialPort.DATABITS_8,
                                SerialPort.STOPBITS_1,
                                SerialPort.PARITY_NONE);	
	

就是让它执行两次,第一次一定会出错:

Exception in thread \"AWT-EventQueue-0\" java.io.IOException: Not all params are supported by kernel
        at com.sun.comm.LinuxSerial.nativeSetSerialPortParams(Native Method)
        at com.sun.comm.LinuxSerial.setSerialPortParams(LinuxSerial.java:346)
        at SerialConnection.setConnectionParameters(Unknown Source)
        at SerialConnection.openConnection(Unknown Source)
        at SerialDemo.actionPerformed(Unknown Source)
        at java.awt.Button.processActionEvent(Button.java:388)
        at java.awt.Button.processEvent(Button.java:356)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

但是这一定不是内核的问题,因为C程序对串口的设置波特率操作是可以的。在这里也有人碰到相同的问题。我在这里用的是第二种办法。

May 25, 2006

伪造磁敏数据的问题

Filed under: Work

今天断断续续在写一个伪造磁敏数据的工具。的确是在“伪造数据”。因为现在磁敏和视频数据尚无同步的样本,只有同过拼凑来临时解决测试的问题。但是两种模式的样本中,车辆的速度不一样。所以,生成的磁敏数据不仅仅需要在时间轴上平移,也需要拉伸或者压缩。
这就引进了新的问题。举例来说,由于磁敏数据的采样频率是恒定的,拉伸后的磁敏数据的采样率会比原来要小。为了让采样率恒定,就需要进行插值计算。相应的,如果原始数据在时间轴上被压缩的话,就需要进行外推的计算。这些都是原来没有想到的。当初只是以为算出一个缩放系数就好,哪知道这么麻烦……
明天再想吧。

Get free blog up and running in minutes with Blogsome
Theme designed by Jay of onefinejay.com