2008年12月6日星期六
《C专家编程》里的一个有趣的故事
有一个很早的故事,讲的是一位物理系学生寻找新奇的方法用气压计测量一幢建筑物的高度。故事如下:
一位学生被判不及格,因为他拒绝使用班上老师所教的方法回答问题。当这名学生提出抗议时,学校指定Alexandar Calandrain作为仲裁人。Alex来到教授的办公室,阅读了考试题目:“怎样在气压计的帮助下测量一幢高楼的高度。”
这位学生是这样回答的:“把气压计带到楼顶,用一个长绳系住,把气压计放低,直到触及街面,然后再提起来,测量绳子的长度,绳子的长度就是建筑物的高度。”
高分的回答应该是充分运用物理学原理,但这个回答显然没有说明这一点。Alex提议给这个学生另外的一次机会回答这个问题。然后Alex跟这个学生说:“我给你六分钟时间让你重新回答这个问题,答案必须于物理学的知识有关。”结果这个学生只用了一分钟就交上了答案:“把气压计带到楼顶,倚再屋顶的边缘上,然后放开气压计,并用秒表开始计时。然后运用物体下坠公式S=1/2gt2计算建筑物的高度。”Alex好不犹豫的给这个学生满分。
这位学生继续说出了3中运用气压计测量建筑物的高度的方法:
在阳光灿烂的日子里,测量气压计的高度、气压计影子的高度以及建筑物影子的高度,然后运用简单的比例原理,计算出建筑物的高度。
带上气压计走上建筑物的楼梯,当爬楼梯时,用气压计的高度在墙上做标记,到达楼顶后,数一下做的标记的数量,就可以得到以气压计高度为单位的建筑物的高度。
最后一种方法(也许最不可行)是把气压计送给建筑物的管理员,让他告诉你建筑物的高度。
这个问题在SUN公司被讨论,涌现出如下好方法:
气压法:分别测量楼顶和楼底的气压,然后根据气压差计算大楼的高度。这个方法是这个问题最初设计时的标准答案,也是测量大楼高度最不精确的方法之一。
钟摆法:来到建筑物的顶部,用绳子系住气压计,把它放低到地面。然后晃动气压计,测量钟摆的摆动时间,根据摆动时间可以计算出钟摆的长度,也就是建筑物的高度。
贪婪法:把气压计当掉,换取一点种子基金。然后用连锁信方法(或者称之为神秘链方法)积累上一大笔钱。把这笔钱堆的跟大楼一样高,然后根据每张纸币的厚度和纸币的张数计算大楼的高度。这个方法并没有提及如何在pol.ice闻讯赶来之前完成对大楼的测量。
黑手party法:用气压计作为武器,威逼大楼的管理员说出大楼的高度。
弹道法:在地面用一架迫击炮把气压计送入半空,让它正好达到楼顶的高度。你可能需要进行几次距离修正发射以获得刚好能够把气压计送到大楼高度的发射方法。运用标准弹道计算表,你可以计算出这次弹道发射的高度,也就是大楼的高度。
########重点##############
镇纸法:把气压计作为镇纸压在建筑物的设计图纸上,然后从图纸上找出建筑物的高度。
音速法:从大楼的顶部把气压计扔下来,让其做自由落体,测量气压计撞击地面和你听到撞击声的时间差。在实际可行的距离内,视觉传递的时间可忽略不计,而声音的传递速度(在标准温度和气压条件下是340m/s)是已知的,根据上面这些数据可以计算出大楼的高度。
反射法:把气压计的玻璃面作为镜子,测量镜面反射亮光从楼顶到地面的来回时间,由于光速是一个已知量,所以大楼的高度也可以据此测出。
商业法:卖掉气压计用这笔钱买一些适当的仪器测量大楼的高度。
类比法:用一根绳子系住气压计,把绳子绕在一个小型的发电机的轴上。然后把气压计从大楼顶上扔下来,绳子就会使发电机转动。测量气压计从楼顶掉到地面期间发电机所发的电。发电机产生的电能是和轴旋转的圈数是成正比的,根据这些数据可以算出楼顶到地面的高度。
三角法:在地面上选一点,它和大楼的距离是已知的。带上气压计和一个量角器来到大楼的顶部,等待太阳达到水平线。然后把气压计当作镜子,把一束日光引到先前所设定的地点,用量角器测量气压计的角度,然后用三角学原理计算大楼高度。
比例法:测量气压计高度。叫一个朋友,并带上一把卷尺。趴在大楼外已知距离的一点,气压计放在你和大楼之间。调整气压计的位置,从你看上去气压计的上端正好和楼顶相平。
然后叫你的朋友测量你的眼睛距离气压计的距离,最后根据比例原理计算出大楼高度。
照相法:从大楼外已知距离的地点支起三脚架,架上照相机。然后把气压计放在与照相机距离已知的地方,拍下照片。根据照片中间气压计和大楼的相对高度,你可以计算出大楼的实际高度。
重力法I:用长绳系住气压计,从大楼上挂下来直到地面。测量钟摆的摆动周期,根据重力加速度的差别计算大楼高度。
重力法II:在大楼的顶部和底部分别用弹簧秤测量气压计重量(不能用天平秤),两个重量应该有所差别,这是由于重力加速度的差异引起的(一位读者告诉我Lacoste Romberg重力计能够提供准确结果所需要的精度)你可以根据这两个读数之差计算出大楼高度。
卡路里法:把气压计从楼顶扔下来,掉到地面一个装有水的容器。容器的开口应当尽量小,尽可能防止水溅出。水温的升高是气压计的机械能转化为热能的结果,根据水温的升高的度数可以计算出气压计到达地面的势能,进一步可以计算大楼高度。
2008年11月28日星期五
写Python脚本释放C盘空间
[code:python]
def inter(dirname):
os.chdir(dirname)
pwd = os.getcwd()
for file in os.listdir(pwd):
nowfile = os.path.join(pwd, file)
if os.path.isdir(nowfile):
if file == 'debug':
os.chdir(nowfile)
os.system("move *.exe C:\\debug")
os.chdir('../')
print nowfile
else:
inter(nowfile)
if __name__ == '__main__':
import sys,os
if not os.path.isdir('C:\\debug'):
os.mkdir('C:\\debug')
inter('C:\\Qt\\4.4.3\\examples')
[/code]
然后到C盘下debug文件夹下查看,好家伙,500MB,被我全部删除,C盘空间就不紧张啦!
2008年11月15日星期六
数字电路笔试题
1、 什么是同步逻辑和异步逻辑?
整个设计中只有一个全局时钟称为同步逻辑。同步电路是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有操作都是在严格的时钟控制下完成的。这些时序电路共享同一个时钟CLK,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的。
不同子系统使用多个时钟信号的逻辑设计称为异步逻辑。
2、 什么是竞争与冒险现象?怎样判断?如何消除?
信号在数字电路器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存在"冒险"。
解决方法:一是添加布尔式的消去项,二是用D触发器,格雷码计数器,同步电路等优秀的设计方案可以消除。
3、什么是亚稳态?如何解决亚稳态?
亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
解决方法:
1) 降低系统时钟
2) 用反应更快的FF
3) 引入同步机制,防止亚稳态传播
4) 改善时钟质量,用边沿变化快速的时钟信号,关键是器件使用比较好的工艺和时钟周期的裕量要大。
4、常用逻辑电平有哪些?TTL与COMS电平可以直接互连吗?
TTL,COMS,不能直连
LVDS:LVDS(Low Voltage Differential Signal)即低电压差分信号,LVDS接口又称RS644总线接口,是20世纪90年代才出现的一种数据传输和接口技术。
ECL:(EmitterCoupled Logic)即射极耦合逻辑,是带有射随输出结构的典型输入输出接口电路。
CML:CML电平是所有高速数据接口中最简单的一种。其输入和输出是匹配好的,减少了外围器件,适合于更高频段工作。
5、数字电路设计中,静态时序模拟和动态时序模拟各有什么优缺点?
静态时序分析是采用穷尽分析方法来提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误。它不需要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少,不仅可以对芯片设计进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计,因此静态时序分析已经越来越多地被用到数字集成电路设计的验证中。
动态时序模拟就是通常的仿真,因为不可能产生完备的测试向量,覆盖门级网表中的每一条路径。因此在动态时序分析中,无法暴露一些路径上可能存在的时序问题;
6、多时域设计中,如何处理信号跨时域?
不同的时钟域之间信号通信时需要进行同步处理,这样可以防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响,其中对于单个控制信号可以用两级同步器,如电平、边沿检测和脉冲,对多位信号可以用FIFO,双口RAM,握手信号等。
跨时域的信号要经过同步器同步,防止亚稳态传播。例如:时钟域1中的一个信号,要送到时钟域2,那么在这个信号送到时钟域2之前,要先经过时钟域2的同步器同步后,才能进入时钟域2。这个同步器就是两级D触发器,其时钟为时钟域2的时钟。这样做是怕时钟域1中的这个信号,可能不满足时钟域2中触发器的建立保持时间,而产生亚稳态,因为它们之间没有必然关系,是异步的。这样做只能防止亚稳态传播,但不能保证采进来的数据的正确性。所以通常只同步很少位数的信号。比如控制信号,或地址。当同步的是地址时,一般该地址应采用格雷码,因为格雷码每次只变一位,相当于每次只有一个同步器在起作用,这样可以降低出错概率,象异步FIFO的设计中,比较读写地址的大小时,就是用这种方法。 如果两个时钟域之间传送大量的数据,可以用异步FIFO来解决问题。
7、IC设计中同步复位与异步复位有什么区别?
同步复位在时钟沿采复位信号,完成复位动作。异步复位不管时钟,只要复位信号满足条件,就完成复位动作。异步复位对复位信号要求比较高,不能有毛刺,如果其与时钟关系不确定,也可能出现亚稳态。
8、latch与register有什么区别?
latch是电平触发,register是边沿触发,register在同一时钟边沿触发下动作,符合同步电路的设计思想,而latch则属于异步电路设计,往往会导致时序分析困难,不适当的应用latch则会大量浪费芯片资源。
9、BLOCKING和NONBLOCKING赋值有什么区别?
非阻塞赋值:块内的赋值语句同时赋值,一般用在时序电路描述中
阻塞赋值:完成该赋值语句后才能做下一句的操作,一般用在组合逻辑描述中
10、Moore与Mealy状态机各有什么特征?
Moore状态机的输出仅与当前状态值有关,且只在时钟边沿到来时才会有状态变化;Mealy状态机的输出不仅与当前状态值有关,而且与当前输入值有关,这一特点使其控制和输出更加灵活,但同时也增加了设计复杂程度。
11、 什么是“线与”逻辑,要实现它,在硬件特性上有什么具体要求?
将几个OC门结构与非门输出并联,当每个OC门输出为高电平时,总输出才为高,这种连接方式称为线与。
12、 如何用D触发器实现2倍分频的逻辑电路?
把D触发器的输出端加非门接到D端即可实现2倍分频的逻辑电路。
13、一个四级的Mux,其中第二级信号为关键信号如何改善timing?
关键:将第二级信号放到最后输出一级输出,同时注意修改片选信号,保证其优先级未被修改。
14、为什么一个标准的倒相器中P管的宽长比要比N管的宽长比大?
和载流子有关,P管是空穴导电,N管电子导电,电子的迁移率大于空穴,同样的电场下,N管的电流大于P管,因此要增大P管的宽长比,使之对称,这样才能使得两者上升时间下降时间相等、高低电平的噪声容限一样、充电放电的时间相等。
15、 什么是Setup和Holdup时间?
建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。
16、如果已知reg的setup,hold时间,组合逻辑的delay需要在什么范围内?
Delay
17、时钟周期为T,触发器D1的寄存器到输出时间最大为T1max,最小为T1min。组合逻辑电路最大延迟为T2max,最小为T2min。问,触发器D2的建立时间T3和保持时间应满足什么条件?
T3setup>T+T2max,T3hold>T1min+T2min
2008年11月12日星期三
三方协议、报到证、干部身份
关于三方协议:
什么叫三方协议?网上答案都有,随便查查就知道了。但再深一些说呢,肯定有人不知道了。
三方协议,简单的讲就是学校、学生本人、工作单位三方就毕业生离校后就业工作落实所签署的一份协议书,很多人知道的是:三方协议过去必须签,但现在不一定,三方签了只是学校统计就业率的一个参考指标。三方和派遣证挂钩,但我没有留京户口,单位签三方就要解决你的户口,所以现在单位都不签三方了,尤其是私企等等。没错,上边说的都对,所以有些朋友们就把三方协议放弃了,而只是找到工作,自己去做个打工者,然后只考虑劳动合同。
那么究竟三方协议背后究竟还有什么呢?其实三方的背后还隐藏着很多。
如果说到三方协议,那么必需提到的就是派遣证与干部身份。
三方协议作为国家统计大学生就业率的一个根据,同时也是国家派遣证发放的一个证明。只有你签署了三方协议,拿回学校,学校才会在你毕业后将派遣证发给你,而你拿着派遣证到你工作的单位报道,就此开始计算工龄,而你也就拥有了干部身份(每年基本6月25日毕业,所以6月18日前必需将三方交到学校)。
派遣证(报到证):
派遣证一式两份,一份是派遣证,另一部分是报到证。派遣证在你毕业后将放入你的档案,由国家直接打到你的单位(档案属国家机密,不允许个人持有。如果你的用人单位拥有档案保存资格那么你的档案就放在单位,如果没有,那单位会掏钱将你的档案放在人才市场类的档案保存处。你过你没工作,那你的档案就直接打回原籍)。而报到证则交由你手自行保管。在这里必须要重点说的是,很多人在毕业后没多久就把报到证丢了,而当若干年后单位希望将你提干要求出示报到证时,很多就没有了,而只能再跑回某地去重新开证明,这时的证明可就没那么好开了,所以还是劝君保管好。
干部身份:
在中国社会体系中,公民分三中身份:农民、工人、干部。农民归农业部管理,工人归劳动局管理,而干部归人事局管理。大学生属于国家培养的专业人才,属于国家干部身份。很多农村来的朋友家里都希望孩子通过念大学而改变祖辈农民的身份(这里没有贬低农民朋友的意思),而很多人却从毕业后就莫名其妙的丢了自己的干部身份。当然也有很多是根本不在乎自己的干部身份。认为有就有,没有就没有,没有的话我至少是四年大学毕业学士学位。其实你错了。如果你没有留住你的干部身份,可以说你的大学就是白念,而你只是个有学士学位的工人,根本没有改变你自己(就很多农村朋友来讲)。
干部身份靠什么来?靠三方协议,靠派遣证。派遣证就是你大学生干部身份的证明,假如某天你被提干时,这个就是你可以被提干的证明,因为你是干部身份。否则你就不能被提,因为你是工人。
也许很多人说:我不会被提干,那我要干部身份干嘛,我就想挣钱。
那么我现在要说的就是职称评定了。其中也涉及到关键一年的具体事宜。
大学生持报到证到单位上岗后,必须要经过一年的见习期(国家规定。相当于中专、大专的实习期)。见习期满后,本人必须记得要签“毕业生见习期考核鉴定表”,这是你转正的鉴定表(从此你就拿正常工资了),说明你已经是一个合格的人才了(见习期需要在同一单位完成,也就是你的三方、派遣证以及你的转正证明表,这三个上面盖的要是同一单位的章,否则视为无效)。紧接着要记得填写“国家统一分配大中专院校毕业生 专业技术职务任职资格认定表”,也就是初级职称评定表(这些事要你自己留心,没有人会提醒你去做的,表要到人事部网站下载)。具体可评定的职称可以到人事部网站上查询(职称最好和自己学的专业有联系,否则到中高级评定时比较难)。现在我国职称评定这块要通过考试(除艺术、工艺美术、体育教练员及广播电视播音4个系列外,申报其他初级系列都需要通过考试才能获得初级专业技术资格。考试采用闭卷笔答方式,实行统一大纲、统一命题、统一组织。申报人员参加北京市初级专业技术资格考试成绩合格,即可取得《北京市专业技术资格证书》),以考试来决定你是否能评上职称。当然有些职称评定也不排除某些单位内部的人为原因。在你初级职称评完四年后,也就是你工作的第五年,你可以申请评定中级职称。再五年后,也就是工作第十年,评定高级职称(具体可上网查)。这样你一辈子的职称就基本评定完了,所以有些幸运的人10年就可以当上“高级工程师”。在我国,无论各行各业都会有职称评定,而且相信任何单位都希望有那些有职称的人来工作,而且,就算你工作的单位没有职称评定一说,那想你如果是高级工程师,你拿的钱也绝对比别人多。而什么人能评定职称呢?有干部身份的人。所以从此看出,就算你不当官,你只挣钱,那干部身份对你来说还是有用的。
说到这里,基本上一般的情况都讲完了。但有些人会问了,我不是本地生,我户口不能留这,没公司给我签三方,你说的都是屁话。呵呵,那你就错了。为什么不变通的想想呢?例如:你在北京上学,但毕业后没有公司解决你的户口,怎么办?好办!在家里找公司签三方。因为你不能留京,所以你的户口会打回原籍,而档案与户口不能脱离,所以你的档案也要打回原籍,而如果你想保住干部身份(但想在北京工作),那你就托人也好,请客也好在家找个单位把你的三方签了。然后其他和上边一样,只是一年后记得回家去办转正与职称评定。如果嫌麻烦,没关系,你就回家就业,别担心回不来北京,因为如果你有职称,那么你就可以以后来京找工作,而你也会属于人才流动,这时只要你提出单位也会适当解决你的户口问题,否则凭你打工者的身份要求单位解决你户口,梦吧你!
三方协议的签署是没有限制的,与任何公司或单位签都可以,不一定要国企或事业单位,否则每年那么多大学生就业,还不80%都要丢了干部身份,国家还不成白痴了。但要保证一点,就算是三个人的小公司也能签,但不要在一年内倒闭,否则你就没有人给你签转正了,切记切记。
又有人说了,我想考研,我明年要考,我就不签三方了,随便找个活干干,挣点钱完了。那你就大错特错了。
记住,不论任何时候,别放弃你的身份!
如果你要考研,那么你属于在职考研一类,我们分类说一下。
假如你考上了:
你6月大学毕业,7月到单位报到。第二年7月,你转正,初级职称评定。研究生9月入学。当你研究生入学时,哥们已经是有身份的人了,3年研究生读完,哥们出来直接拿正常工资了(进私企),没有见习期一说了(研究生毕业也有3个月的见习期)。如果你进国企或事业单位,那么研究生3年算工龄(我不知道私企是不是,但国企或事业单位绝对是),你出来就可以评中级职称了,哥们又赚了一大笔。所以你说你该不该保你的干部身份?
假如你没考上:
没考上更简单,直接继续工作,回头等着评中级,没差什么。
很多人总是怕麻烦,其实一切就是这么简单(我打的不简单),如果你做了,那么也许我的话会改变你的一生,如果你没做,那么就当给我捧场,也谢谢你,我们又少了一个竞争对手。不过要记住一句话,别因小失大,谨记!
2008年10月31日星期五
Busybox移植
我使用的是Busybox 1.7.0
编译器使用的是arm-linux-gcc 3.4.1。
编译Busybox有很多选项,但是以下的几步是必须要做的,剩下的选项自己看着进行勾选。
首先修改Makefile在175行和176行,本来是
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
修改成
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
然后执行make menuconfig 进入Busybox Settings,然后进入Installation Options,然后勾选
[*] Don't use /usr
然后在Linux Module Utilities配置项中,因为我使用linux2.6内核,所以我取消
[*] Support version 2.2.x to 2.4.x Linux kernels选项,让这个选项变成这样
[ ] Support version 2.2.x to 2.4.x Linux kernels
在Miscellaneous Utilities配置项中,取消[*] taskset 的选中状态,让它变成这样
[ ] taskset
因为我使用glibc库,如果想编译成静态的,那么需要在Busybox Settings选项中的Build Options子选项中选择使用静态链接,然后
把applet目录下applet.c文件中如下的一堆注释掉就可以开始编译了
#if ENABLE_STATIC && defined(__GLIBC__) && !defined(__UCLIBC__)
#warning Static linking against glibc produces buggy executables
#warning (glibc does not cope well with ld --gc-sections).
#warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
#warning Note that glibc is unsuitable for static linking anyway.
#warning If you still want to do it, remove -Wl,--gc-sections
#warning from top-level Makefile and remove this warning.
#error Aborting compilation.
#endif
然后进行其他的配置,保存配置后,执行make和make install两条命令就可以在_install目录下得到需要的东西了。
2008年10月30日星期四
miniGUI编译小记
首先是安装qvfb了,因为我用的ubuntu,所以,简单,sudo apt-get install qt3-dev-tools-embedded 就好了,接下来要编译miniGUI。
参考网络文章:http://blog.iyi.cn/hily/archives/2006/09/miniguii386.html,下载了那几个包,这篇文章写的也玄乎,这里会出错哪里会出错的。果不如其然,make一下一堆的错误,奇奇怪怪,其中一个是 keyboard.h:43: error: 说是缺少')'还是什么的,晕,改了半天都没用,后来去网上找半天,找到这一篇:http://www.lyore.cn/blog/read-205.html,不过我觉得他的解决办法是不是也很麻烦,我直接把那些个ushort定义了 typedef unsigned short ushort; 就好了。还有一个错误是说什么重复定义还是什么的,开始我用gcc 4.2进行编译的时候我的解决办法是把那个.c文件中的那个结构体定义删除了,不过后来我还是换用gcc 3.4进行编译,这个错误变成一个警告了。后来编译例子的时候,又出错,“libmingui.so: unreference to function 'pthread_kill_other_threads_np'”错误,这还是minigui代码线程库使用问题,解决办法是在minigui解压路径下,使用"grep -r pthread_kill_other_threads_np *"查找所有包含该函数的调用,然后注释掉。最后重新编译即可。
编译这东西真是累啊,也不知道那个作者是怎么编译成功的……
其实原因就是因为编译器的原因了,gcc的开发人员不知道怎么回事,总得搞个向后兼容才对呀-_-!
(本来这篇文章应该7月16号贴上来的,因为那天的网络原因,所以把文章保存与一文本文档中,今天被我不小心翻出来所以就贴上来了)
2008年10月27日星期一
2008年10月16日星期四
接到HR的电话了
我很高兴,想一下就让全世界知道。我马上打电话给了爸爸妈妈,还有亲戚,让他们一起来分享这份喜悦。
我觉得我找到工作又和周围的人不一样,我早就规划好我毕业后是工作的了。而有些人是想考研,有些人无所谓,他们可能等到毕业那天再说。但是我不一样,我很急切,我想早点工作,我想早点锻炼,我想早点拿工资,呵呵
先写到这里吧,吃饭了回来,继续想想有什么要写的。:)
2008年10月4日星期六
如何移动VMware虚拟机
Preparing a Workstation 5 Virtual Machine for a Move
1. Shut down the guest operating system and power off the virtual machine. If the virtual machine is suspended, resume it, then shut down the guest operating system.
2. Do one of the following:
Otherwise, you need to have a way of moving the virtual disk (.vmdk) files from the virtual machine's directory to the new host. You could move them to a shared network directory, for example, or burn them to CD-ROMs if they are not too large.
Once you know how you are going to move the virtual machine, go to Moving a Workstation 5 Virtual Machine to a New Host.
If you stored any files in directories other than the virtual machine directory, be sure to move them into a directory of the same name and same position relative to the location of the virtual machine.
Start VMware Workstation and open the new virtual machine you just created. Choose File > Open, then browse to the virtual machine's configuration (.vmx) file.
还有移动后网卡不能用的问题,参考这个
如果把vmware安装后的所有文件(vmx等)拷贝到另外一台主机,那么使用同样的vmware station可以继续使用已经安装的系统而不必重新安装。但是有一点要注意,就是网卡的问题。当拷贝后第一次启动,vmware会提示此系统是否是copy过来的,如果是那么就会为虚拟系统的网卡重新分配一个mac地址,可以通过查看vmx文件知道mac的详细地址。
在debian linux虚拟系统中网卡的mac地址在 /etc/udev/rules.d/z25_persistent-net.rules中,只要把eth0或者对应需要的网卡标识对应到新的MAC地址就可以。同时需要修改/etc/network/interfaces中的IP地址,不然在同一个局域网中会产生IP冲突。修改完毕后重新启动就可以了。
应该有办法不重新启动,但是还没有找解决方案,可能通过/proc可以避免重启吧。
My ECG Device (9)
我用QQ远程协助连接上我同学的电脑,然后在里面打开我的虚拟机,然后在里面添加了一句话,从新编译,接着把那个编译生成的文件通过邮箱发到我这边来。
上面的过程说起来简单,我其实是吐血了一个下午!首先速度很慢,我打一个字,20秒后才有反应,我真佩服我的耐心了……然后还有我要设置NFS什么的,因为是在别人的电脑上,一切都得设置,超级郁闷啊。然后是我有一点疏忽了,我直接在里面编程是没用的,因为我的源代码是GB2312编码的,而linux采用的UTF-8编码,第一次发送回来的文件我放入开发板运行,直接是一堆乱码,搞得我没郁闷死,要知道这样搞一次回来花我多少精力啊……没办法,我只有从我这边再编程一次然后把源代码发送回去,没想到这次发送回来的编译结果又吐血:一点反应都没有!后来查清楚是因为我发送了一个错误版本的源代码过去,幸好用gedit编辑的文件会产生一个后面加~符号的备份文件,于是我在我同学那边把那个备份文件发送回来,编辑后发送回去再编译,然后再发送回来,这次终于成功了。
昨天下午我快没累死:(
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元成交。其他没什么好说的了。
2008年9月21日星期日
My ECG Device (5)
第一天效率还算过得去,结果第二天我就回来睡觉了。第二天白天过后,我还是感觉到如果这样下去是来不及的,于是我晚上没有回去睡觉,在实验室一直做到早上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)
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学长有没有数码相机,我拍些照片以后留念一下,特别使我们睡觉的环境,没想到他说如果我拍了数码相机就要被砸了,呵呵。那个睡觉的地方还真不像是正规学生住的地方,比民工住的地方还差啊……
待续待续……
My ECG Device (2)
My ECG Device (1)
明天去厦门,预计在厦门软件园呆一个月左右。(错了,是今天,现在已经凌晨半点了)
其实我也没这么专啦,一个月时间如果天天做这个,那我就会成仙~~
一个月前到厦门软件园的时候,我就想写篇日志,但是懒啊,懒没办法,拖了一天又一天,想最后来写个总结,这不,写总结来了。 从到厦门软园的第一天开始讲起吧。(真正的流水账啊)
一个月前今天:现在正在准备呢,心里一定在想:我去哪里之后努力学习,我就会知道嵌入式开发究竟是怎么回事了。下午,一点开始,基本上就收拾一下衣服,生活用品之类的,装箱子里,三点收拾完毕,跟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拷到开发板上去就可以用了
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
原来原因就是:不能在windows里写程序拿到linux里去编译 -_-!
2008年8月3日星期日
发现Keil uVision 3 for C51 bug一只
原因是我一整晚都在调试一个单片机程序,本来一个非常简单的程序,但是却一直有问题,整晚都抓狂的很,不过最终问题的答案找到了,是
编译器的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点了,开电视看,七点二十,睡了……
八点四十又起来了,因为我一天多没去实验室,据说今天要调试,我就过去了,不一会儿,调试完毕,写篇日志,睡了……
2008年7月14日星期一
ubuntu8.04使用virtualbox_1.5.6的若干问题
原来我用kubuntu7.10的时候,用virtualbox很除了USB的问题,其他还好,并且速度也非常快,尤其是磁盘操作,让我非常的佩服linux的磁盘管理,但是现在用ubuntu8.04一上来我就碰到一个这样的:我创建虚拟磁盘的时候一个2GB的磁盘居然花费近半分钟来创建,要知道之前那个几乎是不花费时间的!
然后是发现按下右Ctrl键不能从客户机从切换出来,郁闷至极,后来乱按到Print键才得以脱身!还发现不能在客户机中使用键盘,摆渡google几下之后,发现有好几个办法,但是我不想装新输入法……而且那个简单的方法又对我没用,我又不想去掉复制字符输入……
最后在这里找到这样的一段话,呵呵
http://www.douban.com/group/topic/3074741/
scim冲突而已
写个脚本,在virtualbox启动前屏蔽掉scim即可
自己写的一个StartVBox.sh:
export XMODIFIERS=""
export GTK_IM_MODULE=""
export QT_IM_MODULE=""
virtualbox
保存,chmod +x StartVBox.sh,以后运行这个sh即可
也可以在桌面建立一个到这个sh的图标
问题终于得到解决!
PS:USB的问题,还没解决……
2008年7月8日星期二
让opera 9.5支持迅雷
今天考完了,无聊,把这个网上搜一下,发现大家都有这个问题(说明不是我的RP问题),网上的解决办法是用o-get还是什么修改的,好像是要装插件。
我不想装插件。于是我自己写了一个,用起来的感觉不错!使用方法:在你的opera 9.5的右键菜单有“使用迅雷下载”这个项目后(但是点了没反应),你把我提供的压缩包中的两个文件解压覆盖到迅雷安装目录的Components\ExplorerHelper子目录,比如我迅雷安装在E:\Soft\Thunder,那么我就把两个文件覆盖到E:\Soft\Thunder\Components\ExplorerHelper。
好了,用opera选择“使用迅雷下载”吧!
修正文件下载:FixOperaThunder.zip
2008年7月6日星期日
一天十份实验报告 -_-!
真的是冇语……
2008年6月29日星期日
网络安装ubuntu8.04
没办法,把我的两个linux(redflag 6和kubuntu7.10)都格式化了,接下来就为选择哪个发行版烦恼了一阵子,之前就有下载了OpenSUSE 11,但是去网上搜索了很久,愣是不知道怎么进行硬盘安装,说只有DVD版的可以……然后我又考虑了redflag 6 但是想想自己这么菜鸟,以后要装个软件依赖性搞个半天我还不疯狂,于是边把重心转移到debian上来了(因为ubuntu或者kubuntu都用过好多次了,想换换口味),因为对debian不是很有信心,也就不想去下载整个光盘,于是下载了一个网络安装的文件,但是启动之后愣是识别不出我的网卡,晕。
现在思维完全转到网络安装上了,不自觉的我就去下了ubuntu的网络安装文件,没想到一路安装下去,直到完成,那么就这样吧。
中间有一段时间下载软件包的时候提示"please wait...",良久都没有反应我还以为出问题了差点想重启算了,这个时候我神出鬼没的按下了Ctrl+Alt+F2玩了玩shell,没什么好玩的,于是又按到Ctrl+Alt+F4发现有文字在滚动!原来它还在下载软件包!看到这里我才放心了,耐心的等它装完,一等就是3个小时-_-!
安装完成,发现比以前版本的ubuntu漂亮多了:)
准备考完这两科然后就在上面制作一个ARM编译的交叉环境,暑假好好学学嵌入式开发。嘿嘿
2008年6月26日星期四
纪念我用了一年的WINDOWS XP
我对这个系统的得意之处在于它的安全性实在是太高了,看我的装备:
- EQsecure V3.41 ( V4.0 容易引起莫名死机,电脑速度变的超级慢,弃之不用)
- Sandboxie 3.26 , 这个软件是最常用的安全软件,当需要以身试毒或者去冒险的时候就派它上吧。
- PowerShadow V2.8 ,我倒是想用2008版的,但是2008是收费的搞的我很不爽,于是我开始用下面的那个:
- Shadow Defender V1.1 ,当Sandboxie不能满足要求时,就派这个上吧
- Avast V4.7 home edition 这是我从买电脑一直用到现在的杀毒软件,优点嘛,免费,占用资源相对较少,技术也是世界一流的,我几乎都不主动去扫描硬盘,因为平常开着防护病毒想进来可就是非常难的了
- Feng Yun Personal Firewall ,这是一款国产的防火墙,个人愚见认为这是世界上最好的防火墙,它极低极低的资源占有率和各种特色功能使得我成为它坚定的粉丝。
以上几款软件就是我保证电脑长期安全工作,每天都有好的工作环境的秘密武器了。
这个系统上装了太多的东西,以至于我认为重装 就像是一个装满个人身份信息和证明的钱包丢了一样难办,因为要恢复到现在的工作环境,需要太多的努力了……
看看我的各种各样的软件:
上面还只是三分之一而已,好像很大一部分都没有快捷方式在上面 ,喔喔,重装后真不知道要干到何年何月才能搞得像现在一样的方便。
最后发几张桌面的截图纪念一下:
2008年6月10日星期二
确定我的研究方向
我的完美计划:
暑假和学长参加嵌入式开发大赛,借机学习Linux驱动,这样,暑假过后,我写简历的时候就吹:精通linux驱动开发,呵呵。
加油,祝我成功!:)
2008年5月28日星期三
Our IM win the first prize
I use much time at it, this project lasted a month. although it seems very simply ( it really very simply ), but in fact it is very hard when i write it, because most of the problem is unexpected , in chinese, we can say "It is easy to say but hard to do", You know it's true !
today afternoon, my partner tell me the final test will coming soon, we will show our program to referees, he say our competition order is No.1 so we can win the frist prize. facts have proved that !
he told me remember today : may 27th, 2008 ( i write this blog on early in the morning, so it is date of yesterday )
happy !
PS: IM is Instant Message ( like QQ, ICQ, MSN )
2008年5月26日星期一
5月计划
现在分析原因是因为我对人的礼貌问题,现在相来,如果当晚的宣讲会我没去的话不定现在我就被录取了…… 实在是想不到下一秒会发生什么,what will happen in next second ?
闲话不多说了,这里计划一下接下来一段时间要做的事情:
1, Pass CET-4
2, Review analog and digital circuit, High-Frenquency Electronic Circuit
3, Study data structure, eC, python, VHDL
4, Pass NERC Network Engineer or Database Engineer
5, Use 30 minutes study French everyday
ok,我想也够多了。
……
省略数千字关于找工作的感想
2008年3月28日星期五
linux device drivers study
但是这一次不一样,我居然看懂了这本书都在讲什么,这个学习过程就是这么的折磨人。我想这些知识从整体来讲仿佛是一个平面,所以知识没有积累到一定的量,还就是看不懂,我大学期间目前为止所学到的每一个知识都是这么艰难的过程,尤其是大一的时候学习php。没人教,太困难了。
《linux 设备驱动程序》这本书我现在看到190页,到目前为止作者是以一个scull的驱动程序为主线,教我们怎么编写驱动,不过看到现在我今天才做第一个实验:编写hello,world的驱动程序(其实就是抄书啦):
[code:c]
#include "linux/init.h"
#include "linux/module.h"
MODULE_LICENSE("GPL");
static int __init eth_init(void)
{
printk(KERN_ALERT"hello, world\n");
return 0;
}
static void __exit eth_exit(void)
{
printk(KERN_ALERT"Goodbye, cruel world\n");
}
module_init(eth_init);
module_exit(eth_exit);
[/code]
另存为hello.c ,然后是要编写Makefile,看书上讲的,弄半天结果还是没出来,Google几下,然后知道几个要点是,内核源码树要先make menuconfig 然后 make 编译一会儿,其实我老早就有编译过,只不过是clean掉了,没想到编译驱动也需要这个。具体的Makefile如下:
[code]
PWD = $(shell pwd)
#please change next variable
# to the path of kernel source of yourself
KERNEL_SRC =/home/jia/kernel/linux-source-2.6.22/
obj-m := hello.o
module-objs := hello.o
all:
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules
clean:
rm *.ko
rm *.o
[/code]
编译成功之后会生成hello.ko文件,用超级用户权限加载到内核:sudo insmod ./hello.ko ,卸载用命令 sudo rumod hello ,如果要查看printk 的输出,可以使用 dmesg 命令,可以看到刚才的输出。
:P 我对这个东西非常的感兴趣,我会继续深入学习的,hoho
2008年3月21日星期五
ipluss language engine V1.0
# Copyright © ipluss 2008 All Rights Reserved
library download : ipluss_language_engine.rar
1.what is ipluss_language_engine ?
这是我写的一个语言引擎,当你要写的程序需要可以显示多国语言的话,使用这个引擎,你可以非常非常简单的完成这个语言显示部分,省去你的code时间。
2.why use this engine ?
高效率,小的代码量,及其简单的API接口,这都是我建议你使用这个语言引擎的原因。
3.how to make a foreign language support ?
只序言编写你想支持的语言的配置文件(相当的简单,只要你懂那门外语),然后放在你想要放的地方。在配置文件中,以 # 开头的是注释行,然后一行代表一条句子,逗号之前的是你对这一行的说明,我建议把它写成第几行(有效行,除去注释、空白行)就非常好,从0开始。注意文件的最后要有一个空白行就像你写程序一样。
3.how to program use it ?
你只需要下载本文附上的库文件。然后在你需要使用本引擎的程序中加入
#include "ipluss_language_engine.h"
在你需要显示语言之前,对引擎进行初始化,把函数的调用结果赋给 char ** lang 用完之后对它进行关闭。
这里是一个范例:
[code:c]
char ** lang ;
int line = 0 ;
//这里我用 argv[1] 代表我存放的语言文件
//这样我可以在程序启动的第一个参数提供语言文件的名称
//比如说 main.exe english.ini
lang = load_lang ( argv[1] );
printf("\n\n%s\n\n", lang[0]);
while ( lang[line] != NULL )
{
printf (lang[line]) ; // lang[line] 就代表你语言文件中的第line行(
有效行,除去注释、空白行)的文字
printf ("\n") ;
line++ ;
}
free_lang ( lang );
[/code]
我还提供一个可以打印所以语言条目的函数 new_print_file ( lang );然后在编译的时候加上链接ipluss_language_engine.a 的选项,我用gcc是这样的:
gcc main.c ipluss_language_engine.a -o main.exe
如果你使用IDE,请在链接选项里面加上这个库。
4.It is realy free library !
ps:一个完整的程序示例
[code:c]
#include "stdio.h"
#include "stdlib.h"
#include "ipluss_language_engine.h"
int main(int argc, char** argv) {
char ** lang ;
lang = load_lang ( argv[1] );
printf("\n\n%s\n\n", lang[0]);
free_lang ( lang );
return (0);
}
[/code]
2008年2月15日星期五
我获得的第一个外包项目
又是一个 C语言的项目,说实话,我以后真的真的不想写 C 代码了,但是现实好像比较残酷,因为嵌入式 linux 编程好像非用 C 不可,无奈我太差,不然我要能够把 eC 移植到嵌入式领域的话,我就发财了…… ^_^
项目名称: library system
项目完成时间:2008 . 1 . 31 夜
功能:通过一个链表管理储存在文件中的图书信息
提供可执行代码文件下载 :library_final.rar
这不是一个开源项目,但是如果你已经获得了源代码,在未经我允许的情况下,请不要发布在互联网上或者用于商业用途,具体点讲,用途仅仅局限于你们这个小组交作业,仅此而已。
2008年1月9日星期三
如何成为一个起早者(二)
(译者:因为上一篇文章反响很大,因此作者决定再写一篇文章来讲一下更细节方面的东西)
首先,在“当你困的时候才去睡觉”这个问题上,要想做到这一点,需要你能够意识到什么时候你瞌睡了。(不知道翻译的对不对
如果你在睡觉前做一些很刺激的活动,你就会(译者加:因为太兴奋而)睡地更晚,并且在睡觉前感觉不到瞌睡。大学期间我经常通宵与宿舍的同学打扑克,天亮之后我们常常会出去吃早餐。如果我要做工作、和朋友一起出去玩或者做其他很刺激的活动,我就可以容易地比平时晚些睡觉。
但是这不是我指的“你要意识到什么时候你瞌睡了”。我在这个测试中提到过“如果你不能够专心地连续读完一本书的一两页(说明你要准备去睡觉了)”。但是这并不意味着你要等到你快要精疲力尽的时候才去睡觉。
我所指的“想睡的征兆”是指当你的头脑开始释放激素,促使你瞌睡。这和感觉到累是不同的,事实上,你只是感觉到昏昏欲睡。但是为了使你的头脑释放激 素,你需要创造一定的条件来使得它发生。这意味着你要让自己在睡之前把节奏放慢下来,我发现阅读是最棒的一个途径让你在睡之前放慢节奏。有些人说在床上看 书是个不好的习惯.......可是我从来对在床上看书没有任何问题,因为当我太瞌睡而不能阅读下去的时候,我就可以把书放下,然后马上入睡。不过如果你 喜欢的话,你也可以坐在椅子上看书。
另外一个测试你可以使用的是,问问你自己,“如果我现在去睡觉的话,我能多快入睡?”如果你认为你将需要超过15分钟的时间入睡的话,我会告诉你继续做你手中的事情,等会在去睡觉。
一旦你设定了一个固定的时间醒来,可能会需要你通过几次实践来确定你正确的睡觉时间范围。刚开始的时候你可能会看到变动比较大,一天晚上睡的太晚,另一天晚上睡的太早。但是最终你会找到一个感觉,你能够感觉到什么时候你去睡觉会马上睡着,并且第二天你仍然精力充沛。
为了防止你睡的过晚,给自己划定一个最晚睡觉时间,即使这时候你完全不瞌睡,无论如何你也要在那个时间上床睡觉。我知道我每天晚上至少需要6.5个 小时的睡眠时间,但是如果遇到了紧急情况,那么我可以只睡5个小时,第二天还很好,前提是我并不是每天晚上都这么做。现在我的睡眠时间最长为7.5小时。 在我开始每天早上准时醒之前,我经常每天晚上睡8到9个小时,如果有时候真的累的话,甚至睡10个小时。
如果你白天喝咖啡的话,好像这可能会打乱你的睡眠周期。因为起初的那篇文章假设你不依靠药物保持清醒,如果你喝咖啡有瘾的话,那么请先戒除你的咖啡瘾。如果你的大脑依靠化学物质的话,那么不要指望你的睡意会在合适的时间到来。
先前那篇文章的目的在于说明如何养成早起的好习惯。因此提的建议是直接关于如何养成这个习惯的。一旦这个习惯养成了,它就可以下意识的起作用。你可 以做刺激的活动,比如说工作或者玩电动游戏,你将会知道什么时候你需要去睡觉了,即使它和以往晚上睡觉的时间不同。我说讲过的睡意测试对于养成这个习惯非 常重要,不过在养成习惯之后,精确的信号(这里指的应该是你自己能够感觉到睡意的到来)会取代它起作用。
如果真的需要的话你可以不时的睡地晚一些。如果我一直到凌晨3点才睡觉,我就不打算在第二天早上5点起床,但是我会在第二天恢复到原来的起床时间。
我推荐你坚持每天在同一时间起床一个月,以此来养成早起的习惯。但是在这之后,你就会因为条件反射每天都在那个时间醒来,而你将很难再次入睡。我决 定在周六早上起的晚一些,所以我没有设置闹钟,但是我自动地在4点58准时醒来。然后我试图再次入睡,但是我已经清醒了,我完全无法再次入睡。哦,好吧。 一旦这个习惯被养成,那么想要准时起床就一点都不难了。这就像你知道什么时候你瞌睡了你就会去睡觉一样。
如果你有小孩的话,你必须尽量去适应它。我的两个孩子,一个5岁,另外一个只有1岁。有事他们把我从半夜吵醒——我的女儿有个习惯,她喜欢在睡床里 “摇晃着”告诉我妻子和我关于她做的梦,或者有时仅仅想和我们聊天。我知道你的婴儿隔几个小时就醒的状况,因此如果你是这种情况的话,我给你的建议是当你 能睡的时候就睡。想让婴儿遵守“日程安排”是不大可能的
如果你不能在你的闹钟响后起床的话,这好像要归咎于你缺乏自制力。如果你有足够的自制力的话,无论如何你都可以马上从被窝里跳起来的。起初的动机会有效, 但是动机可能只会持续几天。规律就好像肌肉一样,你越是经常训练它,你就越能依靠它。每个人都有它自己的一些规律(你可以控制你的呼吸么?),但是并不是 每个人都有意地去发展它。有很多方法可以养成规律——你可以看下整个六篇关于如何建立规律的系列文章。基本上它可以归结为克服一些小的挑战,战胜了它们,并逐渐地发展成为习惯,这就好像是举重练习一样。当你的自制力逐渐变强,像在某个特定的时间起床这样的挑战将最终变得那么简单。但是如果你的自制力衰退的话,那么它就好像是一个几乎不可逾越的障碍一样。
为什么要早起?
我要说主要的原因的是你可以有更多的时间来做比睡觉更有趣(译者:我认为是“更有意义”
再提一次,我已经从每周节省出10到15个小时来做这些事情了。这些额外的时间效率是非常明显的。到上午6点半之前,我已经做完了锻炼,冲了个澡, 吃了早饭,我已经在我的办公桌前准备去工作。我可以每天挤出不少时间来做一些富有成效的工作,并且我通常在下午5点之前完成了一天的工作(那包括私人的 “工作” 比如说发邮件,支付帐单,去幼儿园接我的女儿,等等)。这给了我每晚5到6个小时的自由时间来关心家人、参加休闲活动、主持节目、阅读、写日记等等。而最 重要的是,我在这段时间中依然精力充沛。抽出时间来做那些所有对我重要的事情会使我感到非常平衡,放松和乐观。
想一想你可以利用空闲的时间来做些什么。即使每天多余出30分钟也足够你每天进行身体锻炼,读书,维护一个博客,冥想,煮健康的饭菜,学习一门乐器 等等。积小成多,即使每天一段很短的时间经过一年的积累也将会变得巨大,每天多余出30分钟一年就是182.5个小时。这可比一个月的工作时间还要长(按 每星期工作40个小时)。如果你能每天节省60分钟的话,一年你能节省的时间就会翻倍,如果你能每天节省90分钟的话,那么它就会变成三倍。对我来说,我 每天大概能够节省90分钟的时间。那就是说我每工作十年,就相当于其他人工作十一年。我可以用那一年的时间来精力充沛地做以前我没有时间做的事情,这是多 么美妙!
原文:
Last Monday’s post How to Become an Early Riser obviously struck a chord with many people. That post has generated more links than I can count, sending more new traffic to this site than any other post or article I’ve written. And the traffic logs indicate that the surge was decentralized (not attributable to a mention in any one major source).
You can get an idea of what that post did for StevePavlina.com’s traffic at Alexa (note the big spike at the end of May 2005). Alexa isn’t very accurate, but it’s good enough for noting general trends.
Last Monday I did a Google search on “how to become an early riser” (in quotes). It returned zero results. Now look at how many results it returns.
OK, so this was an instalanche. But why? Getting up early is a relatively benign topic, isn’t it? At least I thought it was at the time I posted it.
Since this appears to be a topic of interest, even though I don’t fully understand why, I figured I’d do a follow up post to add some more detail.
First, on the subject of going to bed when you’re sleepy… to do this correctly requires a mixture of awareness and common sense.
If you’re doing stimulating activities before bed, you’ll be able to stay up later and stave off sleepiness for a while. In college I used to participate in poker games that went until dawn, and then we’d often go out to breakfast afterwards. I can easily stay up later than my normal range of bed times if I work, go out with friends, or do other stimulating activities.
But this isn’t what I meant by noticing when you’re sleepy. I mentioned the test of not being able to read more than a couple pages of text without losing concentration. This doesn’t mean waiting until you’re about to drop from exhaustion.
The onset of sleepiness I’m referring to is when your brain starts releasing hormones to knock you out. This is different from just being tired. You actually feel yourself getting drowsy. But in order for this to happen, you need to create the right conditions for it to occur. This means giving yourself some downtime before bedtime. I find that reading is a great way to wind down before bed. Some people say reading in bed is a bad idea… that you should only sleep in bed. I’ve never had a problem with it though, since when I’m too sleepy to keep reading, I can just put the book down and go to sleep. But read in a chair if you prefer.
Another test you can use is this. Ask yourself, “If I were to go to bed now, how quickly could I fall asleep?” If you think it would take more than 15 minutes to fall asleep, I say go ahead and stay up.
Once you set a fixed awakening time, it may take a bit of practice to hone in on the right range of bedtimes for you. In the beginning you may see some huge oscillations, staying awake too late one night and going to bed too early another night. But eventually you’ll get a feel for when you can go to bed and fall asleep right away while allowing yourself to wake up refreshed the next day.
As a failsafe to keep yourself from staying up too late, give yourself a bedtime deadline, and even if you aren’t totally sleepy, go to bed by that time no matter what. I have a good idea of the minimum amount of sleep I need. 6.5 hours per night is sustainable for me, but I can do 5 hours in a pinch and be OK as long as I don’t do it every night. The maximum I ever sleep is 7.5 hours. Before I started waking up at a fixed time each morning, I’d often sleep 8-9 hours, sometimes even 10 hours if I was really tired.
If you consume caffeine during the day, it’s likely to mess with your sleep cycles. So the original post assumes you aren’t drugging yourself to stay awake. If you’re addicted to caffeine, then break the addiction first. Don’t expect natural sleepiness to occur at the right time if you’re screwing with your brain chemistry.
The idea of the original post was to explain how to develop the habit of arising early. So the advice is geared towards creating the habit. Once the habit is established, it runs more subconsciously. You can be doing stimulating activities like work or playing video games, and you’ll just know when it’s time for you to go to bed, even though it may be a different time each night. The sleepiness test is important for developing the habit, but subtler signals will take over afterwards.
You can always sleep in late now and then if you need to. If I stay up until 3am, I’m not going to get up at 5am the next morning. But I’ll return to my usual routine the next day.
I recommend getting up at the same time for 30 days straight to lock in the habit, but after that you’ll be so conditioned to waking up at the same time that it will be hard to sleep in. I decided to sleep in late one Saturday morning and didn’t set my alarm, but I woke up automatically at 4:58 am. Then I tried to sleep in, but I was wide awake and couldn’t fall back asleep again. Oh well. Once the habit is established, it isn’t hard at all to get up, assuming you’re going to bed at the onset of sleepiness.
If you have kids, adapt as needed. My kids are ages 5 and 1. Sometimes they wake me up in the middle of the night — my daughter is in the habit of doing this lately, popping into the bedroom to tell my wife and me about her dreams or sometimes just to chat. And I know what it’s like when there’s a baby waking up every few hours. So if you’re in that situation, I say that the rule is to sleep when you can. Babies aren’t very good at sticking to schedules.
If you can’t get yourself out of bed when your alarm goes off, this is likely due to a lack of self-discipline. If you have enough self-discipline, you’ll get out of bed no matter what. Motivation can also help, but motivation is short lived and may only last a few days. Discipline is like a muscle. The more you build it, the more you can rely on it. Everyone has some discipline (can you hold your breath?), but not everyone develops it. There are a lot of ways to build discipline – you can read the whole six-part series on self-discipline to learn how. Basically it comes down to taking on little challenges, conquering them, and gradually progressing to bigger ones. It’s like progressive weight training. As your self-discipline gets stronger, a challenge like getting out of bed at a certain time will eventually become trivially easy. But if your self-discipline has atrophied, it can seem an almost insurmountable hurdle.
Why get up early?
I’d say the main reason is that you’ll have a lot more time to do things that are more interesting than sleeping.
Again, I’ve gained about 10-15 hours per week doing this. That extra time is very noticeable. By 6:30am, I’ve already exercised, showered, had breakfast, and I’m at my desk ready to go to work. I can put in a lot of hours each day of productive work, and I’m usually done with work by 5:00 pm (and that includes personal “work” like email, paying bills, picking up my daughter from preschool, etc). This gives me 5-6 hours of discretionary time every evening for family, leisure activities, Toastmasters, reading, journaling, etc. And best of all, I still have energy during this time. Having time for everything that’s important to me makes me feel very balanced, relaxed, and optimistic.
Think about what you could do with that extra time. Even an extra 30 minutes per day is enough to exercise daily, read a book or two each month, maintain a blog, meditate daily, cook healthy food, learn a musical instrument, etc. A small amount of extra time each day adds up to significant amounts over the course of a year. 30 minutes a day is 182.5 hours in a year. That’s more than a month of working full-time (40 hours per week). Double it if you save 60 minutes a day, and triple it if you save 90 minutes a day. For me the savings was about 90 minutes/day. That’s like getting a free bonus year every decade. I’m using this time to do things that I previously didn’t have the time and energy to do. It’s wonderful.
原文出处:
How to Become an Early Riser - Part II
译文出处:
http://angelived.org/2007/05/22/how-to-become-an-early-riser-part-ii/
如何成为一个起早者(一)
在天亮之前起床是个好习惯,这将有助于你的健康,财富和智慧。——亚里斯多德
早起三光,晚起三慌。——中国谚语
早起的习惯是天生的还是后天养成的呢?在我身上,它显然是在后天养成的。在我20岁之前,我很少在午夜前睡觉,几乎总是睡的很晚,通常我会一直睡到每天的傍晚才起床。
但是后来的一段时间我不能继续忽视成功与早起之间的紧密联系了,尤其是在我身上看到了这一点。在我那些少有的早起的日子里,我意识到我的生产效率不 光是早上,而是整整一天都非常高。并且这样做我感觉非常好,我决定养成早起的好习惯,于是立即将闹钟调到了凌晨5点.........
........第二天早上,我在快到中午时才起床。
Hmmm.........
我又进行了多次的尝试,基本上每一次都是在那个时间段醒来。我开始怀疑我的身上是不是没有携带早起的基因。每当我的闹钟响的时候,我的第一反应总是 想将它关掉然后回去继续睡觉。这个习惯我又保持了几年,但是最终我偶然发现了几篇关于睡眠的调查研究,它们让我意识到我在这个问题上一直是错误的。只要我 能把这些调查研究得到的方法应用到我自己身上,我就可以养成一个持久的早起习惯。
使用错误的策略很难使你养成早起的习惯,但是使用这些正确的策略,却相对容易的多。
最通常的错误策略是:你认为,如果你想要早起的话,你最好早点去睡觉。因此你会计算一下你现在一般每天要睡几个小时,然后计算出需要在新的基础上往 回移动几个小时。比如说现在你从午夜(夜晚12点)睡到早上8点,你预测如果你在晚上10点睡的话,那么第二天你就可以在凌晨6点起床。听起来似乎很有道 理,但是这通常会失效。
目前关于睡眠模式有两个主要的流派。其中一个学派认为你应该每天都按时睡觉,并按时起床。就好像在这两个时刻都有个闹钟一样——你试图在每天晚上的同一时刻入睡。这看起来好像适应于现代社会的节奏,我们需要有一个准确的日程安排表,并且要保证每天有足够的休息。
另外一个学派认为你应该根据身体的需要,累的时候就去休息,睡到自然醒就要起床。这种方法植根于生物学说,我们的身体知道我们需要多少睡眠,因此我们应该听从它们的命令。
通过试验,我发现对我来说两个都不是最佳的睡眠模式。如果你重视你的生产效率的话,它们都是错误的,以下是我这样说的原因:
如果你的睡眠时间固定,那么有时候你可能不是很困就要去睡觉。如果你需要花费超过5分钟的时间才能够入睡的话,这说明你并不是很困。你醒着躺在床上 浪费时间,却不能入睡。另外一个问题是你认为你每天都需要同样长的睡眠时间,这是一个错误的假设。你的睡眠时间应该根据每天不同的情况而有所不同。(译 者:我觉得还会有这样一个问题,比如说你假设你每天都需要睡够8个小时,可是你有时候早上会提前醒,但是这时候你告诉你自己:“我还没有睡够,在睡一会 吧。”可是事实上,你几乎难以再次入睡,你只是在床上磨时间,把你认为你需要的睡眠时间磨完了才会起床
如果你根据身体的需要去睡眠,很有可能你的睡眠时间会超过你实际需要的睡眠时间——大多数情况下会超出很多,比如说每周会超出10-15个小时(这 相当于整整醒着的一天)。许多以这种方式休息的人每晚上休息的时间都超过了8个小时,这通常是过多的。而且,如果你每天早上在不同的时间起床,那么你每天 起床的时间就难以预测。因为有时候我们的生活会失去节奏(译者:比如说大学生的周末,一般都是3点之后才睡觉,而平时基本上都是12点睡觉,这样就会打乱 生活的节奏),你可能会发现你的睡眠时间变得飘忽不定。
最佳得解决方案是把二者结合起来。方法非常简单,很多起早的人都在自觉不自觉中使用这个方法,虽然如此,它对我来说还是一个心理上的巨大突破。解决 的方案是当我感到瞌睡的时候就去睡觉(只有当我感到瞌睡的时候),然后在每天的固定时间(每周七天)设置闹钟,响了就立刻起床。因此我总是在每天的同一个 时刻(我定的是早上5点)起床,但是我上床睡觉的时间每天晚上都有所不同。
当我实在困了的时候我才会上床睡觉。我测试睡意的方法是:如果我不能够连续不间断地读完一本书的一两页,我就要准备去睡觉了。大多数情况是当我上床 后,我会在三分钟之内睡着。我舒舒服服地躺下,然后立即就睡着了。有时候我会在晚上9点半就上床睡觉了,有时候我又会一直到午夜12点才睡觉,通常的情况 是我在晚上10点到11点之间上床。如果我一直不想睡,我会一直忙到我不能睁开眼睛才去睡觉。在这段时间内,读书是一个很好的选择,因为当我困得实在不能 在读下去的时候,这一般是显而易见的,我就会马上去睡觉。
每天早上当我的闹钟响的时候,我会把它关掉,伸一个长长的懒腰,然后坐起来。我这时候什么都不想,因为我知道,我赖在床上的时间越长,我接着再睡的可能性就越大。因此一旦闹钟响了,我就不允许我去想再睡一会的好处。即使我很想再睡一会,我通常也会立刻起床。
在坚持这个模式一段日子后,我发现我的睡眠规律逐渐变得有节奏了。如果前一天晚上我的睡眠时间不够充分,第二天晚上我自然而然地就会提前睡觉以补充 足够的睡眠。而如果我的精力非常旺盛,一点都感觉不到累,我就会睡的少一些。我的身体学会了什么时候将我叫醒,因为它知道我通常会在每天的那个时刻起床。
这样做的一个很好的效果是,我平均每天晚上睡觉的时间减少了90分钟,但是我却感觉更轻松,我想这主要是因为我在床上的时间基本上都在睡眠中。
我得知这样一个情况,那些失眠的人都是那些明明不瞌睡却要上床睡觉的人。如果你不瞌睡,而且你发现自己无法立即入睡,那么立即起来,让你的头脑保持 清醒一段时间。一直等到你的体内开始分泌激素,你的意识开始变得模糊,你再去睡觉。如果你能够在你瞌睡的时候去睡觉,在一个固定的时间起床,那么你的失眠 症将会不治自愈。第一天晚上你可能要待到很晚,但是你会在上床之后立刻入睡。你可能会因为整晚只睡几个小时而在第二天起的太早时(相对太早)感到很累,但 是经过一天的忙碌之后,你就会想在第二天晚上早一点上床睡觉。经过一段时间后,你就能养成每天晚上大概都在某一个时间上床,并且迅速入睡的习惯。
因此如果你想成为一个起早者(或者只是想更多的控制你的睡眠模式),那么就试试这样做吧:只有当你太瞌睡而不能继续坚持下去时才去睡觉,每天早上都在同一个固定的时间起床。
附上原文:
It is well to be up before daybreak, for such habits contribute to health, wealth, and wisdom.
- Aristotle
Are morning people born or made? In my case it was definitely made. In my early 20s, I rarely went to bed before midnight, and I’d almost always sleep in late. I usually didn’t start hitting my stride each day until late afternoon.
But after a while I couldn’t ignore the high correlation between success and rising early, even in my own life. On those rare occasions where I did get up early, I noticed that my productivity was almost always higher, not just in the morning but all throughout the day. And I also noticed a significant feeling of well-being. So being the proactive goal-achiever I was, I set out to become a habitual early riser. I promptly set my alarm clock for 5AM…
… and the next morning, I got up just before noon.
Hmmm…
I tried again many more times, each time not getting very far with it. I figured I must have been born without the early riser gene. Whenever my alarm went off, my first thought was always to stop that blasted noise and go back to sleep. I tabled this habit for a number of years, but eventually I came across some sleep research that showed me that I was going about this problem the wrong way. Once I applied those ideas, I was able to become an early riser consistently.
It’s hard to become an early riser using the wrong strategy. But with the right strategy, it’s relatively easy.
The most common wrong strategy is this: You assume that if you’re going to get up earlier, you’d better go to bed earlier. So you figure out how much sleep you’re getting now, and then just shift everything back a few hours. If you now sleep from midnight to 8am, you figure you’ll go to bed at 10pm and get up at 6am instead. Sounds very reasonable, but it will usually fail.
It seems there are two main schools of thought about sleep patterns. One is that you should go to bed and get up at the same times every day. It’s like having an alarm clock on both ends — you try to sleep the same hours each night. This seems practical for living in modern society. We need predictability in our schedules. And we need to ensure adequate rest.
The second school says you should listen to your body’s needs and go to bed when you’re tired and get up when you naturally wake up. This approach is rooted in biology. Our bodies should know how much rest we need, so we should listen to them.
Through trial and error, I found out for myself that both of these schools are suboptimal sleep patterns. Both of them are wrong if you care about productivity. Here’s why:
If you sleep set hours, you’ll sometimes go to bed when you aren’t sleepy enough. If it’s taking you more than five minutes to fall asleep each night, you aren’t sleepy enough. You’re wasting time lying in bed awake and not being asleep. Another problem is that you’re assuming you need the same number of hours of sleep every night, which is a false assumption. Your sleep needs vary from day to day.
If you sleep based on what your body tells you, you’ll probably be sleeping more than you need — in many cases a lot more, like 10-15 hours more per week (the equivalent of a full waking day). A lot of people who sleep this way get 8+ hours of sleep per night, which is usually too much. Also, your mornings may be less predictable if you’re getting up at different times. And because our natural rhythms are sometimes out of tune with the 24-hour clock, you may find that your sleep times begin to drift.
The optimal solution for me has been to combine both approaches. It’s very simple, and many early risers do this without even thinking about it, but it was a mental breakthrough for me nonetheless. The solution was to go to bed when I’m sleepy (and only when I’m sleepy) and get up with an alarm clock at a fixed time (7 days per week). So I always get up at the same time (in my case 5am), but I go to bed at different times every night.
I go to bed when I’m too sleepy to stay up. My sleepiness test is that if I couldn’t read a book for more than a page or two without drifting off, I’m ready for bed. Most of the time when I go to bed, I’m asleep within three minutes. I lie down, get comfortable, and immediately I’m drifting off. Sometimes I go to bed at 9:30pm; other times I stay up until midnight. Most of the time I go to bed between 10-11pm. If I’m not sleepy, I stay up until I can’t keep my eyes open any longer. Reading is an excellent activity to do during this time, since it becomes obvious when I’m too sleepy to read.
When my alarm goes off every morning, I turn it off, stretch for a couple seconds, and sit up. I don’t think about it. I’ve learned that the longer it takes me to get up, the more likely I am to try to sleep in. So I don’t allow myself to have conversations in my head about the benefits of sleeping in once the alarm goes off. Even if I want to sleep in, I always get up right away.
After a few days of using this approach, I found that my sleep patterns settled into a natural rhythm. If I got too little sleep one night, I’d automatically be sleepier earlier and get more sleep the next night. And if I had lots of energy and wasn’t tired, I’d sleep less. My body learned when to knock me out because it knew I would always get up at the same time and that my wake-up time wasn’t negotiable.
A side effect was that on average, I slept about 90 minutes less per night, but I actually felt more well-rested. I was sleeping almost the entire time I was in bed.
I read that most insomniacs are people who go to bed when they aren’t sleepy. If you aren’t sleepy and find yourself unable to fall asleep quickly, get up and stay awake for a while. Resist sleep until your body begins to release the hormones that rob you of consciousness. If you simply go to bed when you’re sleepy and then get up at a fixed time, you’ll cure your insomnia. The first night you’ll stay up late, but you’ll fall asleep right away. You may be tired that first day from getting up too early and getting only a few hours of sleep the whole night, but you’ll slog through the day and will want to go to bed earlier that second night. After a few days, you’ll settle into a pattern of going to bed at roughly the same time and falling asleep right away.
So if you want to become an early riser (or just exert more control over your sleep patterns), then try this: Go to bed only when you’re too sleepy to stay up, and get up at a fixed time every morning.
原文出处:
How to Become an Early Riser
译文出处:
http://angelived.org/2007/05/22/how-to-become-an-early-riser/
2008年1月2日星期三
2008年1月1日
我想了许久想用一些华丽的词汇和优美的句子来形容我的感想。想半天图图改改最终还是不成句子。其实简单一点说就是:我很想在今年实现的一个目标是:赚到我 人生的第一桶金,既然说是第一桶金,那么赚到一桶银当然不算了,这个目标不仅仅是形式上要第一桶金,我也不愿意在质量上打折。
虽然我从小学一年级读书到现在,一直是全班最小的小朋友,不过到现在,再怎么说小,我也确实长大了,因为我19岁的生日已经过了,按照妈妈的说法,现在已经20岁了。确实应该为自己的人生好计划一下了。
自从进入大三以来,大家或多或少都有讨论一些考研或者就业的事情。我的性格带有一些叛逆的成分,一直以来我都对学校没有好感,原来读初中时想了几个礼拜的 以后我长大了如何回来踏平那个学校。高中也一样。虽然我对现在的学校不是那么恨之入骨,但是也算是看透了读书到底怎么回事。上面说的当然是我自身的原因。 外部的原因对我影响非常大的也有几件事情,其中触动非常大的第一件事是我看电视 宝莲灯,说实话,这部电视剧超级的没逻辑,但是吸引我看下去呢,当然也是有原因,因为我非常喜欢看片中的女主角小玉,后来我到网上查了一下,知道她的扮演 着是舒畅,顺带我还去看了一下她的新浪博客,看了一下她的资料简介,其中,她初中时每次数学考试都考第一名,高考也是以高分考取北京第二外国语学院对我感 触非常大,然后在她的新浪博客里看到大家对她的评语,我知道这个世界实在是太疯狂了,为什么人家的生活这么的不一样和精彩呢。就因为这个,还使我萌生了考 研证明自己的想法。打消我考研主意的事情也很有趣,那就是我静下心来想想,真的,读研究生就能使自己变强吗?我自己回答了不是,读大学也两年多了,自己就 想想学到了什么?到目前为止,对工作最有用的是模拟电子技术和单片机原理、EDA技术,可以观察班上学习成绩好的又学的怎么样?(我是学习成绩不好),据 我的观察就我们学知识的深度,用人单位愿意给我们一千块钱一个月的工资还有什么好说的?我还联想到大家找工作时拿的简历,就学校学了那会儿C语言,最多只 会用来冒泡排个序,就在简历上写了个精通C语言,有些自认为精通C语言的人唯一用过的IDE还就是turbo C 2.0, 中国的教育太成问题了!还有一件事情就是,我发现我们这个学期的EDA老师,所谓的电子科技大学的研究生毕业文凭,来教我们EDA,主要教的是VHDL, 上了两个礼拜的课之后,我就完全明白了,那些研究生自称的精通EDA设计其实跟我所看到的那些自称精通C语言的人,其实是一样的,他们学会的仅仅是皮毛, 我心里想,如果我不自己刻苦专研VHDL的设计,那么我以后的水平跟他们没什么两样。还有一个我们的老师是微电子老师,我都怀疑她整天跟我们讲的微电子理 论在中国有几家公司有这样的技术?我就不指望这位老师正真理解微电子技术了,更别太真的去芯片公司设计芯片了,这位也是电子科技大学的研究生毕业。
我知道我对读研究生彻底的没有了心情,如果我想逃避就业,如果我想逃避未来挑战,那么我可以去读研究生,可是关键的问题还有就是现在读研究生一年消费也是上万啊,我不愿意再让家里掏这个钱了,现实的压力也逼的我只有勇敢面对迎面而来的挑战。
我不愿意就这样一身碌碌无为,我不愿意平平淡淡,不愿意过很多人向往的平定安闲舒适的小生活,我一直坚信的一点就是我就是为了一个伟大的我而生的。
前两周,学校里面有招聘会,我也到里面参观了一下,非常的有感触。我有一个目标就是我工作的第一年赚到10万。我知道这个目标很难,如果我不创新性的走出 一条自己的道路,我看确实是没戏,看过这么的事情,我非常庆幸的是,我从大一开始就知道大学应该读什么,才会有出息,但是苦于一直没有一个人来指导我,以 至于我的学习进展如此的慢,还有一点就是我自己的学习效率也是非常的低。我知道后一个原因也是最主要的原因。
今天是2008年的第一天,我知道今年对我来说是一个不一样的一年,明年的今天,我应该有点成绩才对,给自己一个不平凡的职场开局,我知道我的时间不多 了,真正给我学习的时间只有半年了,暑假就要开始去找实习了我想,本来我想定一个计划,但是根据我对自己快20年的了解,我知道,务实的还是抓紧时间才是 上策,其实我的计划一直很周全的。
今天早上7点多一点就起床了,然后吃了久违的早餐。因为这个我昨天晚上策划了很久呢。因为这是“十万火急”计划的一部分。
最好的祝福给我的2008,给自己创造精彩。