More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  聆听卡农,享受生活!PhotosProfileFriendsMore Tools Explore the Spaces community

哈哈景

View spaceSend a message
Location:
It`s no use doing what you like,you have got to like what you do.
——Winston Churchill
Updated 12/18/2007
Updated 1/4/2008
感谢访问!

聆听卡农,享受生活!

带着聆听卡农的心情享受生活!
June 13

老弟的高考志愿

  今天下午6点是陕西08年高考交志愿的最后期限,从今年开始是网上填志愿了,老弟的志愿在中午12点终于提交了,最终还是如他所愿填了西电。提交后,老爸的情绪特别低落。至于情绪低落的主要原因,就算是草履虫类的单细胞动物都明白:依老弟平时全校第一的成绩,今年考成这样确实是冤枉,再以现在估的这个分数报我们学校也确实是冤枉。但是他愿意,甚至丢出一句“就算考650也要上西电”,老爸也没办法。
 
  吾弟现年18岁,很小的时候有一个伟大的理想:当科学家,(是不是每一个人小时候都想当科学家?我好像是个例外。)并且要在沙漠中拥有一个自己的实验室!(我一直想不通为什么必须是沙漠里)。自上初中起老弟开始对跟电有关的东西感兴趣,喜欢电路,物理,我们家一切罢工不干的电器都是由他最终使其重返岗位。除了我们家人,老弟最爱的是学校门口一个卖过期杂志的老大爷,只要那位老大爷一出现,老弟立马带上零花钱以亚光速冲到老大爷的小摊上,将没看过的几期《科学画报》统统淘回来。老爸的教育原则是“再富不能富孩子”,所以我们在高中以前基本上没有零花钱,因此老弟买《科学画报》的钱是以不吃早餐为代价攒出来的。上初中时他就已经把我高中的物理书基本消化了。大概是初三时参加一次县上举办的夏令营,去北京玩了两周,回来时给我们大家都买了礼物,什么乱七八糟的:撒尿小和尚、电子宠物、胸针、玉佛爷、毛主席头像……就跟去杂货铺晃了一圈回来似的。唯独给他自己买了两本书,一本叫什么时间扭曲和黑洞,另一本好像是电子世界什么的。并且,我们家退休的录音机,收音机都是老弟做小发明的材料。我读本科时,我们宿舍有坏的充电器、MP3之类的都是我放假带回家让老弟修的,因此我们宿舍人经常自嘲:“唉,我们电子科技大学的大学生还不如上初中的小弟弟!”
 
  老弟刚上小学时,尤其是刚上学前班,学习那不是一般的烂!第一次考试,数学考了18.5分,回来还乐得不行,老远就举着他那张全是红叉叉的破卷子冲姥姥喊自己得了18.5分呢。我印象最深的是一次他放学回来后嘀咕:“今天我们上自习课的时候老师把几个同学叫出去了,我以为是去挨打的,原来人家是去领奖。我本来也打算去领的,结果玩着玩着就给忘了……”大概从四年级起,老弟的成绩不像以前那么烂了,并且开始代表学校参加竞赛什么的了。初中后,也不是很拔尖的,但还过得去。上高中后,就开始进入学校前几名了,高三后就稳坐年级前三名,尤其是高三后几次模拟考试,都是全校第一。不谦虚的说,本来我们家最聪明的是我,但从老弟上高中后我就退位让贤了。因此我们家睡觉、上厕所都指望着他能在今年的高考中放个大卫星,高考前几天他状态也挺好,但没想到在高考场上还是给来了个发挥失常。上个差不多的学校应该还是没问题,但是之前计划的复旦微电子估计是没戏了,他又死都不愿意复习,最后被我稍微忽悠一番他就非西电不上了,嘿嘿。
 
  不过,塞翁失马,焉知非福,说不定老弟将来还是IT界的一颗巨星!我对他是有一肚子的confidence,希望老爸尽快解开心结,老弟也能顺利如愿,在自己喜欢的方面如鱼得水,尽情挥洒前程!
 
  老弟,加油!!!Bon courage!
June 10

ARM学习笔记(一)—— __main() 和 main()(转载)

    当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序,即呼叫主应用程序。最简单的一种情况是:
    IMPORT   main
    B            main
   
    直接从启动代码跳转到应用程序的主函数入口,当然主函数名字可以由用户随便定义。
    在ARM ADS环境中,还另外提供了一套系统级的呼叫机制。
    IMPORT   __main
    B            __main
 
    __main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()。所以说,前者是库函数,后者就是我们自己编写的main()主函数;
 
    因此我们用的B __main其实是执行库函数,然后该库函数再调用我们的main() 函数,因此在单步调试时会看到先要跑一段程序(其实是库函数),然后再单步到我们自己的main函数(这个同时也说明如果有B __main 则就对应必须有main函数,否则编译出错),如果我们用 B main来进入我们的主函数的话,那在单步调试时就看到直接进入到我们自己的main函数了,中间不会看到其他程序;

    那么用B __main和用B main 这两这进入我们的main函数方式有什么不同呢?
    如果采用前者则会由编译器加入一段"段拷贝"程序,即我们说的从加载域到执行域转化程序;而采用后者就没有这个了,因此如果要进行 "段拷贝"只能自己动手编写程序来实现了,完成段拷贝后就可以进入我们的主函数了,当然这个主函数不一定是叫做main(),可以起个其他好听的名字,这个有别与使用B __main方式;不管采用哪种方式进入我们的程序,都要有一段"段拷贝"程序,跑完了段拷贝后才能可以进入我们主程序了!(顺便提一下:startup.s这个文件并没有所谓的"段拷贝"功能,再看也无益!)
 
    对含有启动程序来说,"执行地址与加载地址相同"不容易实现:
    如果执行地址与加载地址相同哪当然不需要做"段拷贝",但是个人理解编译器还会加入"段拷贝"程序(如果用B __main的话),只是因为条件不满足而不执行而已;但是对含有启动程序来说,"执行地址与加载地址相同"就不容易了.因为启动程序是要烧到非易失存储器里,用来在上电执行的,而这个程序必定会有RW段,如果RW放在非易失存储器,如FLASH,那就不好实现RW功能了,因此要给RW移动到能够实现RW功能的存储器,如SRAM等.因此,对含有启动程序来说,"执行地址与加载地址相同"就不容易实现;程序的入口点在C 库中的__main 处,在该点,库代码执行以下操作:

1. 将非零(只读和读写)运行区域从其载入地址复制到运行地址。
2. 清零ZI 区域。
3. 跳转到__rt_entry。
 
June 03

云开了,见月明喽!……

    LPC2368的板子终于正常工作了!!!暂且缓口气。现在觉得ARM没有之前那么面目可憎了,想想从几周前开始接触ARM一直到现在,遇到的问题是千奇百怪,气得我都能吐血。

    总结下这阵子遇到的主要问题和解决方法:

    首先刚开始挂上2368的板子时,从串口开始调起。就只是一个很简单的发送接收小程序:在上位机上由串口助手发送字符串给2368目标板,然后2368将接收到的数据又由UART回发给上位机,在串口助手上显示。结果很变态,接收到的数据乱七八糟,反正就是跟发送的完全不一致。找了许久不知道是什么原因,最后经师兄指点终于发现是目标板上的晶振和启动文件里所声明的不一样,晶振我用的是11.0592MHZ,而文件里声明的是12M的,改过来后结果就正常了。当然这是属于低级错误,是本人脑子秀逗的问题。

    接下来我又发现,在线调试结果完全正确,但是程序竟然不能脱机运行。起初第一反应就是认为代码没烧到FLASH里去。但是明明H-JTAG软件上显示FLASH不为空。所以这个想法首先就被否定了。然后查了很长一段时间都是毫无头绪。最后在一个ARM的论坛里找到很多人都有这个问题,原因也有若干种,但其中最常见的一个原因还是说ISP使能引脚没有上拉电阻,看到这个后,我立马查了下板子,发现P2.10引脚确实没有上拉电阻,当时真是欣喜若狂,但上拉了一个10K的电阻后,依旧那副德行,脱机运行还是毫无反应。测了一下,ISP使能引脚本来就是高电平的,所以就排除了这个原因。我就像是被狠狠地浇了一盆凉水——从头到脚,凉透了!

    没办法,继续找原因,在好几个ARM论坛里开始慢慢找别人的问题和经验。那时我一直认定是硬件上的原因,成天拎着个万用表测来测去,屁都没测出来!

    然后我开始怀疑会不会是bootloader的问题,因为起初对bootloader的实质了解得不是很透彻。于是花了一段时间来搞明白bootloader,最终脑子里开始形成一个思路了。然后我就把ISP使能脚给接低,让程序进入ISP模式,结果如预料中一样,bootloader里的自动波特率程序运行正常,ISP正常。

    我就想:既然在线调试正确,那用户代码应该不会有问题吧,脱机不能运行,就是没进入用户代码。于是开始怀疑是bootloader转到用户代码的部分有问题。反正是自始至终都没觉得是用户代码的毛病。

    终于昨天开了个窍,想还是确定一下程序是否进入到了用户代码里,于是在启动文件的target.c里的InitTargetReset函数里加了一段LED显示的程序——如果程序没有进入到用户代码里,那上电后LED应该不会亮,但是事实却相反——重新上电复位后,LED竟然发光了!那就是说已经进入到了用户代码里,至少已经运行到了InitTargetReset里,于是我就把这段LED显示的程序向后移了一段,再上电后,发现LED不亮,所以说明没有执行到这一块儿,那就是说在中间某处可能陷入了死循环或者程序跑飞。而这一块刚好是2368的PLL设置程序。

    于是又花了些时间仔细看了PLL模块的工作原理和设置。终于发现原来是PLL的设置顺序的问题,LPC2368的这个启动文件模板是师兄从网上下的,可能写得不是很完善,导致PLL工作不正常,系统时钟当然就不正常,使得程序执行出现了不可预知的错误。所以说其实并不是程序不能脱机运行,而是运行过程中出现了错误!

    最后我就按照LPC2368的datasheet上的PLL设置顺序将这段程序重新写了一遍,就一切OK了!

    折腾了这么长时间的问题终于解决了,终于“守得云开见月明”了!哈哈,今晚可以睡个哈哈觉喽……
May 11

Tout est fou!

    这几天开始接触ARM了,起初我就觉着:虽说ARM比430功能是强大吧,但两者都是作为处理器存在于一个系统中的,无非就是所控制的系统规模和复杂程度有差异。就像小学校长和大学校长一样,一个管的是小学校,一个管的是大学校,但大家都是校长,应该是大同小异。所以就想ARM应该不会多难搞吧。但捣腾了两天后发现:这小学校长和大学校长还真是不一样——虽说是同样的身份,但首先,两者领导的队伍就有很大差异——无论是在质量上还是在数量上都是不可相提并论的。再其次,采取的管理方式和校规校纪也不尽相同。就像ARM和430,虽说都是一个CPU外挂了一批外设,但ARM的外设数量是远多于430的,并且功能也是比430强大得多。在编程方式、软件结构、在线调试等方面也都相差得不是一分二厘……
 
    这两天仅是调试这个串口就调得我焦头烂额的了。很简单的一个发送接收小程序,都运行不正常,结果相当变态。发送出去一个简单的ASCII字符,但串口助手上显示的结果根本就对不上。比如:发送的是字符a,显示的是繁体的“后”字,发送双引号,显示的是字符b。昨天晚上又在实验室折腾到十一点多,一会儿似乎发现了点规律,一会儿又似乎毫无规律可循,我是一会儿大喜,一会儿大悲,心情在马里亚纳海沟和珠穆朗玛蜂之间上上下下几百次。
 
    唉,2368疯了!UART疯了!RS232疯了!串口助手疯了!我也疯了!……Tout est fou!!!
 
    期待守得云开见月明的那一天!
April 10

祭任桂兴老师文

  昨天下午去上课时听沈小牛说任桂兴老师前两天因心脏病去世了。听到此消息,我先是震惊——看着还挺健康硬朗的一个人,怎么说去就去了?!而后便想起本科时任老师给我们带课的那些日子。
  现在我们经常会谈起以前的老师,都觉得本科时遇到的好老师中,任老师就算一个。在我的印象中,他总是穿一件灰灰的上衣,一条灰灰的裤子,一双顾不上擦而显得灰灰的旧皮鞋,总是骑一辆陈旧的自行车来学校,很是俭朴。他先是教我们被称之为“魔鬼电路”的《模拟电路基础》,后来又带了《电视机原理》、《高频电子电路》,最后我还选了一门他的《计算机图形学》。算起来,任老师是本科时带我课最多的老师了。当时他带我们模电的时候,因为初次接触此类知识,刚开始上课就跟听天书一样,完全云里雾里。久而久之,干脆就不听了,所以我的模电学得真是不咋的。最后曾经花了一个暑假,自己恶补了一通,还算有点效果,但总感觉没有跟着老师听那样来得深刻。当初因为不喜欢模电,所以“恨屋及乌”,上模电课时总挺烦任老师的,心想:“挺慈祥的一个老头,讲课怎么这么没意思。”现在回想起来,其实都是自己太懒的原因。后来,任老师又给我们讲《电视机原理》和《高频电子电路》,从那时候渐渐开始喜欢上他的课了。他是一个很尽职的老师,课后向他请教问题,总会很耐心地讲到你明白为止,从来不会烦。
  当时课快完时,听同学们说他带完我们这一级就要退休了。大四的时候我们宿舍还计划过说毕业前要去看看那些本科时遇到的好老师。但最后终因大家各有各的事,凑不到一块儿,考虑到也不容易联系老师,就没有再提了。没想到再次听到关于任老师的消息竟然让我如此措手不及。在林锐的《大学十年》里看到他描述自己的一位老师的这么一句话,觉得很好,就引用过来了——“师恩的厚薄不在于时间长短,好的老师会让人想念、感激一辈子。”任老师和我们相处的时间可能只有短短的两三个学期,但他在我们心里会永远存活下去!
  昔日的红烛终将化作青烟消散去,此时此刻,只想说声:“老师,一路走好!”
View more entries