和上次讲的不一样,这篇日志还不是讲在北京的事情。是这样的,我想在我画的软键盘后面加一个Backspace退格键。但是我这边没有开发环境,因为docodai的电脑好,所以我以前是把开发环境装在他的电脑上的,他BT,国庆回家才几天也把一个台式机给抬回去,真不累……所以他抬回去之前我把那个虚拟机拷贝出来,但是前天晚上我把那个拷贝出来的虚拟机放在别人的电脑上居然不能运行,弄了很多办法都没用,后来我只有这样了……
我用QQ远程协助连接上我同学的电脑,然后在里面打开我的虚拟机,然后在里面添加了一句话,从新编译,接着把那个编译生成的文件通过邮箱发到我这边来。
上面的过程说起来简单,我其实是吐血了一个下午!首先速度很慢,我打一个字,20秒后才有反应,我真佩服我的耐心了……然后还有我要设置NFS什么的,因为是在别人的电脑上,一切都得设置,超级郁闷啊。然后是我有一点疏忽了,我直接在里面编程是没用的,因为我的源代码是GB2312编码的,而linux采用的UTF-8编码,第一次发送回来的文件我放入开发板运行,直接是一堆乱码,搞得我没郁闷死,要知道这样搞一次回来花我多少精力啊……没办法,我只有从我这边再编程一次然后把源代码发送回去,没想到这次发送回来的编译结果又吐血:一点反应都没有!后来查清楚是因为我发送了一个错误版本的源代码过去,幸好用gedit编辑的文件会产生一个后面加~符号的备份文件,于是我在我同学那边把那个备份文件发送回来,编辑后发送回去再编译,然后再发送回来,这次终于成功了。
昨天下午我快没累死:(
2008年10月4日星期六
winter in my heart
[audio: http://bbs.ynnubs.net/music/080929/winter%20im%20my%20heart.mp3 ]
winter has come冬天已经来了
farewell to the sun太阳离得好远
it's getting colder every single day一天比一天冷
you are not here你不在这里
can't stand you're not near不能忍受你不在身边
I'll wait for you forever and I pray我会等待并为你祈祷
My Fantasy makes believe that you're with me我仿佛相信我们还在一起
I have winter in my heart冬天在我心里
cause I miss you more than words can say因为我如此想念你以至无法言语
when nights are long and lonely without you没有你的晚上是漫长和孤独的
I have winter in my heart冬天在我心里
count the hours every single day每一天都在数着时间
that lonesome time is too sad to be true那种幽寂是那样的真实那样伤感
got winter in my heart就像冬天在我心里
snow falling down雪一直下
and you're not around你不再回来
I'm all alone in that white wonderland我孤独的待在那白色的妙境里
taking a walk漫步
there's no one to talk没有一个人和我说话
we used to be together hand in hand我们过去经常是手牵手在一起
my fantasy makes me believe thar you're with me我仿佛相信我们还在一起
I have winter in my heart冬天在我心里
cause I miss you more than words can say因为我如此想念你以至无法言语
when nights are long and lonely without you没有你的晚上是漫长和孤独的
I have winter in my heart冬天在我心里
count the hours every single day每一天都在数着时间
that lonesome time is too sad to be true那种幽寂是那样的真实那样伤感
got winter in my heart就像冬天在我心里
I have winter in my heart冬天在我心里
cause I miss you more than words can say因为我如此想念你以至无法言语
when nights are long and lonely without you没有你的晚上是漫长和孤独的
I have winter in my heart冬天在我心里
count the hours every single day每一天都在数着时间
that lonesome time is too sad to be true那种幽寂是那样的真实那样伤感
winter in my heart就像冬天在我心里
2008年9月30日星期二
My ECG Device (8)
决赛通知下来了,我进决赛了!事实上我知道的有交那个论文的都进了,这让成功变的不那么兴奋,不过还是蛮高兴的。不管它,既然肥肉到手,吃了再说,不过学校那么小气,只能报销硬座还是让我有点不爽,要知道去北京很远的啊,自己得掏两百块钱车费一趟!有点郁闷。我也想趁这个机会拿个奖,再去找找老同学,也参加一下招聘会什么的,那就值了,呵呵。下一篇连载日志应该是讲在北京的事情了 :)
My ECG Device (7)
08-08-26 20:22
回到泉州,又回到了晚睡晚起的生活……
呵呵,确实是这样,在软件园学习的时候,生活超级有规律,晚上十二点半左右睡,早上七点起,回到泉州,这件事情基本很难做到~!-_-!
大概9月4号吧,时间差不多要把初赛论文交上去了,但是我都不知道怎么写,以至于只写了一点点,但是没办法,再不写就来不及了,于是那天晚上通宵写论文……早上八点写完,我也很佩服我自己的。然后是去打印,刻录光盘,然后想查一下哪里有顺丰的快递网点,因为早就听说顺丰是最快的啦,后来发现学校附近没有网点,要等那个人过来拿,而且是下午。我就出去找别家的快递了,先是到邮局,问一下EMS,工作人员说华大这边一天只有一趟就下午4点,城东邮局11点有,但是我一看表已经11点了,晕。然后我没办法就只有出去找找后面那些什么什么通的快递了,找到一家申通,问了一下说12点有一趟,听到老板信心满满的后天到的承诺后,我把东西给了他了,之后就回去玩了(我倒也不太想睡,还是觉得玩比较重要),然后下午睡了个午觉睡到晚上8点,起来赶快到申通的网站上查下自己的单号,发现居然一点反应都没有,当时老板说中午12点有寄出去的啊,感觉上当受骗了似的,于是出去找老板问问,结果他说东西刚刚才拿走,晕。这老板真不厚道,知道你这么完才送走,我肯定用EMS或者顺丰了。这才去吃了晚饭,晚上没事做,看网页,聊天一边刷申通的网站,没想到一直到凌晨5点都没有结果,我是真的快气晕了,算了去睡了。中午起来一看才有了一个记录,终于放心一点了,我去网上搜索申通,发现有不少人对申通的龟速都有意见的,说一个东西一个礼拜,甚至几个礼拜都没寄到,但是顺丰就都是好评,这个时候我就跟上了贼船似的。唉,怎一个郁闷形容的了?后来嘛等了好几天东西终于是到了,但是我知道以后稍微重要一点的东西我都不会用申通了。终于一个月的事情终于告一个段落,接下来就等着决赛通知吧。
My ECG Device (6)
老久没写博客,现在变成写回忆录了,我记得当时上街确实有值得写的东西啊,但是这么久忘了,没什么好写的了-_-! 只好把唯一有点印象的事情都罗列一下了。
首先软件园去火车站的公交车只要一块钱但是却坐了半个多小时,厦门的公交车比泉州的可便宜的多了。逛街分两次,第一天在火车站旁边的那个沃尔玛里买了一只永硕表(我看中一只卡西欧的表实在可爱,但是却贵十倍),以后有钱了再买卡西欧吧:) ,话说我还是第一次认真的逛这栋商贸城,以前虽然来过好多次,但都是来去匆匆,没想到往上走,居然有这么多店,最后是5楼了,我过去一看有点傻眼了,这里好吃的实在太多了,一边看一边流口水,后来搞了一碗砂锅解决了。第二天逛是先到莲扳还是什么地方吧,反正哪里有一个图书城,进去一看果然不同反响,书还真多,不过都是按照原价卖的,真想不通怎么会有人买,我都是网上购书的,一般都打七五折,呵呵。然后去了电子城,买了一个OVC C50的耳机,应该是40元成交。其他没什么好说的了。
首先软件园去火车站的公交车只要一块钱但是却坐了半个多小时,厦门的公交车比泉州的可便宜的多了。逛街分两次,第一天在火车站旁边的那个沃尔玛里买了一只永硕表(我看中一只卡西欧的表实在可爱,但是却贵十倍),以后有钱了再买卡西欧吧:) ,话说我还是第一次认真的逛这栋商贸城,以前虽然来过好多次,但都是来去匆匆,没想到往上走,居然有这么多店,最后是5楼了,我过去一看有点傻眼了,这里好吃的实在太多了,一边看一边流口水,后来搞了一碗砂锅解决了。第二天逛是先到莲扳还是什么地方吧,反正哪里有一个图书城,进去一看果然不同反响,书还真多,不过都是按照原价卖的,真想不通怎么会有人买,我都是网上购书的,一般都打七五折,呵呵。然后去了电子城,买了一个OVC C50的耳机,应该是40元成交。其他没什么好说的了。
2008年9月21日星期日
My ECG Device (5)
大概到了8月15号左右吧,在与学长聊什么时候回去的时候我突然发现原来开学时间是9月1号而不是之前我一直认为的9月10号。突然我就感觉到时间很紧了,但是到那个时候为止还没有做出一点东西来呢,这天晚上回去趁洗澡的时候仔细的计划了很久,等L学长回来的时候我就跟他讲了我的计划:5天之内完工。我跟他讲的目的是为了给自己一点无形的压力,督促自己。学长觉得不可能。我说如果明天项目没有大的进展的话,那么明天晚上我就不回来睡觉了,在实验室呆通宵。
第一天效率还算过得去,结果第二天我就回来睡觉了。第二天白天过后,我还是感觉到如果这样下去是来不及的,于是我晚上没有回去睡觉,在实验室一直做到早上4点,然后去实验室一个小隔间睡地铺,7点又起来继续工作了。现在是第三天了,直到中午,我才回住处,刷牙洗脸,然后去软件园外的岭兜小区吃了饭,回来洗个澡,(这个顺序才不会刚洗完澡又全身出汗)一身舒爽的回实验室继续工作,这天晚上我到一点的时候就感觉很困了,我跟还在哪里工作的一位学长打个招呼叫他回去的时候叫我起来,我则先去地铺睡,等到两点多学长叫我起来的时候我发现我实在太困了,实在起不来,于是继续睡,大概7点被我的闹钟给叫起来了,继续工作。这个时候是第4天了,这个时候工作进展了差不多一半了,我还得加把劲,像昨天一样,我还是工作到中午,然后回去刷牙洗脸,吃饭,再洗澡。完后,我直接把洗漱的工具和凉席,蚊帐都一起带到实验室去了。这天晚上我一直工作到早上7点,然后发现自己处于一种无意识状态,于是去洗手间刷牙洗脸准备睡觉,这个时候我发现窗外的朝霞很漂亮!多久没有见过这么漂亮的朝霞了,或者从来都没见过这么漂亮的呢,顿时心情一阵舒爽,进实验室打地铺睡了,8点我又起来了。这是第5天了,第5天的情况和前两天没什么两样,反正是工作到凌晨几点的时候,我感觉完工了,于是就去睡了一觉,直到第6天早上9点学长学姐们都进来我才起来。
一觉起来,发现自己真的在5天之内完成了任务,心情一阵舒爽,这天已经是8月21号了,于是打算回泉州了,口袋里剩的钱也只有几十块了。上网逛逛google reader,校内什么的,就到中午了,我收拾了一下东西,感觉今天回去还是有点赶,于是打算第二天回去,于是下午我就去逛街了(我一个人去,我不喜欢跟男的去逛街,但又没女生陪我逛),逛街的具体内容下一篇日志讲。回来跟学长学姐打个招呼说要第二天回去,本来以为要自己买票回去,没想到学长说明天有一位学长回过来可以带学校公车的票过来,哇塞,又给我省了30块车票钱。于是22号那天我又跟21号一样,上午上网瞎逛,下午去上街,晚上拿到车票了,收拾好东西,第二天上午下载拳皇单机游戏玩了一个上午。跟学长学姐们道别后,我就坐车去了火车站,踏上了回泉州之路……
第一天效率还算过得去,结果第二天我就回来睡觉了。第二天白天过后,我还是感觉到如果这样下去是来不及的,于是我晚上没有回去睡觉,在实验室一直做到早上4点,然后去实验室一个小隔间睡地铺,7点又起来继续工作了。现在是第三天了,直到中午,我才回住处,刷牙洗脸,然后去软件园外的岭兜小区吃了饭,回来洗个澡,(这个顺序才不会刚洗完澡又全身出汗)一身舒爽的回实验室继续工作,这天晚上我到一点的时候就感觉很困了,我跟还在哪里工作的一位学长打个招呼叫他回去的时候叫我起来,我则先去地铺睡,等到两点多学长叫我起来的时候我发现我实在太困了,实在起不来,于是继续睡,大概7点被我的闹钟给叫起来了,继续工作。这个时候是第4天了,这个时候工作进展了差不多一半了,我还得加把劲,像昨天一样,我还是工作到中午,然后回去刷牙洗脸,吃饭,再洗澡。完后,我直接把洗漱的工具和凉席,蚊帐都一起带到实验室去了。这天晚上我一直工作到早上7点,然后发现自己处于一种无意识状态,于是去洗手间刷牙洗脸准备睡觉,这个时候我发现窗外的朝霞很漂亮!多久没有见过这么漂亮的朝霞了,或者从来都没见过这么漂亮的呢,顿时心情一阵舒爽,进实验室打地铺睡了,8点我又起来了。这是第5天了,第5天的情况和前两天没什么两样,反正是工作到凌晨几点的时候,我感觉完工了,于是就去睡了一觉,直到第6天早上9点学长学姐们都进来我才起来。
一觉起来,发现自己真的在5天之内完成了任务,心情一阵舒爽,这天已经是8月21号了,于是打算回泉州了,口袋里剩的钱也只有几十块了。上网逛逛google reader,校内什么的,就到中午了,我收拾了一下东西,感觉今天回去还是有点赶,于是打算第二天回去,于是下午我就去逛街了(我一个人去,我不喜欢跟男的去逛街,但又没女生陪我逛),逛街的具体内容下一篇日志讲。回来跟学长学姐打个招呼说要第二天回去,本来以为要自己买票回去,没想到学长说明天有一位学长回过来可以带学校公车的票过来,哇塞,又给我省了30块车票钱。于是22号那天我又跟21号一样,上午上网瞎逛,下午去上街,晚上拿到车票了,收拾好东西,第二天上午下载拳皇单机游戏玩了一个上午。跟学长学姐们道别后,我就坐车去了火车站,踏上了回泉州之路……
2008年9月7日星期日
My ECG Device (4)
到厦门软件园后没几天,就是八月八日了,也就是奥运会开幕那天,相信大家都有看啦。但是我们那边有特特点就是电脑多,但是没电视看,唯一有一个电视机还是黑白的,但是没有有线信号接入,甚至天线都没有,晕啊。于是我们最后商量好用网络电视看,我们决定把所有的网络带宽集合起来,忘了说下,我们这里是N多人共用10M的带宽,因为又迅雷,BT这种东西,所以网络从来没有快过,我在哪里听歌,听了一个月都是我MP3里的那些歌,为什么不载歌?因为下载速度实在是太慢了……不过因为要看奥运会,所以我们所有的人把自己的下载工具全部关掉,不用网络,集中带宽到一台电脑上放,大家一起来。你可能觉得纳闷了,这么多人一起看一台电脑?呵呵,这边就是设备仪器多,我们又投影仪!我们把投影机接上去后,把灯关了,就跟放电影一个感觉,哈哈。我们晚上七点,大家就都搬来椅子各自坐好等着看了,看完新闻联播,和一系列的广告,这些都很流畅,但是等到八点的时候,网络突然就又问题了一卡一卡的,一卡半天的。我们想是很多新用户接入导致P2P网络不平衡的原因,但是这之后网络也没好过,往往到精彩时刻就卡上半分钟,郁闷啊,不过电影的效果不错。这个晚上跟大家一起看开幕式,蛮好玩的。
2008年9月6日星期六
My ECG Device (3)
这里讲些中途一段时间的琐事了。
吃饭问题,吃饭要走老远,果然如同G学长说的,贼贵的,在学校卖2元的,这里卖4元,学校卖1元的,这里卖两元,学校卖5毛的,这里卖1元。翻倍抢钱啊……
软件园的风景很不错,有山有水的,房子不高,学长说是为了防止跳楼,风景好是给人放松的,做IT行业很压力大的,需要放松。
我每天晚上11点就回寝室,其他的学长一般是12点半以后回来,这中间的时间我就可以洗澡,洗衣服了,没人跟我抢着用水龙头,然后我就睡觉了,我不知道他们具体什么时候回来的,因为我睡着了:) 早上我一般7点钟就自然醒,这种感觉实在是太美妙了,其实我在学校也想早睡早起了,但是几分没这么干过。早睡早起果然一天都精神焕发啊。
每天早上我起床后,先去买早餐,早餐还不错,不算贵,蛋糕有6毛小的,1块2大的,然后买个菜包7毛(我对肉包有阴影),再来一个花生奶1块2或者八宝粥2块,早餐一般就这样,很爽啊,那个八宝粥是热的哦,对了,里面还有两个鹌鹑蛋^_^ 不贵吧。学长学姐们好像很少有吃早餐的习惯,我到实验室的时候一般7点半吧,他们一般8点半后过来,对了,交待一下,我们实验室有两个,一个大的,一个小的,我就在那个小的里面,而且烧开水的壶在我旁边,所以他们进来我知道,陆陆续续的,但是很多人一进来就泡上一杯豆浆,我就奇怪了,他们的豆浆粉应该是一起去买的吧,要不然怎么每人一包呢?
中饭晚饭的时候,总会有那位学长过来叫:吃饭了吃饭了,然后大家一起去。其实这边有三个实验室,两个是电子系的,我就是电子系的,还有一个实验室是计算机系的,那个实验室的吃饭的时候就跟我们不是一起去了,看了关系还是差些。
吃饭还得说下,星期一到星期五软件园里的食堂才会开,星期六星期天不是叫外卖就是自己走到软件园外的岭兜小区去吃了,走好远,真可怜。
有天晚上口渴的厉害,但是没有水喝,于是第二天起了个大早去旁边的那家YES(悦士)便利店买了瓶水,TNND,居然要两块钱!于是之后我就去岭兜的超市买了好几瓶水过来储存了。
我问L学长有没有数码相机,我拍些照片以后留念一下,特别使我们睡觉的环境,没想到他说如果我拍了数码相机就要被砸了,呵呵。那个睡觉的地方还真不像是正规学生住的地方,比民工住的地方还差啊……
待续待续……
吃饭问题,吃饭要走老远,果然如同G学长说的,贼贵的,在学校卖2元的,这里卖4元,学校卖1元的,这里卖两元,学校卖5毛的,这里卖1元。翻倍抢钱啊……
软件园的风景很不错,有山有水的,房子不高,学长说是为了防止跳楼,风景好是给人放松的,做IT行业很压力大的,需要放松。
我每天晚上11点就回寝室,其他的学长一般是12点半以后回来,这中间的时间我就可以洗澡,洗衣服了,没人跟我抢着用水龙头,然后我就睡觉了,我不知道他们具体什么时候回来的,因为我睡着了:) 早上我一般7点钟就自然醒,这种感觉实在是太美妙了,其实我在学校也想早睡早起了,但是几分没这么干过。早睡早起果然一天都精神焕发啊。
每天早上我起床后,先去买早餐,早餐还不错,不算贵,蛋糕有6毛小的,1块2大的,然后买个菜包7毛(我对肉包有阴影),再来一个花生奶1块2或者八宝粥2块,早餐一般就这样,很爽啊,那个八宝粥是热的哦,对了,里面还有两个鹌鹑蛋^_^ 不贵吧。学长学姐们好像很少有吃早餐的习惯,我到实验室的时候一般7点半吧,他们一般8点半后过来,对了,交待一下,我们实验室有两个,一个大的,一个小的,我就在那个小的里面,而且烧开水的壶在我旁边,所以他们进来我知道,陆陆续续的,但是很多人一进来就泡上一杯豆浆,我就奇怪了,他们的豆浆粉应该是一起去买的吧,要不然怎么每人一包呢?
中饭晚饭的时候,总会有那位学长过来叫:吃饭了吃饭了,然后大家一起去。其实这边有三个实验室,两个是电子系的,我就是电子系的,还有一个实验室是计算机系的,那个实验室的吃饭的时候就跟我们不是一起去了,看了关系还是差些。
吃饭还得说下,星期一到星期五软件园里的食堂才会开,星期六星期天不是叫外卖就是自己走到软件园外的岭兜小区去吃了,走好远,真可怜。
有天晚上口渴的厉害,但是没有水喝,于是第二天起了个大早去旁边的那家YES(悦士)便利店买了瓶水,TNND,居然要两块钱!于是之后我就去岭兜的超市买了好几瓶水过来储存了。
我问L学长有没有数码相机,我拍些照片以后留念一下,特别使我们睡觉的环境,没想到他说如果我拍了数码相机就要被砸了,呵呵。那个睡觉的地方还真不像是正规学生住的地方,比民工住的地方还差啊……
待续待续……
My ECG Device (2)
第二天,一大早醒来已经八点多了,昨天晚上交待L学长早上起来叫我一起起来,没想到他一个人走了……后来问他他说是因为看我睡太香-_-! 于是我又等着G学长起来,刷牙洗脸洗澡,然后我请G学长带我一起去买点生活用品,因为我没有刷牙用的被子,所以就没刷牙就出去了结果直接导致我没有早餐吃,饿了一个上午。虽然平常我就不吃早餐,但是一般也不会这么早起来,早上也没什么活动,哪里像这个,购物走来走去。饿半死。跟G学长一起去买东西,最重要的是买了几大瓶的纯净水。买完东西回来后。 回到住处之后洗漱一下,喝掉半瓶水,这个时候我才感觉我像个人!!!真的,我真的是这种感觉,洗漱喝水之前我真的觉得我不像个人,但是洗漱完喝完水后,浑身那个爽啊,我才又感到我像一个正常人了。感觉强烈!!然后,我又自己出去了一趟,想买张手机卡,但是一问价钱,贼贵,一张卡卖80里面只有30元话费,汗,不买了,还是打公用电话吧,于是IP电话打回家。打完电话,找了家盖饭吃了顿。完后,我有一种重新做人的感觉啊……下午就去实验室了,开机,哇塞我的HP工作站真的不错哦。于是慢慢的装上一些工作用的软件什么的,这部分省略……下午有件事情不知道是怎么回事,在实验室没看到G学长,他下午回泉州了,我也没去送他,这件事情我一直很遗憾。到实验室很后悔的一件事情是没把纯净水带过来,因为我以为既然实验室又开水喝了,就不用带纯净水了,后来发现这水合起来味道实在是不行,于是后来我就带了水过来了,但是后来因为出去买水很难,因为要走很远,那个开水我也就慢慢习惯了。然后是开始学习,没什么特别的……
My ECG Device (1)
最近的一个月主要完成的任务就是这个,从8月6号在校内网上发布这条状态信息到现在,整好一个月:
其实我也没这么专啦,一个月时间如果天天做这个,那我就会成仙~~
一个月前到厦门软件园的时候,我就想写篇日志,但是懒啊,懒没办法,拖了一天又一天,想最后来写个总结,这不,写总结来了。 从到厦门软园的第一天开始讲起吧。(真正的流水账啊)
一个月前今天:现在正在准备呢,心里一定在想:我去哪里之后努力学习,我就会知道嵌入式开发究竟是怎么回事了。下午,一点开始,基本上就收拾一下衣服,生活用品之类的,装箱子里,三点收拾完毕,跟G学长打个招呼,三点二十出发,去承露泉等车,车还真准时,说四点开,三点五十八都看不到影子。G学长说车到厦门的时间是一个小时零三分钟,结果到厦门下车的时候看了下表,发现准啊,只偏差了一分钟左右,还是因为路上在修路。这个时候我们在厦门校区旁的马路上,也就是如果在厦门坐公交车停靠的“兑山”站。然后呢,因为本来想去坐另一趟始发站的车,需要走路一段,但是走了一会儿,发现行李还是太重哇,索性在路边等54路的车了,哇塞,真的很挤,车票也贵啊,一人四元,这票价,真的是泉州风格(泉州公交车估计是全国最贵的吧)。G学长问我有没有零钱,我就拿了八块出来,没想到G学长退还我四块,自己用e通卡刷了四块,原来G学长跟我坐公交车也AA制,呵呵。车到SM城市广场下车,再东拐西拐,吃了个沙县小吃(学长又说AA制,搞的我想感谢下都不行),坐芙蓉苑到软件园的车,又是很挤。软件园的上一站是三安电子,哇塞,原来三安电子还蛮有派头的嘛,以后找工作考虑下。一到软件园我们学校的据点,就给我一个下马威:门是锁住的,G学长没钥匙,但是就在我纳闷时候,说时迟,那时快,G学长“嗖”的一声从窗户跳了进去,然后是我跳进去,G学长说,这里不是每个人都有钥匙,而且房间需要通风,所以窗户没关,所以房间里东西也老丢。我进去一看,哇塞,那哪里是寝室啊,整个一个展览厅,原来是我们学校向厦门软件园里的公司展示风采的地方,被我们用来做大寝室了。里面摆上了七八个铁床。我把东西放一下,看了下卫浴,条件艰苦啊……水龙头就一个,而且是洗手池里的,洗手池很小,连个脸盆都放不下,怎么洗澡啊~~唉,G学长又发话了:“早说过这里条件艰苦,你如果不来就不要来嘛”,我就说了,学习东西嘛,条件艰苦也就一个月嘛。把东西整理好之后,我们就去把重要的东西转移到实验室去,到了实验室后,发现很是壮观啊,跟公司里的白领似的,事实上后来了解到,那个实验室一半是我们学校的,另一半确实是一家公司,做的产品是网络收音机,要卖1000多块钱一台的收音机呢,买的人真是傻子。在实验室的学长学姐们真的是很热情,马上给我安排一个位置,又从后面的仓库里抬出一台新的电脑出来,给我摆在桌子上了,我一看那配置,哇塞,这电脑太强大了吧,后来我去网上查过,这电脑是惠普工作站级别的,得一万多主机,显示器也得一千多。学校真是钱多,舍得花钱啊。等我把系统装完之后,差不多就可以回去了,这个时候我问旁边的学长,喝水的问题怎么解决,因为我实在是渴啊,这附近又没有卖水的地方。结果学长说需要从洗手间打水过来烧开用。正好这里还有自来水,于是我烧了点,喝了点,因为太烫,没喝很多,后来的事情使我后悔没有趁热多喝点,烫着也值啊……回到住处,口渴的厉害,问L学长附近有没有卖水的地方,得到的答复是没有,不过好像我过来的时候看到路上有一家便利店,于是我又跑出去看看,也关门了,郁闷,回来之后,我口渴的已经快生烟了,L学长拿出一个纯净水的瓶子,里面还有一点水,叫我喝,按照我往常的风格,就算是再渴也不会喝别人喝剩下的水吧?但是刚来这里,也不好拒绝学长的好意,喝了。后来的一个月我都没看到学长买水到住处,或者没买过水,真不知道他第一天晚上给我的那点水是怎么来的,现在想来都觉得喝这水比喝自来水不靠谱的太多啊。所以说之前烫着也要多喝啊。经过艰苦的洗漱,上床睡觉了,我睡的是别人的床,因为我第一天晚上过去,来不及买床垫。睡了,下一节讲明天的故事。
明天去厦门,预计在厦门软件园呆一个月左右。(错了,是今天,现在已经凌晨半点了)
其实我也没这么专啦,一个月时间如果天天做这个,那我就会成仙~~
一个月前到厦门软件园的时候,我就想写篇日志,但是懒啊,懒没办法,拖了一天又一天,想最后来写个总结,这不,写总结来了。 从到厦门软园的第一天开始讲起吧。(真正的流水账啊)
一个月前今天:现在正在准备呢,心里一定在想:我去哪里之后努力学习,我就会知道嵌入式开发究竟是怎么回事了。下午,一点开始,基本上就收拾一下衣服,生活用品之类的,装箱子里,三点收拾完毕,跟G学长打个招呼,三点二十出发,去承露泉等车,车还真准时,说四点开,三点五十八都看不到影子。G学长说车到厦门的时间是一个小时零三分钟,结果到厦门下车的时候看了下表,发现准啊,只偏差了一分钟左右,还是因为路上在修路。这个时候我们在厦门校区旁的马路上,也就是如果在厦门坐公交车停靠的“兑山”站。然后呢,因为本来想去坐另一趟始发站的车,需要走路一段,但是走了一会儿,发现行李还是太重哇,索性在路边等54路的车了,哇塞,真的很挤,车票也贵啊,一人四元,这票价,真的是泉州风格(泉州公交车估计是全国最贵的吧)。G学长问我有没有零钱,我就拿了八块出来,没想到G学长退还我四块,自己用e通卡刷了四块,原来G学长跟我坐公交车也AA制,呵呵。车到SM城市广场下车,再东拐西拐,吃了个沙县小吃(学长又说AA制,搞的我想感谢下都不行),坐芙蓉苑到软件园的车,又是很挤。软件园的上一站是三安电子,哇塞,原来三安电子还蛮有派头的嘛,以后找工作考虑下。一到软件园我们学校的据点,就给我一个下马威:门是锁住的,G学长没钥匙,但是就在我纳闷时候,说时迟,那时快,G学长“嗖”的一声从窗户跳了进去,然后是我跳进去,G学长说,这里不是每个人都有钥匙,而且房间需要通风,所以窗户没关,所以房间里东西也老丢。我进去一看,哇塞,那哪里是寝室啊,整个一个展览厅,原来是我们学校向厦门软件园里的公司展示风采的地方,被我们用来做大寝室了。里面摆上了七八个铁床。我把东西放一下,看了下卫浴,条件艰苦啊……水龙头就一个,而且是洗手池里的,洗手池很小,连个脸盆都放不下,怎么洗澡啊~~唉,G学长又发话了:“早说过这里条件艰苦,你如果不来就不要来嘛”,我就说了,学习东西嘛,条件艰苦也就一个月嘛。把东西整理好之后,我们就去把重要的东西转移到实验室去,到了实验室后,发现很是壮观啊,跟公司里的白领似的,事实上后来了解到,那个实验室一半是我们学校的,另一半确实是一家公司,做的产品是网络收音机,要卖1000多块钱一台的收音机呢,买的人真是傻子。在实验室的学长学姐们真的是很热情,马上给我安排一个位置,又从后面的仓库里抬出一台新的电脑出来,给我摆在桌子上了,我一看那配置,哇塞,这电脑太强大了吧,后来我去网上查过,这电脑是惠普工作站级别的,得一万多主机,显示器也得一千多。学校真是钱多,舍得花钱啊。等我把系统装完之后,差不多就可以回去了,这个时候我问旁边的学长,喝水的问题怎么解决,因为我实在是渴啊,这附近又没有卖水的地方。结果学长说需要从洗手间打水过来烧开用。正好这里还有自来水,于是我烧了点,喝了点,因为太烫,没喝很多,后来的事情使我后悔没有趁热多喝点,烫着也值啊……回到住处,口渴的厉害,问L学长附近有没有卖水的地方,得到的答复是没有,不过好像我过来的时候看到路上有一家便利店,于是我又跑出去看看,也关门了,郁闷,回来之后,我口渴的已经快生烟了,L学长拿出一个纯净水的瓶子,里面还有一点水,叫我喝,按照我往常的风格,就算是再渴也不会喝别人喝剩下的水吧?但是刚来这里,也不好拒绝学长的好意,喝了。后来的一个月我都没看到学长买水到住处,或者没买过水,真不知道他第一天晚上给我的那点水是怎么来的,现在想来都觉得喝这水比喝自来水不靠谱的太多啊。所以说之前烫着也要多喝啊。经过艰苦的洗漱,上床睡觉了,我睡的是别人的床,因为我第一天晚上过去,来不及买床垫。睡了,下一节讲明天的故事。
2008年8月14日星期四
sqlite在ARM7+uclinux上的移植
下载源码:
http://www.sqlite.org/sqlite-amalgamation-3_6_1.zip
http://www.sqlite.org/sqlite-source-3_6_1.zip
下面的包我们只用到shell.c,
把shell.c从sqlite-source-3_6_1.zip中解压出来和从sqlite-amalgamation-3_6_1.zip中解压出来的三个源文件放在一起。
编译:(我用的是博创的UP-NETARM 3000)
[CODE]
arm-uclibc-gcc *.c -c -g -O2 -D__linux__ -DSQLITE_OMIT_LOAD_EXTENSION -I/uclinux/uClinux-2.4.x/include -I/uclinux/uClibc-0.9.19/include -fno-builtin -nostartfiles
arm-uclibc-gcc *.o -Wall -elf2flt -static -L/uclinux/uClibc-0.9.19/lib -lc -lpthread -o sqlite3
[/CODE]
好了,把sqlite3拷到开发板上去就可以用了
http://www.sqlite.org/sqlite-amalgamation-3_6_1.zip
http://www.sqlite.org/sqlite-source-3_6_1.zip
下面的包我们只用到shell.c,
把shell.c从sqlite-source-3_6_1.zip中解压出来和从sqlite-amalgamation-3_6_1.zip中解压出来的三个源文件放在一起。
编译:(我用的是博创的UP-NETARM 3000)
[CODE]
arm-uclibc-gcc *.c -c -g -O2 -D__linux__ -DSQLITE_OMIT_LOAD_EXTENSION -I/uclinux/uClinux-2.4.x/include -I/uclinux/uClibc-0.9.19/include -fno-builtin -nostartfiles
arm-uclibc-gcc *.o -Wall -elf2flt -static -L/uclinux/uClibc-0.9.19/lib -lc -lpthread -o sqlite3
[/CODE]
好了,把sqlite3拷到开发板上去就可以用了
2008年8月10日星期日
编译hello world也能出错……
代码就是:
[code:c]
#include "stdio.h"
int main()
{
printf("hello, world \n");
return 0;
}
[/code]
Makefile:
[code]
CC=arm-uclibc-gcc
EXEC = hello
OBJS = hello.o
CFLAGS +=
LDFLAGS+=-elf2flt -static
all:$(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o
[/code]
make一下发现错误:
hello.c:1: '#include' expects 'FILENAME' or'半天都没明白是怎么回事,后来又在linux里用gedit编辑了一个新的hello.c,可以了……
原来原因就是:不能在windows里写程序拿到linux里去编译 -_-!
[code:c]
#include "stdio.h"
int main()
{
printf("hello, world \n");
return 0;
}
[/code]
Makefile:
[code]
CC=arm-uclibc-gcc
EXEC = hello
OBJS = hello.o
CFLAGS +=
LDFLAGS+=-elf2flt -static
all:$(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o
[/code]
make一下发现错误:
hello.c:1: '#include' expects 'FILENAME' or
原来原因就是:不能在windows里写程序拿到linux里去编译 -_-!
2008年8月3日星期日
发现Keil uVision 3 for C51 bug一只
今天早上7点20才睡。 -_-!
原因是我一整晚都在调试一个单片机程序,本来一个非常简单的程序,但是却一直有问题,整晚都抓狂的很,不过最终问题的答案找到了,是
编译器的bug ! 我的汗啊……
贴出我的源码:
1, main.c :
[code:c]
#include "kernel.h"
#include "stdio.h"
unsigned char print_timer = NO_TASK ;
int print ()
{
printf ( "i am in print \n" ) ;
}
void flash_led ()
{
printf ("flash \n" ) ;
}
void reg()
{
static bit f = 1 ;
if ( f )
{
if ( print_timer == NO_TASK )
{
print_timer = reg_task ( print, 40 ) ;
printf(" task create seccess ! id : %d \n", (int)print_timer ) ;
}
}
else
{
unreg_task ( &print_timer ) ;
printf (" task print has been unreg ! \n" ) ;
}
f = ~f ;
}
void main()
{
SBUF = ' ' ;
kernel_init () ;
//reg_task ( flash_led, 40 ) ;
reg_task ( flash_led, 400 ) ;
reg_task ( reg, 80 ) ;
while (1) ;
}
[/code]
2, kernel.c :
[code:c]
#include "kernel.h"
void kernel_init ()
{
TMOD |=0x01;
PT0=1; //设置定时器的优先级高,精确定时
TH0=0x9e; //40HZ,25ms kernel freq
TL0=0x57;
EA = 1 ;
ET0=1; //允许定时器0中断
TR0=1; // 核心定时器运行
}
static TASK funp[MAX_TASK+1] = { (TASK)0 } ; //存放函数地址
static int freq[MAX_TASK+1] = { (int)0 } ; // 每隔多少个25ms运行一次
static int counter = 1 ;
static int max_id = 0 ;
int reg_task ( TASK t, int f ) // 定时器的时间是 time*25ms
{
disable_kernel ;
if ( (max_id == MAX_TASK) || (f==0) || (t==(TASK)0) )
{
enable_kernel ;
return 0 ;
}
max_id ++ ;
funp[max_id] = (TASK)t ;
freq[max_id] = f ;
enable_kernel ;
return max_id ;
}
void unreg_task ( int * task_id )
{
int id ;
disable_kernel ;
id = *task_id ;
if ( id == 0 )
{
enable_kernel ;
return ; // 没有0这个任务,不用注销任务
}
funp[id] = funp[max_id] ;
freq[id] = freq[max_id] ;
max_id -- ;
*task_id = 0 ; // 这样在外面检测任务ID的时候,显示为0,表示这个任务不存在。
enable_kernel ;
}
void time_0_kernel() interrupt 1 //using 2 但是为什么我不能切换寄存器组呢????一旦去掉注释,输出结果马上不同
{
int id ;
ET0 = 0; // 禁用中断
if ( counter++ == 26400 ) counter = 1 ; // 最长定时器为一个小时
//定时器任务调度
id = max_id ;
while ( id )
{
if ( freq[id] > 0 )
if ( (counter%freq[id]) == 0 )
(funp[id])() ;
id -- ;
}
TH0=0x9e; //40HZ,25ms kernel freq
TL0=0x57;
ET0 = 1 ; // 开启定时器中断
}
[/code]
3, kernel.h :
[code:c]
#ifndef MY_KERNEL_H
#define MY_KERNEL_H
#include "REGX51.H"
#include "stdio.h"
#include "intrins.h"
#define disable_interrupt ( EA = 0 )
#define enable_interrupt ( EA = 1 )
#define disable_kernel (TR0 = 0 )
#define enable_kernel ( TR0 = 1 )
#define MAX_TASK 6
typedef void ( * TASK ) () ;
void kernel_init () ;
int reg_task ( TASK timer_task, int time ) ;
void unreg_task ( int * id ) ;
#endif
[/code]
上面是没有问题的代码可以在Keil uVison3 for 51 中仿真运行,结果如图:
![]()
src='http://music.blogcn.com/wp-content/uploads/154/15462/2008/08/right_result.jpg' alt='right_result.jpg' />
但是,如果我把 kernel.c中的那个注释去掉,即我切换寄存器组,马上就会出问题。输出的结果立即不同 :
![]()
src='http://music.blogcn.com/wp-content/uploads/154/15462/2008/08/wrong_result.jpg' alt='wrong_result.jpg' />
这甚至只是错误结果的一种,因为还有好几种输出情况,但都是错误的。
一开始我以为是我切换寄存器有问题,不能切换,但是我找半天也找不到不能切换的理由,而是找到要切换的理由:我可以省下8字节的堆栈空
间。怎么想都得不到答案,最后我拼了,把它反汇编之后从汇编指令一条条查看,最后发现错误的原因在这里:
![]()
src='http://music.blogcn.com/wp-content/uploads/154/15462/2008/08/keil_bug.JPG' alt='keil_bug.JPG' />
下面我来分析一下这几行汇编指令:
这一段代码的目的是把我传递过来的函数指针值存放在适当的地方,这样,适当
时候我可以从这个地方取出函数指针,并进行函数调用。
这里编译器设置把函数地址存放在2AH开始后的一个数组里,因为在keil C51里一
个函数指针占用三个字节,第一个字节存放的是指针类型,第二个和第三个字节
分别存放高位和地位的地址。所以,第一个函数的地址存放在2BH(高位)和2CH(低
位),第二个就存放在2EH和2FH了,依次类推。
第1行 : 把我传递过来的函数指针值的高位存到寄存器R2
第2行 : 把我传递过来的函数指针值的低位存到寄存器R1
第3行 : 3FH里存放的是函数指针值数组的偏移量,把偏移量赋值给A
第4行 : 把每个地址占用的长度赋值给B
第5行 : 做一个乘法,得到的结果就是A,其中就是我现在应该存放函数指针值
的地址的偏移量
第6行 : 把得到的偏移量加上数组的基址2AH得到最终应该存放的地址
第7行 : 把地址值给R0,即将用R0做寄存器寻址之用
第8行 : 把该指针的类型值(存放在13H)先存入
第9行 : 寄存器指针指向下一个字节
第10行: 把函数指针值的高位存入
第11行: 寄存器指针指向下一个字节
第12行: 把函数指针值的低位存入
如果只看我的注释的话是一点问题也没有的,如果你看代码就应该发现一点不对劲了,在第10行和第12行,分别把函数指针值的高位和地位存
入,而函数指针值的高位和地方在前面两行就暂存在了R2和R1中,所以这个时候应该用:
MOV @R0, R2和MOV @R0, R1才对吧?对,这是最保险的,但是图中编译器生成的代码如果使用的是寄存器第0组的话也是没有问题的,因为第0
组的R2和R1地址就是02H和01H,但是目前的问题是,我已经切换了寄存器组,所以应该用R2和R1才是对的。我不知道编译器这个时候在耍什么
小聪明,好好的R2和R1不用,用绝对地址来表示。
找到问题的原因后,通过直接修改汇编代码,程序又成功运行了。
这个时候是早上四点半,接着上网和jerome聊了会天,五点半了,细细刷刷,6点了,开电视看,七点二十,睡了……
八点四十又起来了,因为我一天多没去实验室,据说今天要调试,我就过去了,不一会儿,调试完毕,写篇日志,睡了……
原因是我一整晚都在调试一个单片机程序,本来一个非常简单的程序,但是却一直有问题,整晚都抓狂的很,不过最终问题的答案找到了,是
编译器的bug ! 我的汗啊……
贴出我的源码:
1, main.c :
[code:c]
#include "kernel.h"
#include "stdio.h"
unsigned char print_timer = NO_TASK ;
int print ()
{
printf ( "i am in print \n" ) ;
}
void flash_led ()
{
printf ("flash \n" ) ;
}
void reg()
{
static bit f = 1 ;
if ( f )
{
if ( print_timer == NO_TASK )
{
print_timer = reg_task ( print, 40 ) ;
printf(" task create seccess ! id : %d \n", (int)print_timer ) ;
}
}
else
{
unreg_task ( &print_timer ) ;
printf (" task print has been unreg ! \n" ) ;
}
f = ~f ;
}
void main()
{
SBUF = ' ' ;
kernel_init () ;
//reg_task ( flash_led, 40 ) ;
reg_task ( flash_led, 400 ) ;
reg_task ( reg, 80 ) ;
while (1) ;
}
[/code]
2, kernel.c :
[code:c]
#include "kernel.h"
void kernel_init ()
{
TMOD |=0x01;
PT0=1; //设置定时器的优先级高,精确定时
TH0=0x9e; //40HZ,25ms kernel freq
TL0=0x57;
EA = 1 ;
ET0=1; //允许定时器0中断
TR0=1; // 核心定时器运行
}
static TASK funp[MAX_TASK+1] = { (TASK)0 } ; //存放函数地址
static int freq[MAX_TASK+1] = { (int)0 } ; // 每隔多少个25ms运行一次
static int counter = 1 ;
static int max_id = 0 ;
int reg_task ( TASK t, int f ) // 定时器的时间是 time*25ms
{
disable_kernel ;
if ( (max_id == MAX_TASK) || (f==0) || (t==(TASK)0) )
{
enable_kernel ;
return 0 ;
}
max_id ++ ;
funp[max_id] = (TASK)t ;
freq[max_id] = f ;
enable_kernel ;
return max_id ;
}
void unreg_task ( int * task_id )
{
int id ;
disable_kernel ;
id = *task_id ;
if ( id == 0 )
{
enable_kernel ;
return ; // 没有0这个任务,不用注销任务
}
funp[id] = funp[max_id] ;
freq[id] = freq[max_id] ;
max_id -- ;
*task_id = 0 ; // 这样在外面检测任务ID的时候,显示为0,表示这个任务不存在。
enable_kernel ;
}
void time_0_kernel() interrupt 1 //using 2 但是为什么我不能切换寄存器组呢????一旦去掉注释,输出结果马上不同
{
int id ;
ET0 = 0; // 禁用中断
if ( counter++ == 26400 ) counter = 1 ; // 最长定时器为一个小时
//定时器任务调度
id = max_id ;
while ( id )
{
if ( freq[id] > 0 )
if ( (counter%freq[id]) == 0 )
(funp[id])() ;
id -- ;
}
TH0=0x9e; //40HZ,25ms kernel freq
TL0=0x57;
ET0 = 1 ; // 开启定时器中断
}
[/code]
3, kernel.h :
[code:c]
#ifndef MY_KERNEL_H
#define MY_KERNEL_H
#include "REGX51.H"
#include "stdio.h"
#include "intrins.h"
#define disable_interrupt ( EA = 0 )
#define enable_interrupt ( EA = 1 )
#define disable_kernel (TR0 = 0 )
#define enable_kernel ( TR0 = 1 )
#define MAX_TASK 6
typedef void ( * TASK ) () ;
void kernel_init () ;
int reg_task ( TASK timer_task, int time ) ;
void unreg_task ( int * id ) ;
#endif
[/code]
上面是没有问题的代码可以在Keil uVison3 for 51 中仿真运行,结果如图:
src='http://music.blogcn.com/wp-content/uploads/154/15462/2008/08/right_result.jpg' alt='right_result.jpg' />
但是,如果我把 kernel.c中的那个注释去掉,即我切换寄存器组,马上就会出问题。输出的结果立即不同 :
src='http://music.blogcn.com/wp-content/uploads/154/15462/2008/08/wrong_result.jpg' alt='wrong_result.jpg' />
这甚至只是错误结果的一种,因为还有好几种输出情况,但都是错误的。
一开始我以为是我切换寄存器有问题,不能切换,但是我找半天也找不到不能切换的理由,而是找到要切换的理由:我可以省下8字节的堆栈空
间。怎么想都得不到答案,最后我拼了,把它反汇编之后从汇编指令一条条查看,最后发现错误的原因在这里:
src='http://music.blogcn.com/wp-content/uploads/154/15462/2008/08/keil_bug.JPG' alt='keil_bug.JPG' />
下面我来分析一下这几行汇编指令:
这一段代码的目的是把我传递过来的函数指针值存放在适当的地方,这样,适当
时候我可以从这个地方取出函数指针,并进行函数调用。
这里编译器设置把函数地址存放在2AH开始后的一个数组里,因为在keil C51里一
个函数指针占用三个字节,第一个字节存放的是指针类型,第二个和第三个字节
分别存放高位和地位的地址。所以,第一个函数的地址存放在2BH(高位)和2CH(低
位),第二个就存放在2EH和2FH了,依次类推。
第1行 : 把我传递过来的函数指针值的高位存到寄存器R2
第2行 : 把我传递过来的函数指针值的低位存到寄存器R1
第3行 : 3FH里存放的是函数指针值数组的偏移量,把偏移量赋值给A
第4行 : 把每个地址占用的长度赋值给B
第5行 : 做一个乘法,得到的结果就是A,其中就是我现在应该存放函数指针值
的地址的偏移量
第6行 : 把得到的偏移量加上数组的基址2AH得到最终应该存放的地址
第7行 : 把地址值给R0,即将用R0做寄存器寻址之用
第8行 : 把该指针的类型值(存放在13H)先存入
第9行 : 寄存器指针指向下一个字节
第10行: 把函数指针值的高位存入
第11行: 寄存器指针指向下一个字节
第12行: 把函数指针值的低位存入
如果只看我的注释的话是一点问题也没有的,如果你看代码就应该发现一点不对劲了,在第10行和第12行,分别把函数指针值的高位和地位存
入,而函数指针值的高位和地方在前面两行就暂存在了R2和R1中,所以这个时候应该用:
MOV @R0, R2和MOV @R0, R1才对吧?对,这是最保险的,但是图中编译器生成的代码如果使用的是寄存器第0组的话也是没有问题的,因为第0
组的R2和R1地址就是02H和01H,但是目前的问题是,我已经切换了寄存器组,所以应该用R2和R1才是对的。我不知道编译器这个时候在耍什么
小聪明,好好的R2和R1不用,用绝对地址来表示。
找到问题的原因后,通过直接修改汇编代码,程序又成功运行了。
这个时候是早上四点半,接着上网和jerome聊了会天,五点半了,细细刷刷,6点了,开电视看,七点二十,睡了……
八点四十又起来了,因为我一天多没去实验室,据说今天要调试,我就过去了,不一会儿,调试完毕,写篇日志,睡了……