<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dutor &#187; 尚未分类</title>
	<atom:link href="http://www.dutor.net/index.php/category/others/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dutor.net</link>
	<description>熟读而精思，循序而渐进，厚积而薄发。</description>
	<lastBuildDate>Tue, 17 Jan 2012 14:44:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MBTI性格测试</title>
		<link>http://www.dutor.net/index.php/2011/12/mbti/</link>
		<comments>http://www.dutor.net/index.php/2011/12/mbti/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 13:57:22 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[心理学]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2696</guid>
		<description><![CDATA[<ul>

	<li><strong>外向（E）与内向（I）</strong>  外向的人乐于与人交往并参加社会活动。内向的人则不是，他们具有领地意识，需要私人的精神和环境空间。内向的人从独立的活动中获取力量，厌倦社会活动。百分之七十五的人偏向于外向型，剩下百分之二十五的人则希望单独呆着。</li>

	<li><strong>感觉（S）与直觉（N）</strong>  你如何获取信息？在所有人格特质中，这条轴线可能最容易产生误传和误解。感觉型的人强调可行性和事实，完全基于当时的细节。直觉型的人非常富有想象力，喜欢比喻，创新力强，能够看到多种可能性——生活总是在下一个拐角等着我们。直觉型可能还没有等到完成手头上的事情就跳到一项新任务上去了。感觉型的人认为这种做法浮躁，直觉型的认为感觉型迂腐。百分之七十五的人属于感觉型的。</li>

	<li><strong>思考（T）与情感（F）</strong>  你如何做决定？思考型的人基于规则。情感型的人除了考虑适当的规则之外，还会评估个人情感的影响。对于情感型的人来说，思考型的人对规则的严格遵守看起来十分冷血。而思考型的人却认为情感型的人太感情用事。两种类型的人在人群中各占一半。不过在性别方面有些倾向性，即较多女性是F型，男性则更多是T型。</li>

	<li><strong>判断（J）与知觉（P）</strong>  你的决定是封闭的还是开放的？即，你是快速做出判断还是持续感知？如果你非常喜欢早下定论，你就是J型。J型直到做出结论才会感觉舒服。P型则是会在做出决定之后感到不安。两种类型的人在人群中各占一半。</li>


</ul>]]></description>
			<content:encoded><![CDATA[<p>　　MBTI（Myers Briggs Type Indicator）性格评估测试是一种流行的构造理论，他将性格划分为几种基本类型（四种大的类型，其中每种又可细分为四个小类型）。它是基于心理学大师卡尔·荣格的研究成果，将个性倾向分为四大轴线领域。根据MBTI，你的性格不是非此即彼的极端，而是每个领域中那条轴线上的某一点，依据你更靠近哪一端可以得到一个结果，以一个字母代表。</p>
<ul>
<li><strong>外向（E）与内向（I）</strong>  外向的人乐于与人交往并参加社会活动。内向的人则不是，他们具有领地意识，需要私人的精神和环境空间。内向的人从独立的活动中获取力量，厌倦社会活动。百分之七十五的人偏向于外向型，剩下百分之二十五的人则希望单独呆着。</li>
<li><strong>感觉（S）与直觉（N）</strong>  你如何获取信息？在所有人格特质中，这条轴线可能最容易产生误传和误解。感觉型的人强调可行性和事实，完全基于当时的细节。直觉型的人非常富有想象力，喜欢比喻，创新力强，能够看到多种可能性——生活总是在下一个拐角等着我们。直觉型可能还没有等到完成手头上的事情就跳到一项新任务上去了。感觉型的人认为这种做法浮躁，直觉型的认为感觉型迂腐。百分之七十五的人属于感觉型的。</li>
<li><strong>思考（T）与情感（F）</strong>  你如何做决定？思考型的人基于规则。情感型的人除了考虑适当的规则之外，还会评估个人情感的影响。对于情感型的人来说，思考型的人对规则的严格遵守看起来十分冷血。而思考型的人却认为情感型的人太感情用事。两种类型的人在人群中各占一半。不过在性别方面有些倾向性，即较多女性是F型，男性则更多是T型。</li>
<li><strong>判断（J）与知觉（P）</strong>  你的决定是封闭的还是开放的？即，你是快速做出判断还是持续感知？如果你非常喜欢早下定论，你就是J型。J型直到做出结论才会感觉舒服。P型则是会在做出决定之后感到不安。两种类型的人在人群中各占一半。</li>
</ul>
<p>　　上面是摘自《程序员的思维修炼——开发认知潜能的九堂课》一书中的几段话。作者Andy Hunt，也是《程序员的修炼之道——从小工到专家》的作者。<br />
　　正如作者在书中所说，上述性格分类并不是对人的行为的指导方案，而是一种倾向性说明。在看过每种类型的描述后，如果你觉得这只是一种类似“星座八卦”一样的说辞，每种类型都可以同时安放到每一个人头上，那么你就很危险。相反，如果你对自己有一个较清晰的认识（自己是一个什么样的人，面对问题知道什么该做什么不该做，知道自己想要什么），那么你总能在一种“相对立”的性格类型中找到自己的定位（再一次，这只是一种倾向性）。<br />
　　Dutor同学是一个INTP类型的人，最初我是在《请理解我》一书中测试得出的。在该书中，INTP被作者称为“建造者”，理性者的一种，在计算机这个行当中，对应于“架构师”，虽然我还是水深火热的码农，但我清晰地知道，我走的正是一条通向架构师的漫漫长路，如果没有大的变故的话。在《请理解我》中，作者以一种实用的易于观察的方式来判断一个人的性格类型，即使用“语言”和“工具”的方式。使用语言是抽象的还是具体的，使用工具是实用至上的还是合作性的，不同的组合形成了不同的性格类型。<br />
　　对于渴望了解自己，了解他人的人，我极力推荐这本书。了解自己，了解他人，并不会让自己眼中的世界变得割裂开来，而会以一种宽容和开发的眼光来看世界。“那些让你讨厌的人&#8217;才能&#8217;帮助你成长”。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2011/12/mbti/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>来点学习计划吧</title>
		<link>http://www.dutor.net/index.php/2011/12/mumbles-about-schedule/</link>
		<comments>http://www.dutor.net/index.php/2011/12/mumbles-about-schedule/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 11:33:25 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[杂七杂八]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2677</guid>
		<description><![CDATA[<ul>
	<li><strong>把自己份内的工作做好，做到足够好</strong>。可以让老大觉得你很菜，但不要让老大觉得你很不靠谱，不要让身边的伙计们觉得除了不着调还是不着调。总之，别让自己的'过失'引得别人的不舒适。</li>

	<li><strong>学点设计模式，懂点架构</strong>。多学些抽象的东西，可以让你在更高的层次上不那么费力地思考，虽说'不那么费力地思考'本身需要花费相当大的力气。大卫·凯尔西同学的MBTI测试早就告诉你了，你他妈的以后就是'建造者'，目前你干的这行当，叫做架构师，你是个极品。</li>

	<li><strong>并发</strong>。多美妙的世界啊，不是吗？semaphore多生动，mutex多性感啊，多进程/多线程多迷人哪，完全不同的设计模式不是吗？难道你不想看看OS是怎么搞定这个本会乱糟糟的世界的吗？</li>

	<li><strong>存储</strong>。你不是喜欢字节吗，干嘛不把虚拟内存、内存、磁盘以及各种盘整的明白点呢？cache/buffer什么的，不是很好的佐料吗？</li>

	<li><strong>网络</strong>。吼吼，很神奇的家伙不是吗，这个积木搭的实在很牛逼不是吗，一大堆的协议比那本劳动合同有趣多了不是吗，Socket读起来让人想起Penny让人想入非非不是吗？</li>

	<li><strong>算法</strong>。在大学搞过算法的人，始终是我羡慕的对象。小神，庄神，各种大神。</li>

	<li><strong>文件/系统</strong>。一个个硬邦邦的比特，怎么就变成毛片了？各种数据库引擎各种不懂，闹哪样啊？Windows开机哗啦哗啦的，自慰呐？</li>

	<li><strong>分布式</strong>。租约啊，Paxos啊，ACID啊，一听就蒙。</li>

	<li><strong>吉他</strong>。乐理好难啊，手僵到抽筋啊，渔夫说弹出泡弹出茧才算用功啊。还真是先技术，再艺术啊，一年之后要是能弹个加州旅馆弹个梁祝就好咯！</li>

	<li><strong>绘画</strong>。那些能把自己看到的/想到的东西画出来的人，我羡慕嫉妒恨自己哪，<em>黑客与画家</em>，听起来很牛逼的样子啊。有朝一日，能把自己的妹子漂亮的脸蛋画出来该是多幸福啊，靠想象也成啊。</li>

</ul>]]></description>
			<content:encoded><![CDATA[<p>　　我是一个连2B都算不得的男青年，有点向文艺靠拢的意思，他们说那就是伪文艺。所以，我暂且给自己标榜为&#8217;2B伪文艺纯男小青年&#8217;。这个2B伪文艺纯男小青年做事从来都没有计划，他觉得一切都应该是平滑的，连矩形波都是可以完美傅立叶变换的，但他从来都不知道自己到底是谁。直到有一天，他似乎明白了点什么，他觉得是时候刻意做点什么了。可能是他太寂寞了吧，在这个纷繁的人世间。</p>
<ul>
<li><strong>把自己份内的工作做好，做到足够好</strong>。可以让老大觉得你很菜，但不要让老大觉得你很不靠谱，不要让身边的伙计们觉得除了不着调还是不着调。总之，别让自己的&#8217;过失&#8217;引得别人的不舒适。</li>
<li><strong>学点设计模式，懂点架构</strong>。多学些抽象的东西，可以让你在更高的层次上不那么费力地思考，虽说&#8217;不那么费力地思考&#8217;本身需要花费相当大的力气。大卫·凯尔西同学的MBTI测试早就告诉你了，你他妈的以后就是&#8217;建造者&#8217;，目前你干的这行当，叫做架构师，你是个极品。</li>
<li><strong>并发</strong>。多美妙的世界啊，不是吗？semaphore多生动，mutex多性感啊，多进程/多线程多迷人哪，完全不同的设计模式不是吗？难道你不想看看OS是怎么搞定这个本会乱糟糟的世界的吗？</li>
<li><strong>存储</strong>。你不是喜欢字节吗，干嘛不把虚拟内存、内存、磁盘以及各种盘整的明白点呢？cache/buffer什么的，不是很好的佐料吗？</li>
<li><strong>网络</strong>。吼吼，很神奇的家伙不是吗，这个积木搭的实在很牛逼不是吗，一大堆的协议比那本劳动合同有趣多了不是吗，Socket读起来让人想起Penny让人想入非非不是吗？</li>
<li><strong>算法</strong>。在大学搞过算法的人，始终是我羡慕的对象。小神，庄神，各种大神。</li>
<li><strong>文件/系统</strong>。一个个硬邦邦的比特，怎么就变成毛片了？各种数据库引擎各种不懂，闹哪样啊？Windows开机哗啦哗啦的，自慰呐？</li>
<li><strong>分布式</strong>。租约啊，Paxos啊，ACID啊，一听就蒙。</li>
<li><strong>吉他</strong>。乐理好难啊，手僵到抽筋啊，渔夫说弹出泡弹出茧才算用功啊。还真是先技术，再艺术啊，一年之后要是能弹个加州旅馆弹个梁祝就好咯！</li>
<li><strong>绘画</strong>。那些能把自己看到的/想到的东西画出来的人，我羡慕嫉妒恨自己哪，<em>黑客与画家</em>，听起来很牛逼的样子啊。有朝一日，能把自己的妹子漂亮的脸蛋画出来该是多幸福啊，靠想象也成啊。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2011/12/mumbles-about-schedule/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>换了linode的VPS</title>
		<link>http://www.dutor.net/index.php/2011/10/linode-vps/</link>
		<comments>http://www.dutor.net/index.php/2011/10/linode-vps/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 11:40:50 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[vps]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2657</guid>
		<description><![CDATA[　　之前用了两年的meyu虚拟主机快到期了，出于各种应有和本不应有的需求，决定买VPS。<a href="http://www.linode.com/" target="_blank">linode</a>的VPS名声一直不错，于是就买了。
　　简单介绍下过程，给希望购买VPS的朋友可以参考下。从决定购买到付款到开通到安装系统到部署各种环境，大约一个小时多一点。目前linode有多种不同规格的的VPS，采用Xen虚拟机，我选的是512M RAM/20G Storage的那款，价格是每月$19.95，可能稍贵，可性能和稳定性有保证。系统方面，linode支持各种主流Linux发行版，我暂时选了比较熟悉的Ubuntu Server 11.10，最新的30内核。Web服务器暂时选Apache2，考虑以后学习Nginx的时候换成Nginx。另外，linode在世界各地都有机房，当然要除了中国，我选了最近的东京，ping 70ms左右。
好吧，就这些。]]></description>
			<content:encoded><![CDATA[<p>　　之前用了两年的meyu虚拟主机快到期了，出于各种应有和本不应有的需求，决定买VPS。<a href="http://www.linode.com/" target="_blank">linode</a>的VPS名声一直不错，于是就买了。<br />
　　简单介绍下过程，给希望购买VPS的朋友可以参考下。从决定购买到付款到开通到安装系统到部署各种环境，大约一个小时多一点。目前linode有多种不同规格的的VPS，采用Xen虚拟机，我选的是512M RAM/20G Storage的那款，价格是每月$19.95，可能稍贵，可性能和稳定性有保证。系统方面，linode支持各种主流Linux发行版，我暂时选了比较熟悉的Ubuntu Server 11.10，最新的30内核。Web服务器暂时选Apache2，考虑以后学习Nginx的时候换成Nginx。另外，linode在世界各地都有机房，当然要除了中国，我选了最近的东京，ping 70ms左右。<br />
好吧，就这些。</p>
<h4>Update</h4>
<p>　　今天突然发现ping dutor.net高达200-300ms，联系了linode的客服。2分钟就收到回复，要求我回复使用mtr（从没用过这个工具）获取本地到VPS和VPS到本地的丢包率。linode客服最终确认是ChinaNet/ChinaUnicom节点出了问题。赞一下客服。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2011/10/linode-vps/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>一周淘宝简悟</title>
		<link>http://www.dutor.net/index.php/2011/07/tb-review/</link>
		<comments>http://www.dutor.net/index.php/2011/07/tb-review/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 09:24:40 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[吐槽]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2616</guid>
		<description><![CDATA[　　<strong>首先是技术上。</strong>我想，来这里，或者订阅这个博客的人，百分百都是“搞电脑的”吧。说来惭愧，通过<a href="http://feeds.feedburner.com/dutor" title="http://feeds.feedburner.com/dutor" target="_blank">http://feeds.feedburner.com/dutor</a>订阅的人一个多月前就达到三百了，但一直没能写出什么有价值的东西，但这也确实是我能力不足，水平有限。但我也确实是想好好地写点东西的，一方面是我有分享欲，因为分享给我带来满足感，更重要的是我文字能力太差，需要历练，还有就是我觉得能描述出来尤其是写出来的东西才是你“可能”真正弄懂的东西。看过之前部分文章的同学可以看出，那些文章都是非常琐碎的东西，有的连知识都算不上。我希望以后我能有能力写出些抽象层次更高的东西，当然前提是我的抽象思维能力能有所提高。
　　希望能在工作中获得更多的代码经历。对C++的理解还一直停留在语法层面，虽然看过一些好书，有过一些体会，能说出一些道道来，但没有代码尤其是产品级代码的历练，这种理解和道道都是很肤浅的，只能蒙蒙别人做炫耀的谈资罢了，自己有多少东西自己更清楚，起码“应该”清楚。另外，在技术上，对于看书，我是这么理解的，在任何领域，你首先需要的是知识，如果你想有所建树，就需要更多的知识。对于一个新手来讲，书无疑是最初获得知识的绝佳途径，除此之外互联网也是书本之外获取知识很好的途径，尤其是在读书遇到困惑的时候。当有了一定的知识基础后，就需要将这些知识运用到实践中，从而对所学有一个更深更高层次的理解。有了一定的实践经验之后，你的眼界可能会大开，再看之前的知识或者大牛的经验之谈，就“应该”完全是另一种阅读体验了吧。]]></description>
			<content:encoded><![CDATA[<p>　　来淘宝三周了，正式工作也两周多了。关于我过去一年尤其是最近三四个月的悲催史，没几个人了解，我想也没人愿意了解，反正业已成为历史，就留给我一人独自享用吧。这里吐些嘈，当然还是关于我。<br />
　　来淘宝三周了，正式工作也两周多了。实在地，我万万都没想到会来到杭州，来到淘宝。一切似乎有些“突然”，虽然我不怎么喜欢突然这个词，我的生活向来没有什么阶段性，一切都很平滑。但这次似乎可以算是一个新的开始了。一方面，我离开待了5年的大连，离开一群可爱的伙计，只身来到杭州这座“南方小城”，开始接触另外一群会很可爱的人；另一方面，彻底结束了学生生涯，或许再也没有了的一种生活，开始了另一种生活模式，从头开始，重新摸索，有了更多的期许。<br />
　　如果有的话，最大的感悟应该是：我有的学了。我的意思是，要学的东西太多了。另一层意思是，我可以畅快的学了（如果你知道我之前是“搞”物理的，经常在精神和肉体上羞涩地被物理和计算机拉来扯去，就能理解了）。<br />
　　淘宝的工作环境是很宽松的，我看来，这个部门，目前。我不太善于描述，尤其是文字描述，所以就不具体的描述了。总之，我觉得很爽。<br />
　　那就说说我对“未来”的期许吧，期许用在这里或许不太合适，但我确实找不到更合适的词了。<br />
　　<strong>首先是技术上。</strong>我想，来这里，或者订阅这个博客的人，百分百都是“搞电脑的”吧。说来惭愧，通过<a href="http://feeds.feedburner.com/dutor" title="http://feeds.feedburner.com/dutor" target="_blank">http://feeds.feedburner.com/dutor</a>订阅的人一个多月前就达到三百了，但一直没能写出什么有价值的东西，但这也确实是我能力不足，水平有限。但我也确实是想好好地写点东西的，一方面是我有分享欲，因为分享给我带来满足感，更重要的是我文字能力太差，需要历练，还有就是我觉得能描述出来尤其是写出来的东西才是你“可能”真正弄懂的东西。看过之前部分文章的同学可以看出，那些文章都是非常琐碎的东西，有的连知识都算不上。我希望以后我能有能力写出些抽象层次更高的东西，当然前提是我的抽象思维能力能有所提高。<br />
　　希望能在工作中获得更多的代码经历。对C++的理解还一直停留在语法层面，虽然看过一些好书，有过一些体会，能说出一些道道来，但没有代码尤其是产品级代码的历练，这种理解和道道都是很肤浅的，只能蒙蒙别人做炫耀的谈资罢了，自己有多少东西自己更清楚，起码“应该”清楚。另外，在技术上，对于看书，我是这么理解的，在任何领域，你首先需要的是知识，如果你想有所建树，就需要更多的知识。对于一个新手来讲，书无疑是最初获得知识的绝佳途径，除此之外互联网也是书本之外获取知识很好的途径，尤其是在读书遇到困惑的时候。当有了一定的知识基础后，就需要将这些知识运用到实践中，从而对所学有一个更深更高层次的理解。有了一定的实践经验之后，你的眼界可能会大开，再看之前的知识或者大牛的经验之谈，就“应该”完全是另一种阅读体验了吧。<br />
　　除了当前工作需要学习的东西，我希望我能花些时间在操作系统上，搞搞内核，搞搞驱动。搞内核应该会是一种淋漓尽致的快感吧。我更希望若干年后我想换个领域的时候，这个领域会是内核开发。搞内核这件事，我想我应该在跟进现在项目的节奏之后就开始，由于我还是白纸一张，希望过来人指点迷津，不吝赐教。<br />
　　还有就是算法，由于时间原因，很遗憾，大学期间没能专注于ACM/ICPC，只是在临近毕业的时候伙同他人搞了一次省赛，且没有参加过他们的所谓集训。之前在面试百度的过程中，发现自己的算法应用能力和将复杂算法转化成可执行算法的能力是多么的欠缺。我相信，学习算法和数学，对一个人的抽象思维能力的提高的作用是巨大的，而且我觉得这是我目前能够找到的训练抽象思维的唯一方法（求赐教）。<br />
　　<br />
　　<strong>再就是阅读。</strong>我的童年+少年，基本上就是在牵条狗拿弹弓到林子里打鸟，掏鸟窝，摸泥鳅，看蚂蚁上树中度过的，基本没看过书。说文盲有点夸张，但YM“没文化”的说法，我是非常赞同的。开始看书是从大一下的一本《C++ Primer》开始的，那时起，看了不少技术书，但基本还是没文化。再后来，经培元兄介绍开始看凤凰的锵锵三人行，接触到梁文道、陈丹青、马未都、马家辉和窦文涛一些人，再后来开始使用豆瓣，又接触到Asaka, WangCong, YM等人，从这些人的言论中发现越来越多的自己的不足和幼稚，听到更多有意思的人和让我获益良多的书。现在想来，这些技术之外的人和书对我这个“人”的帮助是莫大的，让我喜欢上读书，开阔了视野，打开了心智，让这个“人”变得不再那么的纠结，那么的狭隘，那么的拧巴。真心感激那些让我从他们身上看到自己不足的人儿们，感激那些书的作者们，May The Force Be With You.<br />
　　每次看到别人谈自己的大学，就不禁去回味和评价自己的大学经历。关于大学，我想过很多，关于我的大学，我想过更多。很多人抱怨大学，抱怨体制，我也一直在抱怨。但抱怨是无济于事的，不安于现状，就要寻找出路，如果你没有能力和机会从这个体制中逃逸，就要在体制中寻找方法来提高自己。经历过大学，检视自己是不是提高了，就要问问自己，抛却教科书中的知识和名目繁多“多姿多彩”的活动经历，你还剩下什么，或者说除此之外你还得到了些什么。我可以问心无愧地说，经过这个物理系的过滤，我已经把物理学的知识连同高中奥赛所学的东西都扔掉了，一点不剩，计算机也没学到太多东西，但我学到了最重要的东西，那就是学习的能力和自我提升的意识和欲望，连带地我还养成了读书的习惯，这就是我想要的，这也是大学应该给我的。<br />
　　梁文道在杭州枫林晚说过，读书，是为了做圣人。乍一听可能很玄乎，换个说法可能比较容易令人接受：读书，是为了做一个完整的人。如果还很玄的话，那么，读书可以：让你获得知识，获得你没能力和机会得到的经历以及由此带来的经验，学会从不同的角度解读一件事物，解读这个世界，了解你自己。没有人能够成为圣人，没有人做到“完整”，没有人能想解读程序一样解读这个世界、解读自己，但确实有太多的人以此为目标去生活。</p>
<p>　　<strong>然后是我的身体。</strong>真是他妈的太瘦了，从中考时候的97斤，到现在十年了几乎没超过过55公斤，现在估计也就50公斤多一点，有时候真的觉得我都对不起我爹妈。继被大二学弟询问我是高中的还是初中的之后，来杭州第二天晚上打的，被司机问小盆友要去哪，尼玛我有那么年轻嘛，伴随哥多年的一脸的青春美丽痘白长了嘛！更悲催的是我的食量，再多就成暴饮暴食者了。大学开始讨厌米饭，刚开始是因为吃不饱，而且即使吃撑了也一会就饿了，直到那时才意识到自己是吃面长大的，才意识到自己那么喜欢面食（有一次喊一个东北哥们去吃面，得到的答复是，不吃面，吃饭，我差点石化……）。后来就压根不吃米饭了，几乎每顿都吃面。来淘宝后，突然觉得自己没那么讨厌米饭了，每顿都能吃上一碗，当然佐料就是四到五个菜。吃是一方面，想增肥，还得锻炼身体。杭州太热，我实在没勇气出去跑步，每天上下班20分钟的路都够我受得了。每天早起睡前做一组俯卧撑+仰卧起坐+握力器，两周下来，效果还是有的，肌肉似乎变“硬”了，俯卧撑能做到四五十个，以前这是不敢想的。似乎是刘未鹏说的吧，把一件看似困难的是坚持下来后，慢慢就会变成习惯，就会变得理所当然，你也变成另外一个人了。<br />
　　好久好久没有跑步了。我想跑步。对杭州的气候还不太了解，不知道哪个季节适合跑步。我想把跑步变成习惯，但现在这个季节开始实施确实有些残忍。另外，两年前的秋末，几个月没跑过了，一时兴起，在运动场一口气跑了十圈，右腿疼了一周。从那时起，每逢冷天或者运动过量膝盖就会痛，似乎是留下病根儿了，好在近一年没怎么发作过，不过我预感这是因为年纪还轻，以后可能有的受。<br />
　　乒乓球拍送同学了，希望换个好点的拍子，能找个专业一点的球友，把基本功练的扎实些，现在对球的落点控制能力太差。上肢力量更有待加强，很多球要靠动作变形才能接好，太别扭。小站同学在同济还好吧，去上海没能找你，再会吧。小胡同学，据说球技大涨啊，球虐啊！</p>
<p>　　<strong>关于英语。</strong>这个得学，还得好好学。能读简单的技术文档看些网页是远远不够的，仅仅能读懂更是不够滴。当然，英语只是个工具。但是这个工具太他妈的重要了有木有？况且，对于一个工具，一个你要天天使用的工具，你能满足于仅仅是“会”使用吗？想想看，你买了一根钢笔，它是如此的羞涩以至于每一个笔划的前半部分都不出水，你还有心思用它“痒痒撒撒”流畅地表达思想吗？相似地，如果你读英文的时候，每遇到一个重要的句子都纠结于某个词组究竟是啥意思，你还有暇去联想作者句子背后的深意吗？读都费尽，还写个但求啊……读都费尽，还听个什么劲儿啊……<br />
　　想要“用”好英文，没有丰富的词汇做支撑是不现实的，想要拥有丰富的词汇，单词是要背的，背单词是很容易的，稍加坚持就行了，丰富的词汇的唯一来源就是大量的阅读，这就又回到使用英语的道路上来了。说到底，这就是个学用的过程。<br />
　　能让我坚持用英语可能并不难，不少好书，尤其是计算机的书都是英文的。但在相对短期内有较大提升（空间我是大大的有的），看来考一下托福是必要的了。</p>
<p>　　<strong>其他。</strong>其他还有什么吗？我已经透露了很多“身体”的细节了，性取向啊什么的我就不说了吧。<br />
　　长期的一个人的生活，让我觉得自己对自己的控制欲太强，且越来越强了。太多事想做，太多事要做，太多东西要学，太多东西想学，这个世界需要我去探索和尝试，我的世界需要我来建立和经营。但饭要一口口的吃，代码要一行行的敲，幻想应该是不够的吧，我想。</p>
<p>　　哦对了，dutor是个男同学，至今未能配对，如果你手里有相关资源，麻烦加Gtalk:Gdutor##gmail.com找甘雨同学，他会负责接洽您的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2011/07/tb-review/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>开通新浪微博</title>
		<link>http://www.dutor.net/index.php/2011/05/sina-weibo/</link>
		<comments>http://www.dutor.net/index.php/2011/05/sina-weibo/#comments</comments>
		<pubDate>Mon, 09 May 2011 09:32:51 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[杂七杂八]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2587</guid>
		<description><![CDATA[很早就注册了twitter，但一直只是观众。今天又注册了新浪微博，有兴趣的朋友可以关注一下：<a href="http://weibo.com/dutor" target="_blank">http://weibo.com/dutor</a>

PS. 我不是话唠，也不喜欢关注话唠（被刷屏的感觉很压抑）。]]></description>
			<content:encoded><![CDATA[<p>很早就注册了twitter，但一直只是观众。今天又注册了新浪微博，有兴趣的朋友可以关注一下：<a href="http://weibo.com/dutor" target="_blank">http://weibo.com/dutor</a></p>
<p>PS. 我不是话唠，也不喜欢关注话唠（被刷屏的感觉很压抑）。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2011/05/sina-weibo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>STL泛型算法及容器思维导图</title>
		<link>http://www.dutor.net/index.php/2011/04/stl-generic-agorithms-mind-map/</link>
		<comments>http://www.dutor.net/index.php/2011/04/stl-generic-agorithms-mind-map/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 08:22:03 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[STL]]></category>
		<category><![CDATA[思维导图]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2543</guid>
		<description><![CDATA[　　看书时使用思维导图做笔记真是很方便。]]></description>
			<content:encoded><![CDATA[<p>　　看书时使用思维导图做笔记真是很方便。<br />
<div id="attachment_2542" class="wp-caption aligncenter" style="width: 204px"><a href="http://www.dutor.net/wp-content/uploads/2011/04/STL-Containers.png" target="_blank"><img src="http://www.dutor.net/wp-content/uploads/2011/04/STL-Containers-194x300.png" alt="STL容器思维导图" title="STL-Containers" width="194" height="300" class="size-medium wp-image-2542" /></a><p class="wp-caption-text">STL容器思维导图</p></div></p>
<div id="attachment_2541" class="wp-caption aligncenter" style="width: 220px"><a href="http://www.dutor.net/wp-content/uploads/2011/04/Generic-Algorithms.png" target="_blank"><img src="http://www.dutor.net/wp-content/uploads/2011/04/Generic-Algorithms-210x300.png" alt="泛型算法思维导图" title="Generic Algorithms" width="210" height="300" class="size-medium wp-image-2541" /></a><p class="wp-caption-text">泛型算法思维导图</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2011/04/stl-generic-agorithms-mind-map/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>逻辑与批判</title>
		<link>http://www.dutor.net/index.php/2011/03/ask-the-right-questions/</link>
		<comments>http://www.dutor.net/index.php/2011/03/ask-the-right-questions/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 08:06:50 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[逻辑]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2525</guid>
		<description><![CDATA[　　然后，这里推荐一本书，<em>Ask the Right Questions: A Guide to Critical Thinking</em>，<a href="http://book.douban.com/subject/1504957/" target="_blank">《学会提问：批判性思维指南》</a>。
　　关于逻辑，关于批判性思维，我有太多的话要说，但我怕说的太多，就不多说了。《学会提问》这本书会告诉你“是什么、为什么、怎么做”。对于这代人，这本书试图教给你一些我们的教育本该教给你却没有教给你的东西。]]></description>
			<content:encoded><![CDATA[<p>　　《生活大爆炸》The Big Bang Theory主题曲：</p>
<blockquote><p>
Our whole universe was in a hot dense state,<br />
Then nearly fourteen billion years ago expansion started. Wait&#8230;<br />
The Earth began to cool,<br />
The autotrophs began to drool,<br />
Neanderthals developed tools,<br />
We built a wall (we built the pyramids),<br />
Math, science, history, unraveling the mysteries,<br />
That all started with the big bang!
</p></blockquote>
<p>　　《无产阶级文化大革命就是好》：</p>
<blockquote><p>
无产阶级文化大革命就是好<br />
无产阶级文化大革命（嘿）就是好<br />
就是好呀就是好呀就是好<br />
马列主义大普及上层建筑红旗飘<br />
革命大字报（嘿）烈火遍地烧<br />
胜利凯歌冲云霄七亿人民团结战斗<br />
红色江山牢又牢<br />
（文化大革命好文化大革命好）<br />
无产阶级文化大革命就是好<br />
就是好～就是好～就是好
</p></blockquote>
<p>　　然后，这里推荐一本书，<em>Ask the Right Questions: A Guide to Critical Thinking</em>，<a href="http://book.douban.com/subject/1504957/" target="_blank">《学会提问：批判性思维指南》</a>。<br />
　　关于逻辑，关于批判性思维，我有太多的话要说，但我怕说的太多，就不多说了。《学会提问》这本书会告诉你“是什么、为什么、怎么做”。对于这代人，这本书试图教给你一些我们的教育本该教给你却没有教给你的东西。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2011/03/ask-the-right-questions/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Grub无法识别USB键盘</title>
		<link>http://www.dutor.net/index.php/2010/07/grub-bios-usb-keyboard/</link>
		<comments>http://www.dutor.net/index.php/2010/07/grub-bios-usb-keyboard/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 00:08:19 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[麻烦]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2332</guid>
		<description><![CDATA[　　我的台式机，以前用的键盘一直是PS/2接口的，前些天换了个USB口的。一直没发现问题，知道昨天想进Windows办点私事儿，才发觉在Grub里面，无法用键盘选择操作系统，只能进入默认的Linux。
　　起初怀疑是操作系统的驱动问题，但马上就排除了，因为Grub引导阶段，OS还没有降生呢！
　　接下来就是Grub了，但大名鼎鼎的Grub怎会不支持USB键盘呢。
　　最后需要考虑的就是BIOS了，键盘鼠标之类的简单硬件都由它来控制。进入BIOS，果然后USB Keyboard的使能选项，选择Enable，重启，问题解决了。
　　记住，还有个BIOS。]]></description>
			<content:encoded><![CDATA[<p>　　我的台式机，以前用的键盘一直是PS/2接口的，前些天换了个USB口的。一直没发现问题，知道昨天想进Windows办点私事儿，才发觉在Grub里面，无法用键盘选择操作系统，只能进入默认的Linux。<br />
　　起初怀疑是操作系统的驱动问题，但马上就排除了，因为Grub引导阶段，OS还没有降生呢！<br />
　　接下来就是Grub了，但大名鼎鼎的Grub怎会不支持USB键盘呢。<br />
　　最后需要考虑的就是BIOS了，键盘鼠标之类的简单硬件都由它来控制。进入BIOS，果然后USB Keyboard的使能选项，选择Enable，重启，问题解决了。<br />
　　记住，还有个BIOS。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/07/grub-bios-usb-keyboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dump the Holy Girl(s)</title>
		<link>http://www.dutor.net/index.php/2010/05/dump-the-holy-girls/</link>
		<comments>http://www.dutor.net/index.php/2010/05/dump-the-holy-girls/#comments</comments>
		<pubDate>Mon, 03 May 2010 22:51:20 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[AVL]]></category>
		<category><![CDATA[动态链接]]></category>
		<category><![CDATA[概率论]]></category>
		<category><![CDATA[虚拟内存]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2228</guid>
		<description><![CDATA[<p></p>
<pre lang="bash" line="1">
$ ssh FenglinHou@Dalian
~% cd Wdir/
~/Wdir% cat dump.cpp
#inlcude <everything>
int
main()
{
    std::set<std::Girl> ().clear();
    std::ifstream lifein("~/*");
    std::ofstream lifeout("~/*");
    std::copy(std::istream_iterator<std::stuff>(lifein), 
              std::istream_iterator<std::stuff>(), 
              std::ostream_iterator<std::stuff>(lifeout, "\newday"));
    return (0);
}
~/Wdir% cat Makefile
dump:dump.cpp
    g++ -odump dump.cpp
~/Wdir% make
~/Wdir% ./dump

</pre>]]></description>
			<content:encoded><![CDATA[</p>

<div class="wp_codebox"><table><tr id="p22281"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code" id="p2228code1"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ssh</span> FenglinHou<span style="color: #000000; font-weight: bold;">@</span>Dalian
~<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">cd</span> Wdir<span style="color: #000000; font-weight: bold;">/</span>
~<span style="color: #000000; font-weight: bold;">/</span>Wdir<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">cat</span> dump.cpp
<span style="color: #666666; font-style: italic;">#inlcude &lt;everything&gt;</span>
int
main<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    std::<span style="color: #000000; font-weight: bold;">set</span><span style="color: #000000; font-weight: bold;">&lt;</span>std::Girl<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>.clear<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;
    std::ifstream lifein<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">&quot;~/*&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;
    std::ofstream lifeout<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">&quot;~/*&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;
    std::copy<span style="color: #7a0874; font-weight: bold;">&#40;</span>std::istream_iterator<span style="color: #000000; font-weight: bold;">&lt;</span>std::stuff<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>lifein<span style="color: #7a0874; font-weight: bold;">&#41;</span>, 
              std::istream_iterator<span style="color: #000000; font-weight: bold;">&lt;</span>std::stuff<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, 
              std::ostream_iterator<span style="color: #000000; font-weight: bold;">&lt;</span>std::stuff<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>lifeout, <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>ewday&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;
    <span style="color: #7a0874; font-weight: bold;">return</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
~<span style="color: #000000; font-weight: bold;">/</span>Wdir<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">cat</span> Makefile
dump:dump.cpp
    <span style="color: #c20cb9; font-weight: bold;">g++</span> <span style="color: #660033;">-odump</span> dump.cpp
~<span style="color: #000000; font-weight: bold;">/</span>Wdir<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">make</span>
~<span style="color: #000000; font-weight: bold;">/</span>Wdir<span style="color: #000000; font-weight: bold;">%</span> .<span style="color: #000000; font-weight: bold;">/</span>dump</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/05/dump-the-holy-girls/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>美好的一天</title>
		<link>http://www.dutor.net/index.php/2010/03/%e7%be%8e%e5%a5%bd%e7%9a%84%e4%b8%80%e5%a4%a9/</link>
		<comments>http://www.dutor.net/index.php/2010/03/%e7%be%8e%e5%a5%bd%e7%9a%84%e4%b8%80%e5%a4%a9/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 00:52:18 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[图片]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2112</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><img alt="Ideal Day" src="http://i.imgur.com/DEUNK.png" title="idealday" class="aligncenter" width="650" height="650" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/03/%e7%be%8e%e5%a5%bd%e7%9a%84%e4%b8%80%e5%a4%a9/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>我要低调</title>
		<link>http://www.dutor.net/index.php/2010/03/fuck/</link>
		<comments>http://www.dutor.net/index.php/2010/03/fuck/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 01:44:16 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[我是屁民]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2089</guid>
		<description><![CDATA[　　Youtube走了，走吧，我用的不多。
　　Blogger走了，走吧，我才刚开始用。
　　Sites走了，走吧，我有自己的site。
　　Facebook走了，走吧，我讨厌SNS。
　　Twitter走了，走吧，我只是看客，忠实点罢了。
　　Groups走了，走吧，我偶尔才去TL。
　　Picasa走了，走吧，又不是非用不可。
　　G.cn走了，走吧，我用.com。
　　GReader也走了，走吧，我疯了。
　　低调；
　　我还是得低调，低调地做一个屁民，什么游行我都不参与。
　　我还要感谢国家，是它给了我低调的自由，沉默的权利。
　　I'm feeling fucky.
　　对，我就是疯了。]]></description>
			<content:encoded><![CDATA[<p>　　Youtube走了，走吧，我用的不多。<br />
　　Blogger走了，走吧，我才刚开始用。<br />
　　Sites走了，走吧，我有自己的site。<br />
　　Facebook走了，走吧，我讨厌SNS。<br />
　　Twitter走了，走吧，我只是看客，忠实点罢了。<br />
　　Groups走了，走吧，我偶尔才去TL。<br />
　　Picasa走了，走吧，又不是非用不可。<br />
　　G.cn走了，走吧，我用.com。<br />
　　GReader也走了，走吧，我疯了。<br />
　　低调；<br />
　　我还是得低调，低调地做一个屁民，什么游行我都不参与。<br />
　　我还要感谢国家，是它给了我低调的自由，沉默的权利。<br />
　　I&#8217;m feeling fucky.<br />
　　对，我就是疯了。</p>
<p><strong>Update:</strong><br />
　　<em>https://www.google.com/reader/</em>被墙，<em>http://reader.google.com</em>暂时还可以。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/03/fuck/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>[zz]故事</title>
		<link>http://www.dutor.net/index.php/2010/03/true-story/</link>
		<comments>http://www.dutor.net/index.php/2010/03/true-story/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 04:50:22 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2087</guid>
		<description><![CDATA[　　我家住在一个工厂的职工家属大院里，小时候一大帮年纪差不多大的孩子经常在一起玩。在我们这些人里面，有一个孩子比我们大好几岁，长得又高又壮，我们都得喊他老大，有什么好东西都得先孝敬他，有什么好事情都得先感谢他。他看谁不顺眼就经常骂几句踹两脚，因为我们打不过他，谁也不敢吭声，甚至还得在一旁叫好。不过老大也并不一直是这样，有时心情好了还是挺和善的。虽然也经常有人心里犯嘀咕，觉得这个老大不怎么样，但是据说是他保卫了我们的正常生活，而且据说以前的老大特别凶狠霸道，还有外面的更狠的老大们总来找麻烦，是我们现在这个老大把他们全都赶跑了，我们才有今天来之不易的幸福生活，想到这些，我们就觉得我们为他做些事，偶尔被他欺负一下，这些也都是理所当然的了。

　　要说作为一个普通孩子的我看法，我是支持古哥的，我支持他是因为这么长时间以来终于出现了一个敢向老大挑战的人，无论他是阴谋家还是慈善家，我们总需要这样的变化，游戏才能玩得下去。不然的话，我们只能在老大的看管下日复一日地无知和愚昧下去。有人说，因为我们还很无知，所以不能什么都让我们知道，不然会出乱子，但我觉得恰恰是不让我们知道，才导致我们无知。所以我不接受这个倒果为因的解释，我不想在一段时间以后，外面的孩子看我们的眼光，就像我们现在看东北角那个邻居院子里的孩子们一样。]]></description>
			<content:encoded><![CDATA[<p><strong>zz from RoBa http://feedproxy.google.com/~r/RobasBlog/~3/BceFXJQAaew/</strong><br />
　　我家住在一个工厂的职工家属大院里，小时候一大帮年纪差不多大的孩子经常在一起玩。在我们这些人里面，有一个孩子比我们大好几岁，长得又高又壮，我们都得喊他老大，有什么好东西都得先孝敬他，有什么好事情都得先感谢他。他看谁不顺眼就经常骂几句踹两脚，因为我们打不过他，谁也不敢吭声，甚至还得在一旁叫好。不过老大也并不一直是这样，有时心情好了还是挺和善的。虽然也经常有人心里犯嘀咕，觉得这个老大不怎么样，但是据说是他保卫了我们的正常生活，而且据说以前的老大特别凶狠霸道，还有外面的更狠的老大们总来找麻烦，是我们现在这个老大把他们全都赶跑了，我们才有今天来之不易的幸福生活，想到这些，我们就觉得我们为他做些事，偶尔被他欺负一下，这些也都是理所当然的了。</p>
<p>　　一开始的时候大院的门关得死死的，我们只能自己跟自己玩，虽然有点乏味，不过也这么过来了。后来有一天老大来了兴致，把门打开了一点，于是就有一些外面的野孩子跑了进来，我们也有一些胆子大的跑了出去，老大也并没有怎么管。外面的孩子们带来了很多新鲜的玩意儿，我们里面跑出去的也回来给我们讲外面的花花世界，我们一下子觉得原来生活可以这么好玩啊，也更加对开门的老大感恩戴德了。</p>
<p>　　前面说到院子跑进来一些野孩子，这些野孩子长得跟我们有点不一样，都是些白皮肤蓝眼珠的，嘴里还偶尔冒出些我们听不懂的新词，什么democracy啊，什么human rights啊之类的。我们听得一头雾水不明所以，不过老大似乎是明白的，但是他好像很不喜欢这些词，每次听到这些就呵斥那些野孩子，不给我们解释这些词是什么意思，也不许我们讲这些词。大部分孩子一看老大生气了就不敢折腾了，但是总有那些不太安分的，非得弄明白不可。后来不知道弄明白没有，也许是弄明白了吧，然后他们居然还纠集几个人要跟老大谈判，结果被老大结结实实地揍了一顿。我觉得他们真是傻，被那些野孩子忽悠得真不知道自己几斤几两了，不过其实还是挺佩服他们的，要是换我我可不敢。</p>
<p>　　老大发威以后，我们剩下的孩子自然是大气都不敢出了，那些野孩子也安分了很多。这样相安无事地过了一段时间，忽然有一天外面带来了一个新玩意叫“电话”，用这个玩意可以非常方便地跟别的孩子联系。（这里插一句嘴，以前我们要联系都要通过写信的，很慢又不方便，而且信箱就在老大家门口，所以谁跟谁说了什么东西他都知道，有些话老大觉得你不能说，就直接把你教训一顿。）现在有了这个电话，每个人家里拉一条线，谁跟谁都可以直接说话，也不用经过老大审查了，甚至可以直接跟大院外边的人们联系。不过老大也没闲着，很快研究出了新的方法，在院子周围加了一圈信号过滤设备组成的围墙，如果你说的话里面有他觉得不合适的东西，通话直接就被掐断了。但是这回老大的方法不是完全管用了，有些人偷偷用了各种办法绕过了围墙，当然大部分人还是很听话的，老大说不让听就不听呗。很不幸，这回我属于不老实的那一小撮，通过种种手段绕过过滤以后，我终于大概明白了那几个词是啥意思，原来外面的老大不都和我们的老大一样，外面的孩子们有很多玩着和我们很不一样的游戏，那是我们很难理解的游戏，就像他们也很难理解我们一样。在他们的游戏里好像老大是挺憋屈的一个角色，甚至几乎就没谁算得上老大，怪不得我们老大不想让我们知道呢，呵呵。不过，虽然我知道了这些，也不知道自己该做什么或者能做什么。虽然比起外面的孩子来，我们玩得不是很爽，但也并没有乏味到不能忍受，而且老大的拳头实在是可怕得很，不到万不得已我可不想挨。</p>
<p>　　前面说过自从开门以后就经常有外面的野孩子跑进来，现在大院里的野孩子更是已经非常多了。这些野孩子基本上是很老实的，每次只是把新鲜好玩的游戏给我们玩，作为回报我们也给他们一些自己特产的好东西。老大对他们一般是和和气气的，他们也从来不提会惹老大不高兴的事情，只有一个野孩子除外。</p>
<p>　　这个野孩子来我们大院没多久，从头到脚透着一股桀骜之气，还有一股天下舍我其谁的劲头。我想他的信心是有道理的，他带给我们的游戏确实和以往的那些很不一样，好玩耐玩得多，而且居然大部分是让我们白玩的，这一下也逼得其他孩子不得不提高自己游戏的质量并降低要求的回报，我们这些普通孩子自然是得了便宜非常高兴。这个野孩子好像是叫古什么什么，后来我们院里都尊称他古哥。</p>
<p>　　古哥貌似自视甚高，对别的野孩子都不拿正眼瞧，也不像别的野孩子那样对我们老大毕恭毕敬，但是对我们却非常和善，变着法的让我们玩得开心，这也让我们更喜欢他了。不过显然老大并不喜欢他，有时候会故意给他点难堪，还经常放一些口风出来说，古哥其实是外面一个非常狠的超级老大的手下，那个超级老大厉害到可以把我们老大轻松揍趴下，古哥是超级老大派来挑拔我们的，我们一定要小心他们的阴谋。院里的很多孩子还是很信任老大的话的，于是很多人就有意无意地对古哥疏远了一些，古哥虽然无奈但也没办法。当然也有很多本来就对老大不太满意的，像我这样的，还是很挺古哥的。</p>
<p>　　突然有一天，古哥和老大吵起来了，这在大院里可是不得了的大事。我印象里已经很久很久没人敢跟老大顶撞了，最近的一次还是很久以前几个傻孩子聚集起来要谈判那回。这回看到有人敢找老大的麻烦，不知怎么的我心里竟然很兴奋，甚至觉得是一直在期待这么一天。吵架的原因，据古哥说是老大的要求太过分了，古哥主要干的事就是搜集外面的各种消息然后整理好了提供给我们，但是有些消息老大不想让我们知道，结果在这个问题上两人矛盾越来越大，终于闹崩了。老大说自己的要求是很合理的，在这个大院里你们这些野孩子都得听话，不要以为你有个超级老大撑着就可以胡来。下面的孩子们也议论纷纷，有人支持古哥，说我们有权利知道所有消息；有人支持老大，说这就是古哥和那个超级老大串通好的阴谋，古哥根本就不像他说的一样是为我们好。</p>
<p>　　这个事情到目前为止的结果是，古哥强龙压不过地头蛇，不过好像还不想彻底一走了之，于是搬到了大院边上一个小屋里落脚，那里说起来也是老大的地盘，但老大在那里管不了那么严。超级老大那边还没有表态，不知道事情将如何发展。</p>
<p>　　要说作为一个普通孩子的我看法，我是支持古哥的，我支持他是因为这么长时间以来终于出现了一个敢向老大挑战的人，无论他是阴谋家还是慈善家，我们总需要这样的变化，游戏才能玩得下去。不然的话，我们只能在老大的看管下日复一日地无知和愚昧下去。有人说，因为我们还很无知，所以不能什么都让我们知道，不然会出乱子，但我觉得恰恰是不让我们知道，才导致我们无知。所以我不接受这个倒果为因的解释，我不想在一段时间以后，外面的孩子看我们的眼光，就像我们现在看东北角那个邻居院子里的孩子们一样。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/03/true-story/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>蓝莲花</title>
		<link>http://www.dutor.net/index.php/2010/03/google/</link>
		<comments>http://www.dutor.net/index.php/2010/03/google/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 03:56:51 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2085</guid>
		<description><![CDATA[<pre>
没有什么能够阻挡
你对自由的向往
天马行空的生涯
你的心了无牵挂
穿过幽暗的岁月
也曾感到彷徨
当你低头的瞬间
才发觉脚下的路
心中那自由的世界
如此的清澈高远
盛开着永不凋零
蓝莲花
</pre>]]></description>
			<content:encoded><![CDATA[<pre>
没有什么能够阻挡
你对自由的向往
天马行空的生涯
你的心了无牵挂
穿过幽暗的岁月
也曾感到彷徨
当你低头的瞬间
才发觉脚下的路
心中那自由的世界
如此的清澈高远
盛开着永不凋零
蓝莲花
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/03/google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>现在邮政改空投了？</title>
		<link>http://www.dutor.net/index.php/2010/03/suck-post/</link>
		<comments>http://www.dutor.net/index.php/2010/03/suck-post/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 08:13:12 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[囧Orz]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=2070</guid>
		<description><![CDATA[　　两周前，从家里往学校寄了10本书。今天接到通知去邮局取邮件。第一眼看到装书的纸箱子时差点没认出来，原来是一个装葡萄酒的方方正正的箱子，现在俨然一个大冬瓜了！心想箱子坏就坏了吧，书怎么着也不会坏吧，而且里面还塞着许多泡沫板呢，签完字就拿走了。回到宿舍打开一看就傻眼了。年前刚刚买的《Unix网络编程》失去了两周前的光鲜，成了半老徐娘，更惨的是和它一起入住的《算法导论》封面+扉页掉了一半，其他书也都有不同程度的损伤。娘的，看来空投了不止一次啊！邮政的全体员工，在这里，我默默地诅咒你们。]]></description>
			<content:encoded><![CDATA[<p>　　两周前，从家里往学校寄了10本书。今天接到通知去邮局取邮件。第一眼看到装书的纸箱子时差点没认出来，原来是一个装葡萄酒的方方正正的箱子，现在俨然一个大冬瓜了！心想箱子坏就坏了吧，书怎么着也不会坏吧，而且里面还塞着许多泡沫板呢，签完字就拿走了。回到宿舍打开一看就傻眼了。年前刚刚买的《Unix网络编程》失去了两周前的光鲜，成了半老徐娘，更惨的是和它一起入住的《算法导论》封面+扉页掉了一半，其他书也都有不同程度的损伤。娘的，看来空投了不止一次啊！邮政的全体员工，在这里，我默默地诅咒你们。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/03/suck-post/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>[Info]2009 LQ开源软件获奖名单</title>
		<link>http://www.dutor.net/index.php/2010/03/good-software-list/</link>
		<comments>http://www.dutor.net/index.php/2010/03/good-software-list/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 04:49:12 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[资讯]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1999</guid>
		<description><![CDATA[<ol>
<li>桌面系统：Ubuntu (30.13%)</li>
<li>服务器：Debian (24.24%)</li>
<li>系统恢复盘：BackTrack (43.48%)</li>
<li>数据库：MySQL(60.81%)</li>
<li>办公套件：OpenOffice.org (90.76%)</li>
<li>浏览器：Firefox (65.21%)</li>
<li>桌面环境：Gnome (41.96%)</li>
<li>窗口管理器：Compiz (23.10%)</li>
<li>即时通讯：Pidgin (48.74%)</li>
<li>邮件客户端：Thunderbird (53.48%)</li>
<li>虚拟机产品：VirtualBox (67.43%)</li>
<li>音频播放器：Amarok (38.81%)</li>
<li>音频编辑器：Audacity (77.26%)</li>
<li>视频播放器：VLC (46.05%)</li>
<li>视频编辑器：FFmpeg (21.94%)</li>
<li>多媒体工具：GStreamer (32.84%)</li>
<li>图像软件：GIMP (66.48%)</li>
<li>网络安全：Nmap Security Scanner (29.85%)</li>
<li>主机安全：SELinux (39.26%)</li>
<li>网络监视：Nagios (51.11%)</li>
<li>IDE/网页开发：Eclipse (23.28%)</li>
<li>文本编辑器：vim (35.29%)</li>
<li>文件管理器：Nautilus (24.92%)</li>
<li>开源游戏：Battle for Wesnoth (15.45%)</li>
<li>编程语言：Python (27.59%)</li>
<li>备份工具：rsync (48.99%)</li>
<li>开源内容管理系统/博客平台：WordPress (45.20%)</li>
</ol>
]]></description>
			<content:encoded><![CDATA[<p>　　LQ，<a href="http://www.linuxquestion.org/" target="_blank">LinuxQuestions.org</a>的缩写，一个开源社区网站。下面列出的都是开源软件中的精品，哪些你使用过或者正在使用？或者还没有接触甚至没听过？</p>
<ol>
<li>桌面系统：Ubuntu (30.13%)</li>
<li>服务器：Debian (24.24%)</li>
<li>系统恢复盘：BackTrack (43.48%)</li>
<li>数据库：MySQL(60.81%)</li>
<li>办公套件：OpenOffice.org (90.76%)</li>
<li>浏览器：Firefox (65.21%)</li>
<li>桌面环境：Gnome (41.96%)</li>
<li>窗口管理器：Compiz (23.10%)</li>
<li>即时通讯：Pidgin (48.74%)</li>
<li>邮件客户端：Thunderbird (53.48%)</li>
<li>虚拟机产品：VirtualBox (67.43%)</li>
<li>音频播放器：Amarok (38.81%)</li>
<li>音频编辑器：Audacity (77.26%)</li>
<li>视频播放器：VLC (46.05%)</li>
<li>视频编辑器：FFmpeg (21.94%)</li>
<li>多媒体工具：GStreamer (32.84%)</li>
<li>图像软件：GIMP (66.48%)</li>
<li>网络安全：Nmap Security Scanner (29.85%)</li>
<li>主机安全：SELinux (39.26%)</li>
<li>网络监视：Nagios (51.11%)</li>
<li>IDE/网页开发：Eclipse (23.28%)</li>
<li>文本编辑器：vim (35.29%)</li>
<li>文件管理器：Nautilus (24.92%)</li>
<li>开源游戏：Battle for Wesnoth (15.45%)</li>
<li>编程语言：Python (27.59%)</li>
<li>备份工具：rsync (48.99%)</li>
<li>开源内容管理系统/博客平台：WordPress (45.20%)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/03/good-software-list/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>初识Python</title>
		<link>http://www.dutor.net/index.php/2010/03/touch-python/</link>
		<comments>http://www.dutor.net/index.php/2010/03/touch-python/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 08:56:05 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[GFW]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[麻烦]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1995</guid>
		<description><![CDATA[　　在家里闲着实在憋屈。想接触下Python，用我弱弱的手机找了个<a href="http://paper.sebug.net/python/" target="_blank">《Python简明教程》</a>大致地过了一遍。找了家网吧想下个Python安装程序练练手，结果发现<a href="http://www.python.org" target="_blank">Python.org</a>居然被墙了！幸好前几天殷殷给了一个翻墙用的包GAppProxy，马上就派上用场了。翻将过去，就看到那两条亲密无间的“蛇”了。

　　F**K！难道G*F*W连个编程语言都不放过？Python是个不和谐的语言？可能吧，上面的翻墙工具就是Python吐出来的。Python另一个被墙的理由就是Python.com了，这是一个不河蟹的网站，简直就是十分不和谐……

　　附上GAppProxy.rar。加压后运行gui.exe，设置代理服务器为127.0.0.1：8000（端口可以自己设定）。]]></description>
			<content:encoded><![CDATA[<p>　　在家里闲着实在憋屈。想接触下Python，用我弱弱的手机找了个<a href="http://paper.sebug.net/python/" target="_blank">《Python简明教程》</a>大致地过了一遍。找了家网吧想下个Python安装程序练练手，结果发现<a href="http://www.python.org" target="_blank">Python.org</a>居然被墙了！幸好前几天殷殷给了一个翻墙用的包GAppProxy，马上就派上用场了。翻将过去，就看到那两条亲密无间的“蛇”了。</p>
<p>　　F**K！难道G*F*W连个编程语言都不放过？Python是个不和谐的语言？可能吧，上面的翻墙工具就是Python吐出来的。Python另一个被墙的理由就是Python.com了，这是一个不河蟹的网站，简直就是十分不和谐……</p>
<p>　　附上<a href="http://dutor.googlecode.com/files/GAppProxy.rar">GAppProxy.rar</a>。加压后运行gui.exe，设置代理服务器为127.0.0.1：8000（端口可以自己设定）。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/03/touch-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>吃肉</title>
		<link>http://www.dutor.net/index.php/2010/02/miximeat/</link>
		<comments>http://www.dutor.net/index.php/2010/02/miximeat/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 06:47:37 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[null]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1991</guid>
		<description><![CDATA[　　三年自然灾害时期，中国遭遇大灾，对外宣传却是“形势一片大好”。某国元首来中国访问，当然是会见最高首长，再去工厂、部队、农村等地访问一番。外交无小事，某省接到通知，各级政府做好充分准备，乡里大食堂的案板上，堆满作秀需要的菜码儿。重要人物总是在路上，元首一行不仅迟迟不到，而且传话说，要改道而行。新鲜的猪肉，经不起一拖再拖 ，处在变质的边缘。领导拍板，立即将大肉加上大料卤透，然手让农民们坐上拖拉机，快“机”加鞭，到元首要经过的公路边食用以此制造一种农民兄弟们过上“顿顿能吃肉，家家有余粮”的假象。于是，近百个精挑细选、根正苗红的农民兄弟，手持招待外宾用的青花细瓷碗，蹲在路边，看到元首车队离路边仅数十米之遥时，一基层领导大喝一声“吃”，近百号大汉“呼哧呼哧”，连肉带面，吃了一个底儿朝天。事后，农民兄弟们的家小，对外国元首和领导同志们甚是感激，这场戏的布置，让村里的老老小小都吃到了久违的猪肉。原因是，农民兄弟们为了让家小尝尝猪肉，边吃边把肉往口袋或衣袖里藏。
　　
　　长安街，似乎还“没几个人”知道，Google和Baidu也知不道。]]></description>
			<content:encoded><![CDATA[<p>　　三年自然灾害时期，中国遭遇大灾，对外宣传却是“形势一片大好”。某国元首来中国访问，当然是会见最高首长，再去工厂、部队、农村等地访问一番。外交无小事，某省接到通知，各级政府做好充分准备，乡里大食堂的案板上，堆满作秀需要的菜码儿。重要人物总是在路上，元首一行不仅迟迟不到，而且传话说，要改道而行。新鲜的猪肉，经不起一拖再拖 ，处在变质的边缘。领导拍板，立即将大肉加上大料卤透，然手让农民们坐上拖拉机，快“机”加鞭，到元首要经过的公路边食用以此制造一种农民兄弟们过上“顿顿能吃肉，家家有余粮”的假象。于是，近百个精挑细选、根正苗红的农民兄弟，手持招待外宾用的青花细瓷碗，蹲在路边，看到元首车队离路边仅数十米之遥时，一基层领导大喝一声“吃”，近百号大汉“呼哧呼哧”，连肉带面，吃了一个底儿朝天。事后，农民兄弟们的家小，对外国元首和领导同志们甚是感激，这场戏的布置，让村里的老老小小都吃到了久违的猪肉。原因是，农民兄弟们为了让家小尝尝猪肉，边吃边把肉往口袋或衣袖里藏。<br />
　　<br />
　　长安街，似乎还“没几个人”知道，Google和Baidu也知不道。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2010/02/miximeat/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PIC18 EEPROM编程</title>
		<link>http://www.dutor.net/index.php/2009/11/pic18-eeprom/</link>
		<comments>http://www.dutor.net/index.php/2009/11/pic18-eeprom/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 14:25:04 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[单片机]]></category>
		<category><![CDATA[汇编]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1720</guid>
		<description><![CDATA[　　本程序利用PIC18单片机实现了对EEPROM的读写。应用背景是"汽车里程表"，简单介绍下程序功能和流程。
　　单片机接受来自RA4管脚的计数脉冲信号，应用中这个脉冲信号通常由一个传感器来产生，计数脉冲被设定为上升沿触发。计数器溢出时，需要更新一个用于存储当前里程的RAM寄存器单元COUNT，可以理解为车轮转了一定圈数后，里程表的增加一定的里程数。
　　RB0管脚用来接收一个外部中断信号，接收到中断信号后，在中断服务程序中将COUNT的值即当前里程数保存至EEPROM的00H单元。这样可以配合外部电路实现当单片机掉电时自动保存里程表数值的功能，即汽车熄火时保存里程表，以减少对EEPROM的读写次数。
　　单片机启动时，首先应该到EEPROM的相应单元读取里程表的当前值，并在此基础上进行累加。
　　程序中为了调试方便，还将COUNT的数值同步地通过8个LED以二进制形式较直观地显示了出来。 
<pre lang="asm" line="1">
LOOP	
		
	BCF	INTCON, T0IF 	; 清TMR0中断标志
	MOVLW	TMR0B 
	MOVWF	TMR0L 		; 装入计数初值 253
	BSF	T0CON, TMR0ON 	; 启动计数器
	TEST	
	BTFSS	INTCON, T0IF 	; 检测TMR0是否溢出
	GOTO	TEST
	INCF	COUNT, F 	; 计数加一
	MOVFF	COUNT, PORTD 	; 输出，显示
		
	GOTO	LOOP
		
WIRT_EE				; 写EEPROM
	BCF	EECON1, EEPGD
	BCF	EECON1, CFGS 	; 设定EECON1控制寄存器
	BSF	EECON1, WREN 	; EEPROM写使能
	BCF	INTCON, GIE 	; 写EEPROM时需要关闭一切中断
</pre>]]></description>
			<content:encoded><![CDATA[<p>　　本程序利用PIC18单片机实现了对EEPROM的读写。应用背景是&#8221;汽车里程表&#8221;，简单介绍下程序功能和流程。<br />
　　单片机接受来自RA4管脚的计数脉冲信号，应用中这个脉冲信号通常由一个传感器来产生，计数脉冲被设定为上升沿触发。计数器溢出时，需要更新一个用于存储当前里程的RAM寄存器单元COUNT，可以理解为车轮转了一定圈数后，里程表的增加一定的里程数。<br />
　　RB0管脚用来接收一个外部中断信号，接收到中断信号后，在中断服务程序中将COUNT的值即当前里程数保存至EEPROM的00H单元。这样可以配合外部电路实现当单片机掉电时自动保存里程表数值的功能，即汽车熄火时保存里程表，以减少对EEPROM的读写次数。<br />
　　单片机启动时，首先应该到EEPROM的相应单元读取里程表的当前值，并在此基础上进行累加。<br />
　　程序中为了调试方便，还将COUNT的数值同步地通过8个LED以二进制形式较直观地显示了出来。</p>

<div class="wp_codebox"><table><tr id="p17202"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
</pre></td><td class="code" id="p1720code2"><pre class="asm" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">list</span>	P = 18F452
#include P18F452<span style="color: #339933;">.</span><span style="color: #00007f; font-weight: bold;">INC</span>
&nbsp;
	TMR0B	EQU D<span style="color: #7f007f;">'253'</span>
	COUNT	EQU  0x10H
	<span style="color: #000000; font-weight: bold;">ORG</span>	<span style="color: #0000ff;">0000H</span>	  	<span style="color: #666666; font-style: italic;">;PIC上电时从0000h单元开始执行</span>
	<span style="color: #000000; font-weight: bold;">GOTO</span>	MAIN	  	<span style="color: #666666; font-style: italic;">;跳转到主程序</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">ORG</span>	<span style="color: #0000ff;">0008H</span>
	<span style="color: #000000; font-weight: bold;">GOTO</span>	INT0_ISR	<span style="color: #666666; font-style: italic;">;中断向量入口</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">ORG</span>	<span style="color: #0000ff;">0030H</span>	  	<span style="color: #666666; font-style: italic;">;主程序定位</span>
MAIN	
	CLRF	TRISD	  	<span style="color: #666666; font-style: italic;">;设定D口方向为输出</span>
	CLRF	PORTD 		<span style="color: #666666; font-style: italic;">;设定C口方向为输出</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span>	TRISA<span style="color: #339933;">,</span> <span style="color: #0000ff;">4</span> 	<span style="color: #666666; font-style: italic;">; 使用RA4做为计数输入</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span>	INTCON<span style="color: #339933;">,</span> GIE 	<span style="color: #666666; font-style: italic;">;开全局中断</span>
	BCF	INTCON<span style="color: #339933;">,</span> INT0IF 	<span style="color: #666666; font-style: italic;">;清INT0中断标志</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span>	INTCON<span style="color: #339933;">,</span> INT0IE 	<span style="color: #666666; font-style: italic;">; 开INT0中断</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span>	TRISB<span style="color: #339933;">,</span> INT0 	<span style="color: #666666; font-style: italic;">; 设定RB0即INT0脚为接收(输入)状态</span>
&nbsp;
	MOVLW	<span style="color: #0000ff;">68H</span>
	MOVWF	T0CON 		<span style="color: #666666; font-style: italic;">; 设定计数器TMR0为8位计数，上升沿触发，分频比1:1</span>
	MOVLW	<span style="color: #0000ff;">0x00</span>
	MOVWF	EEADR	 	<span style="color: #666666; font-style: italic;">; 装载EEPROM的地址00h</span>
	<span style="color: #00007f; font-weight: bold;">CALL</span>	READ_EE 	<span style="color: #666666; font-style: italic;">; 读入EEPROM中00h单元的原始数据，即计数初值，保存到WREG</span>
	MOVWF	COUNT
	MOVWF	PORTD 		<span style="color: #666666; font-style: italic;">; 输出到PORTD(连接了8个LED)</span>
&nbsp;
<span style="color: #00007f; font-weight: bold;">LOOP</span>	
&nbsp;
	BCF	INTCON<span style="color: #339933;">,</span> T0IF 	<span style="color: #666666; font-style: italic;">; 清TMR0中断标志</span>
	MOVLW	TMR0B 
	MOVWF	TMR0L 		<span style="color: #666666; font-style: italic;">; 装入计数初值 253</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span>	T0CON<span style="color: #339933;">,</span> TMR0ON 	<span style="color: #666666; font-style: italic;">; 启动计数器</span>
	<span style="color: #00007f; font-weight: bold;">TEST</span>	
	BTFSS	INTCON<span style="color: #339933;">,</span> T0IF 	<span style="color: #666666; font-style: italic;">; 检测TMR0是否溢出</span>
	<span style="color: #000000; font-weight: bold;">GOTO</span>	<span style="color: #00007f; font-weight: bold;">TEST</span>
	INCF	COUNT<span style="color: #339933;">,</span> F 	<span style="color: #666666; font-style: italic;">; 计数加一</span>
	MOVFF	COUNT<span style="color: #339933;">,</span> PORTD 	<span style="color: #666666; font-style: italic;">; 输出，显示</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">GOTO</span>	<span style="color: #00007f; font-weight: bold;">LOOP</span>
&nbsp;
WIRT_EE				<span style="color: #666666; font-style: italic;">; 写EEPROM</span>
	BCF	EECON1<span style="color: #339933;">,</span> EEPGD
	BCF	EECON1<span style="color: #339933;">,</span> CFGS 	<span style="color: #666666; font-style: italic;">; 设定EECON1控制寄存器</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span>	EECON1<span style="color: #339933;">,</span> WREN 	<span style="color: #666666; font-style: italic;">; EEPROM写使能</span>
	BCF	INTCON<span style="color: #339933;">,</span> GIE 	<span style="color: #666666; font-style: italic;">; 写EEPROM时需要关闭一切中断</span>
&nbsp;
	MOVLW	0x55h 	<span style="color: #666666; font-style: italic;">; </span>
	MOVWF	EECON2
	MOVLW	0xAAh
	MOVWF	EECON2
	<span style="color: #00007f; font-weight: bold;">BSF</span>	EECON1<span style="color: #339933;">,</span> WR 	<span style="color: #666666; font-style: italic;">; 经典的五指令序列，将EEDATA写入EEPROM</span>
&nbsp;
	<span style="color: #00007f; font-weight: bold;">BSF</span>	INTCON<span style="color: #339933;">,</span> GIE 	<span style="color: #666666; font-style: italic;">; 开全局中断</span>
	BCF	EECON1<span style="color: #339933;">,</span> WREN 	<span style="color: #666666; font-style: italic;">; 提前关闭写使能</span>
	RETURN	
&nbsp;
READ_EE				<span style="color: #666666; font-style: italic;">; 读EEPROM</span>
	BCF	EECON1<span style="color: #339933;">,</span> EEPGD
	BCF	EECON1<span style="color: #339933;">,</span> CFGS
	<span style="color: #00007f; font-weight: bold;">BSF</span>	EECON1<span style="color: #339933;">,</span> RD
	<span style="color: #00007f; font-weight: bold;">NOP</span>	
	MOVF	EEDATA<span style="color: #339933;">,</span> W 	<span style="color: #666666; font-style: italic;">; 将读出的结果写入W并返回，</span>
	RETURN	
&nbsp;
&nbsp;
INT0_ISR	
				<span style="color: #666666; font-style: italic;">; 外部中断int0服务程序，可以利用外部电路，</span>
				<span style="color: #666666; font-style: italic;">; 实现掉电时将当前计数值写入EEPROM</span>
	BTFSS	INTCON<span style="color: #339933;">,</span> INT0IF  <span style="color: #666666; font-style: italic;">; 重新测试溢出位，防止干扰信号触发中断</span>
	RETFIE	
	BCF	INTCON<span style="color: #339933;">,</span> INT0IF
	MOVLW	0x00h
	MOVWF	EEADR
	MOVFF	COUNT<span style="color: #339933;">,</span> EEDATA
	<span style="color: #00007f; font-weight: bold;">CALL</span>	WIRT_EE
&nbsp;
	RETFIE			<span style="color: #666666; font-style: italic;">; 中断返回</span>
<span style="color: #000000; font-weight: bold;">END</span></pre></td></tr></table></div>

<p>662e438d</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2009/11/pic18-eeprom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PIC18 ADC模数转换</title>
		<link>http://www.dutor.net/index.php/2009/11/pic18f52-adc/</link>
		<comments>http://www.dutor.net/index.php/2009/11/pic18f52-adc/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:40:37 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[单片机]]></category>
		<category><![CDATA[汇编]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1700</guid>
		<description><![CDATA[　　使用PIC18单片机的ADC转换模块对RA0口输入的模拟电压信号进行转换，然后通过PORTD端口输出，而这里与PORTD对应引脚相连接的是8个LED。
<pre lang="asm" line="1">
list P = 18F452 ;指明单片机型号为PIC18F452
#include P18F452.INC ;包含一个头文件，其中定义了一些端口及一些特殊寄存器的地址

	org	0000h  	;PIC上电时从0000h单元开始执行
	goto	main  	;跳转到主程序
	ORG	0008H  	;中断向量入口
	BTFSS	PIR1, ADIF 	; AD转换完成中断
	RETFIE
	GOTO	AD_ISR

	ORG	0030H  	;主程序定位
MAIN
	CLRF	TRISD  	;设定D口方向为输出
	CLRF 	PORTD 	;设定C口方向为输出
	BSF 	TRISA, 0 	; 使用AN0输入
	MOVLW	81H 	;FOSC/32, AN0, 开启
	MOVWF	ADCON0
	MOVLW	0EH 	;左对齐,AN0为模拟输入
	MOVWF	ADCON1 	;VDD &#038; VSS为参考电压
	BCF 	INTCON, TMR0IF
	BCF 	PIR1, ADIF 	;清AD中断标志位
	BSF 	PIE1, ADIE 	;开AD中断
	BSF 	INTCON, PEIE 	;开外围中断
	BSF  	NTCON, GIE 	;开总中断
	MOVLW 	C7H 	;TMR0 8位，分频比为1:256
	MOVWF	T0CON
LOOP
	CALL	DELAY
	BSF  	DCON0, GO 	;开启 A/D转换
	GOTO	LOOP

DELAY

	BTFSS  	NTCON, TMR0IF 	; 等待延时，采样保持
	GOTO  	DELAY
	BCF  	NTCON, TMR0IF
	RETURN

AD_ISR ;AD转换完成时调用的中断服务程序，将转换结果输出
	ORG 	0200H
	MOVFF	ADRESH, PORTD 	;显示转换结果
	BCF 	PIR1, ADIF 	;清AD中断标志位
	RETFIE
END 	;程序结束
</pre>]]></description>
			<content:encoded><![CDATA[<p>　　使用PIC18单片机的ADC转换模块对RA0口输入的模拟电压信号进行转换，然后通过PORTD端口输出，而这里与PORTD对应引脚相连接的是8个LED。</p>

<div class="wp_codebox"><table><tr id="p17003"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre></td><td class="code" id="p1700code3"><pre class="asm" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">list</span> P = 18F452 <span style="color: #666666; font-style: italic;">;指明单片机型号为PIC18F452</span>
#include P18F452<span style="color: #339933;">.</span><span style="color: #00007f; font-weight: bold;">INC</span> <span style="color: #666666; font-style: italic;">;包含一个头文件，其中定义了一些端口及一些特殊寄存器的地址</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">org</span>	<span style="color: #0000ff;">0000h</span>  	<span style="color: #666666; font-style: italic;">;PIC上电时从0000h单元开始执行</span>
	<span style="color: #000000; font-weight: bold;">goto</span>	main  	<span style="color: #666666; font-style: italic;">;跳转到主程序</span>
	<span style="color: #000000; font-weight: bold;">ORG</span>	<span style="color: #0000ff;">0008H</span>  	<span style="color: #666666; font-style: italic;">;中断向量入口</span>
	BTFSS	PIR1<span style="color: #339933;">,</span> ADIF 	<span style="color: #666666; font-style: italic;">; AD转换完成中断</span>
	RETFIE
	<span style="color: #000000; font-weight: bold;">GOTO</span>	AD_ISR
&nbsp;
	<span style="color: #000000; font-weight: bold;">ORG</span>	<span style="color: #0000ff;">0030H</span>  	<span style="color: #666666; font-style: italic;">;主程序定位</span>
MAIN
	CLRF	TRISD  	<span style="color: #666666; font-style: italic;">;设定D口方向为输出</span>
	CLRF 	PORTD 	<span style="color: #666666; font-style: italic;">;设定C口方向为输出</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span> 	TRISA<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span> 	<span style="color: #666666; font-style: italic;">; 使用AN0输入</span>
	MOVLW	<span style="color: #0000ff;">81H</span> 	<span style="color: #666666; font-style: italic;">;FOSC/32, AN0, 开启</span>
	MOVWF	ADCON0
	MOVLW	<span style="color: #0000ff;">0EH</span> 	<span style="color: #666666; font-style: italic;">;左对齐,AN0为模拟输入</span>
	MOVWF	ADCON1 	<span style="color: #666666; font-style: italic;">;VDD &amp; VSS为参考电压</span>
	BCF 	INTCON<span style="color: #339933;">,</span> TMR0IF
	BCF 	PIR1<span style="color: #339933;">,</span> ADIF 	<span style="color: #666666; font-style: italic;">;清AD中断标志位</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span> 	PIE1<span style="color: #339933;">,</span> ADIE 	<span style="color: #666666; font-style: italic;">;开AD中断</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span> 	INTCON<span style="color: #339933;">,</span> PEIE 	<span style="color: #666666; font-style: italic;">;开外围中断</span>
	<span style="color: #00007f; font-weight: bold;">BSF</span>  	NTCON<span style="color: #339933;">,</span> GIE 	<span style="color: #666666; font-style: italic;">;开总中断</span>
	MOVLW 	C7H 	<span style="color: #666666; font-style: italic;">;TMR0 8位，分频比为1:256</span>
	MOVWF	T0CON
<span style="color: #00007f; font-weight: bold;">LOOP</span>
	<span style="color: #00007f; font-weight: bold;">CALL</span>	DELAY
	<span style="color: #00007f; font-weight: bold;">BSF</span>  	DCON0<span style="color: #339933;">,</span> GO 	<span style="color: #666666; font-style: italic;">;开启 A/D转换</span>
	<span style="color: #000000; font-weight: bold;">GOTO</span>	<span style="color: #00007f; font-weight: bold;">LOOP</span>
&nbsp;
DELAY
&nbsp;
	BTFSS  	NTCON<span style="color: #339933;">,</span> TMR0IF 	<span style="color: #666666; font-style: italic;">; 等待延时，采样保持</span>
	<span style="color: #000000; font-weight: bold;">GOTO</span>  	DELAY
	BCF  	NTCON<span style="color: #339933;">,</span> TMR0IF
	RETURN
&nbsp;
AD_ISR <span style="color: #666666; font-style: italic;">;AD转换完成时调用的中断服务程序，将转换结果输出</span>
	<span style="color: #000000; font-weight: bold;">ORG</span> 	<span style="color: #0000ff;">0200H</span>
	MOVFF	ADRESH<span style="color: #339933;">,</span> PORTD 	<span style="color: #666666; font-style: italic;">;显示转换结果</span>
	BCF 	PIR1<span style="color: #339933;">,</span> ADIF 	<span style="color: #666666; font-style: italic;">;清AD中断标志位</span>
	RETFIE
<span style="color: #000000; font-weight: bold;">END</span> 	<span style="color: #666666; font-style: italic;">;程序结束</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2009/11/pic18f52-adc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>海明码校验</title>
		<link>http://www.dutor.net/index.php/2009/11/hamming-code/</link>
		<comments>http://www.dutor.net/index.php/2009/11/hamming-code/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 14:35:58 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[海明码]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1631</guid>
		<description><![CDATA[海明码的目的是能够纠正一位误码。假设信息码共有 n 位，海明码共有 h 位，那么总共的码长为 n + h 位。为能检测出 n + h 位编码中其中一位的错误，海明码必须能够表示至少 n + h + 1 种状态，其中 n + h 种表示 n + h 位编码中有一位错误，另外还需要一种来表示整个编码正确无误。则海明码的长度需要满足下列关系：]]></description>
			<content:encoded><![CDATA[<p>海明码的目的是能够纠正一位误码。假设信息码共有 n 位，海明码共有 h 位，那么总共的码长为 n + h 位。为能检测出 n + h  位编码中其中一位的错误，海明码必须能够表示至少 n + h + 1 种状态，其中 n + h 种表示 n + h  位编码中有一位错误，另外还需要一种来表示整个编码正确无误。则海明码的长度需要满足下列关系：</p>
<p>2 <sup>h</sup> &gt;= n + h + 1</p>
<p>于是根据这个式子我们可以得出以下的关系表：</p>
<div>
<table border="0" cellspacing="1">
<tbody>
<tr>
<td>h</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
</tr>
<tr>
<td>n</td>
<td>1</td>
<td>2~4</td>
<td>5~11</td>
<td>12~26</td>
<td>27~57</td>
<td>58~120</td>
<td>121~247</td>
</tr>
</tbody>
</table>
</div>
<p>以 4 位信息位为例，由上表可以看出需要的海明码长度为 3。</p>
<p>设信息位为 x<sub>4</sub>x<sub>3</sub>x<sub>2</sub>x<sub>1</sub>，添加的 3 位海明码为  a<sub>3</sub>a<sub>2</sub>a<sub>1</sub>，信息码和海明码组合之后得到的码为  H<sub>7</sub>H<sub>6</sub>H<sub>5</sub>H<sub>4</sub>H<sub>3</sub>H<sub>2</sub>H<sub>1</sub>。</p>
<div>
<table border="0" cellspacing="1">
<thead>
<tr>
<td>错误</td>
<td>无</td>
<td>H<sub>1</sub></td>
<td>H<sub>2</sub></td>
<td>H<sub>3</sub></td>
<td>H<sub>4</sub></td>
<td>H<sub>5</sub></td>
<td>H<sub>6</sub></td>
<td>H<sub>7</sub></td>
<td></td>
</tr>
</thead>
<tbody>
<tr>
<td>C<sub>1</sub></td>
<td><sub>0</sub></td>
<td><sub>1</sub></td>
<td><sub>0</sub></td>
<td><sub>1</sub></td>
<td><sub>0</sub></td>
<td><sub>1</sub></td>
<td><sub>0</sub></td>
<td><sub>1</sub></td>
<td>C<sub>1</sub> = H<sub>1</sub> + H<sub>3</sub> + H<sub>5</sub> + H<sub>7</sub> = 0</td>
</tr>
<tr>
<td>C<sub>2</sub></td>
<td><sub>0</sub></td>
<td><sub>0</sub></td>
<td><sub>1</sub></td>
<td><sub>1</sub></td>
<td><sub>0</sub></td>
<td><sub>0</sub></td>
<td><sub>1</sub></td>
<td><sub>1</sub></td>
<td>C<sub>2</sub> = H<sub>2</sub> + H<sub>3</sub> + H<sub>6</sub> + H<sub>7</sub> = 0</td>
</tr>
<tr>
<td>C<sub>3</sub></td>
<td><sub>0</sub></td>
<td><sub>0</sub></td>
<td><sub>0</sub></td>
<td><sub>0</sub></td>
<td><sub>1</sub></td>
<td><sub>1</sub></td>
<td><sub>1</sub></td>
<td><sub>1</sub></td>
<td>C<sub>3</sub> = H<sub>4</sub> + H<sub>5</sub> + H<sub>6</sub> + H<sub>7</sub> = 0</td>
</tr>
</tbody>
</table>
</div>
<p>如上表，在H<sub>1</sub>～H<sub>7</sub>中添加的 3 位海明码使得 C<sub>1</sub>～C<sub>3</sub> 的值为零。其中C<sub>1</sub>～C<sub>3</sub>为校验和。这样当 H<sub>n</sub> 传输出错时，有  (C<sub>3</sub>C<sub>2</sub>C<sub>1</sub>)<sub>2</sub> = n。</p>
<p>令 H<sub>1</sub> = a<sub>1</sub>, H<sub>2</sub> = a<sub>2</sub>, H<sub>4</sub> = a<sub>3</sub>,<br />
则得出</p>
<p>H<sub>7</sub>H<sub>6</sub>H<sub>5</sub>H<sub>4</sub>H<sub>3</sub>H<sub>2</sub>H<sub>1</sub> =  x<sub>4</sub>x<sub>3</sub>x<sub>2</sub>a<sub>3</sub>x<sub>1</sub>a<sub>2</sub>a<sub>1</sub></p>
<p>将上面的关系代入C<sub>1</sub>～C<sub>3</sub>的计算公式，得到<br />
C<sub>1</sub> = H<sub>1</sub> + H<sub>3</sub> + H<sub>5</sub> + H<sub>7</sub> = a<sub>1</sub> + x<sub>1</sub> + x<sub>2</sub> + x<sub>4</sub> = 0<br />
C<sub>2</sub> = H<sub>2</sub> +  H<sub>3</sub> + H<sub>6</sub> + H<sub>7</sub> = a<sub>2</sub> + x<sub>1</sub> +  x<sub>3</sub> + x<sub>4</sub> = 0<br />
C<sub>3</sub> = H<sub>4</sub> +  H<sub>5</sub> + H<sub>6</sub> + H<sub>7</sub> = a<sub>3</sub> + x<sub>2</sub> +  x<sub>3</sub> + x<sub>4</sub> = 0</p>
<p>即<br />
a<sub>1</sub> + x<sub>1</sub> + x<sub>2</sub> + x<sub>4</sub> = 0<br />
a<sub>2</sub> + x<sub>1</sub> + x<sub>3</sub> + x<sub>4</sub> = 0<br />
a<sub>3</sub> + x<sub>2</sub> + x<sub>3</sub> + x<sub>4</sub> = 0</p>
<p>即<br />
a<sub>3</sub> = x<sub>4</sub> + x<sub>3</sub> +  x<sub>2</sub><br />
a<sub>2</sub> = x<sub>4</sub> + x<sub>3</sub> +  x<sub>1</sub><br />
a<sub>1</sub> = x<sub>4</sub> + x<sub>2</sub> +  x<sub>1</sub></p>
<p>为何选择H1、H2、H4作为校验码而不是H1H2H3？<br />
这是因为校验码必须使C3C2C1都为0，而根据公式<br />
C1 = H1 + H3 + H5 + H7 = 0<br />
C2 = H2 + H3 + H6 + H7 = 0<br />
C3 = H4 + H5 + H6 + H7 = 0<br />
要想使得对任何x4×3&#215;2×1都能求出唯一的a3a2a1，<br />
那么只能选择H4H2H1.<br />
假设选择H3=a3，那么H3是等于H7+H5+H1，还是H7+H6+H2呢？<br />
所以只能选择在三个式子中各出现一次的H4H2H1。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2009/11/hamming-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PIC中断汇编</title>
		<link>http://www.dutor.net/index.php/2009/11/pic-int-asm/</link>
		<comments>http://www.dutor.net/index.php/2009/11/pic-int-asm/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 23:24:20 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[单片机]]></category>
		<category><![CDATA[汇编]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1580</guid>
		<description><![CDATA[　　PIC的汇编实在诡异，有点被颠覆的感觉，原来汇编指令还可以这么来设计，原来汇编指令怎么设计都可以。最OOXX的一条指令就一个实现短转移的指令叫做BRA，意为BRAanch，看到这条指令的时候，我都诧异了，奶罩能做什么？哇塞！居然还能跳转！？奶罩居然可以无条件跳转？！Orz……另外PIC指令把单词缩写运用的淋漓尽致，譬如指令BTFSS，是一条位测试加条件跳转指令：BTFSS = Bit + Test + FileRegister + Skip + Set，用法：BTFSS  R1, 0003h, 寄存器R1的第3位为1时跳过<strong>下一条指令</strong>。真是震撼！

　　最后附上PIC18的中断体系硬件结构图，出自陈育斌老师的手笔：]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox"><table><tr id="p15804"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
</pre></td><td class="code" id="p1580code4"><pre class="asm" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">list</span> P = 18F452
#include P18F452<span style="color: #339933;">.</span><span style="color: #00007f; font-weight: bold;">INC</span>
&nbsp;
MOVLF <span style="color: #000000; font-weight: bold;">macro</span> R<span style="color: #339933;">,</span> K
    movlw 	K
    movwf 	R
<span style="color: #000000; font-weight: bold;">endm</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">; 定义了几个寄存器</span>
    R1  	EQU <span style="color: #0000ff;">20H</span>
    R2  	EQU <span style="color: #0000ff;">21H</span>
    R3  	EQU <span style="color: #0000ff;">22H</span>
    R4 		EQU <span style="color: #0000ff;">23H</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">ORG</span> 	<span style="color: #0000ff;">0008H</span>  <span style="color: #666666; font-style: italic;">;中断向量入口</span>
    <span style="color: #000000; font-weight: bold;">GOTO</span> 	SELECT <span style="color: #666666; font-style: italic;">;跳转到中段服务选择子程序</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">org</span>		<span style="color: #0000ff;">0000h</span>  <span style="color: #666666; font-style: italic;">;PIC上电时从0000h单元开始执行</span>
	<span style="color: #000000; font-weight: bold;">goto</span>	main  <span style="color: #666666; font-style: italic;">;跳转到主程序</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">org</span>		<span style="color: #0000ff;">0030h</span>  <span style="color: #666666; font-style: italic;">;主程序定位</span>
main
	clrf	TRISD  <span style="color: #666666; font-style: italic;">;设定D口方向为输出</span>
    CLRF	TRISC <span style="color: #666666; font-style: italic;">;设定C口方向为输出</span>
    CLRF	PORTC <span style="color: #666666; font-style: italic;">;C口置零</span>
    <span style="color: #00007f; font-weight: bold;">BSF</span> 	TRISB<span style="color: #339933;">,</span> INT0 <span style="color: #666666; font-style: italic;">; 设定int0中断源对应引脚为输入</span>
    CLRF 	PORTD
    CLRF	INTCON <span style="color: #666666; font-style: italic;">;先将中断控制寄存器清零</span>
    <span style="color: #00007f; font-weight: bold;">BSF</span> 	INTCON<span style="color: #339933;">,</span> GIE <span style="color: #666666; font-style: italic;">; 允许全局中断</span>
    <span style="color: #00007f; font-weight: bold;">BSF</span>  	INTCON<span style="color: #339933;">,</span> TMR0IE <span style="color: #666666; font-style: italic;">; 允许TMR0定时器中断</span>
    <span style="color: #00007f; font-weight: bold;">BSF</span>		INTCON<span style="color: #339933;">,</span> INT0IE <span style="color: #666666; font-style: italic;">; 允许int0中断</span>
    MOVLF  	T0CON<span style="color: #339933;">,</span> <span style="color: #0000ff;">07H</span> <span style="color: #666666; font-style: italic;">; 设定定时器0的计数模式</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">; 给定时器装入初值，定时器为特殊的双缓冲结构，</span>
    <span style="color: #666666; font-style: italic;">; 注意初值的装入顺序为先高后低</span>
    MOVLF 	TMR0H<span style="color: #339933;">,</span> <span style="color: #0000ff;">0C2H</span>
    MOVLF  	TMR0L<span style="color: #339933;">,</span> <span style="color: #0000ff;">0F7H</span>
    <span style="color: #00007f; font-weight: bold;">BSF</span>  	T0CON<span style="color: #339933;">,</span> TMR0ON <span style="color: #666666; font-style: italic;">; 打开定时器开始计数</span>
&nbsp;
<span style="color: #00007f; font-weight: bold;">LOOP</span> <span style="color: #666666; font-style: italic;">; PIC汇编的标号不需要冒号':'</span>
   	<span style="color: #666666; font-style: italic;">;SLEEP  ; 进入Sleep模式</span>
   	<span style="color: #000000; font-weight: bold;">GOTO</span> <span style="color: #00007f; font-weight: bold;">LOOP</span> <span style="color: #666666; font-style: italic;">; 转啊转</span>
&nbsp;
&nbsp;
SELECT <span style="color: #666666; font-style: italic;">; 中断服务选择程序,这里的测试顺序决定了中断优先级</span>
   	BTFSC   INTCON<span style="color: #339933;">,</span> TMR0IF <span style="color: #666666; font-style: italic;">; 测试定时器溢出位，为0则跳过一条指令</span>
   	<span style="color: #000000; font-weight: bold;">GOTO</span>   	TMR0_ISR <span style="color: #666666; font-style: italic;">; TMR0IF为1时，跳转到定时器服务程序</span>
   	<span style="color: #666666; font-style: italic;">;NOP</span>
   	BTFSS   INTCON<span style="color: #339933;">,</span> INT0IF <span style="color: #666666; font-style: italic;">; 测试外部中断int0的标志位，为0则跳一步</span>
   	RETFIE <span style="color: #666666; font-style: italic;">; 中断返回，会涉及到出栈操作</span>
   	<span style="color: #000000; font-weight: bold;">GOTO</span>   	INT0_ISR <span style="color: #666666; font-style: italic;">; 跳转到int0服务程序</span>
&nbsp;
TMR0_ISR <span style="color: #666666; font-style: italic;">; 定时器服务程序</span>
   	BTFSS   INTCON<span style="color: #339933;">,</span> TMR0IF  <span style="color: #666666; font-style: italic;">; 重新测试溢出位，防止干扰信号触发中断</span>
   	RETFIE
   	BCF  	INTCON<span style="color: #339933;">,</span> TMR0IF  <span style="color: #666666; font-style: italic;">; 清除溢出位</span>
   	<span style="color: #666666; font-style: italic;">;BSF  	INTCON, GIE ; </span>
   	INCF   	PORTD<span style="color: #339933;">,</span> F <span style="color: #666666; font-style: italic;">; D口加1</span>
   	MOVLF 	TMR0H<span style="color: #339933;">,</span> <span style="color: #0000ff;">0C2H</span> <span style="color: #666666; font-style: italic;">; 计数器初值进行重装</span>
   	MOVLF  	TMR0L<span style="color: #339933;">,</span> <span style="color: #0000ff;">0F7H</span>
&nbsp;
   	RETFIE <span style="color: #666666; font-style: italic;">; 中断返回</span>
&nbsp;
&nbsp;
INT0_ISR <span style="color: #666666; font-style: italic;">; 外部中断int0服务程序</span>
   	<span style="color: #666666; font-style: italic;">;CALL 	delay</span>
   	BTFSS   INTCON<span style="color: #339933;">,</span> INT0IF  <span style="color: #666666; font-style: italic;">; 重新测试溢出位，防止干扰信号触发中断</span>
   	RETFIE
   	BCF   	INTCON<span style="color: #339933;">,</span> INT0IF <span style="color: #666666; font-style: italic;">; 清除溢出位</span>
   	<span style="color: #666666; font-style: italic;">; 下面的几行通过更改定时器的分频比来改变定时间隔，每次减半</span>
   	MOVFF  	T0CON<span style="color: #339933;">,</span> R1
   	DECF   	R1<span style="color: #339933;">,</span> W
   	ANDWF   <span style="color: #0000ff;">07H</span>
   	MOVWF   T0CON
   	<span style="color: #666666; font-style: italic;">; D口加1</span>
   	INCF   	PORTD
   	<span style="color: #666666; font-style: italic;">;MOVLF  R1, 0005H</span>
   	<span style="color: #666666; font-style: italic;">;MOVF 	PORTD, W</span>
   	<span style="color: #666666; font-style: italic;">;SUBWF 	R1, W</span>
   	<span style="color: #666666; font-style: italic;">;BNZ 	NEXT</span>
   	<span style="color: #666666; font-style: italic;">;BSF 	PORTC, 0002H</span>
   	<span style="color: #666666; font-style: italic;">;CALL 	DELAY</span>
   	<span style="color: #666666; font-style: italic;">;BCF 	PORTC, 0002H</span>
NEXT
&nbsp;
   	RETFIE <span style="color: #666666; font-style: italic;">; 中断返回</span>
&nbsp;
SPEAKER
  	<span style="color: #00007f; font-weight: bold;">BSF</span>  PORTC<span style="color: #339933;">,</span> <span style="color: #0000ff;">0002H</span>
  	RETURN
DELAY  <span style="color: #666666; font-style: italic;">; 软件延时</span>
	movlw	<span style="color: #0000ff;">0xFF</span>
	movwf 	R1
L3
	movlw	<span style="color: #0000ff;">0x1f</span>
	movwf	R2
L2
	movlw	<span style="color: #0000ff;">0x1f</span>
	movwf	R3
L1
	decf	R3<span style="color: #339933;">,</span> F
	bnz		L1
	decf		R2<span style="color: #339933;">,</span> F
	bnz		L2
	decf		R1<span style="color: #339933;">,</span> F
	bnz		L3
	return
&nbsp;
<span style="color: #000000; font-weight: bold;">end</span></pre></td></tr></table></div>

<p>　　PIC的汇编实在诡异，有点被颠覆的感觉，原来汇编指令还可以这么来设计，原来汇编指令怎么设计都可以。最OOXX的一条指令就一个实现短转移的指令叫做BRA，意为BRAanch，看到这条指令的时候，我都诧异了，奶罩能做什么？哇塞！居然还能跳转！？奶罩居然可以无条件跳转？！Orz……另外PIC指令把单词缩写运用的淋漓尽致，譬如指令BTFSS，是一条位测试加条件跳转指令：BTFSS = Bit + Test + FileRegister + Skip + Set，用法：BTFSS  R1, 0003h, 寄存器R1的第3位为1时跳过<strong>下一条指令</strong>。真是震撼！</p>
<p>　　最后附上PIC18的中断体系硬件结构图，出自陈育斌老师的手笔：<br />
<div class="wp-caption aligncenter" style="width: 630px"><img alt="PIC18中断体系硬件结构示意图" src="http://www.dutor.net/files/images/pic_int.png" title="PIC18中断体系硬件结构示意图" width="620" height="450" /><p class="wp-caption-text">PIC18中断体系硬件结构示意图</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2009/11/pic-int-asm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>双缓冲</title>
		<link>http://www.dutor.net/index.php/2009/10/double-buffer/</link>
		<comments>http://www.dutor.net/index.php/2009/10/double-buffer/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 13:59:51 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[OS基础]]></category>
		<category><![CDATA[单片机]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1469</guid>
		<description><![CDATA[　　图示是PIC 18单片机中定时/计数器的结构图，PIC18是一种8位的单片机，但它的定时/计数器(的寄存器)却是16位的，所以为其装初值的时候就要分高低字节分别装载。于是问题就来了，由于定时计数器一般是连续工作，需要经常进行<strong>重装</strong>，如果对一个正在工作的定时计数器进行<strong>重装</strong>的话，就会产生高低字节不同步的状态，这是一种潜在的错误，尽管这种错误发生的概率很小。为了防止这种错误的发生，PIC单片机设计者采用了上图所示的双缓存结构。其中，TMR0H'和TMR0L组成了一个真正的定时计数器，而TMR0H是一个临时寄存器只有TMR0L的写信号有效时它才能被装入TMR0H'。当需要重装定时器时，首先应该将16位定时/计数的初值的高8位装入TMR0H临时寄存器，然后在向TMR0L写入低8位时由于TMR0L写信号有效，TMR0H也被同步地装入TMR0H'。这样，定时计算器就可以正确的工作，这就是硬件的双缓冲。]]></description>
			<content:encoded><![CDATA[<p>　　双缓冲，顾名思义，就是二级缓冲。缓冲是一块内存或者一个/一组寄存器，一般位于接口之中，接口是指硬件或者软件间的一种连接。接口可以协调通信双方的数据交换，比如并行/串行数据的转换，模拟/数据信号的转换，高速/低速设备间的匹配等。那么双缓冲又是什么呢？</p>
<p>　　一种双缓冲是硬件上的，是一种严格意义上的双缓冲。下面就是一个双缓冲结构的例子：<br />
<div class="wp-caption aligncenter" style="width: 359px"><img alt="PIC定时器中的双缓冲结构" src="http://www.dutor.net/files/images/db_buf.png" title="PIC定时器中的双缓冲结构" width="349" height="406" /><p class="wp-caption-text">PIC定时器中的双缓冲结构</p></div><br />
　　图示是PIC 18单片机中定时/计数器的结构图，PIC18是一种8位的单片机，但它的定时/计数器(的寄存器)却是16位的，所以为其装初值的时候就要分高低字节分别装载。于是问题就来了，由于定时计数器一般是连续工作，需要经常进行<strong>重装</strong>，如果对一个正在工作的定时计数器进行<strong>重装</strong>的话，就会产生高低字节不同步的状态，这是一种潜在的错误，尽管这种错误发生的概率很小。为了防止这种错误的发生，PIC单片机设计者采用了上图所示的双缓存结构。其中，TMR0H&#8217;和TMR0L组成了一个真正的定时计数器，而TMR0H是一个临时寄存器只有TMR0L的写信号有效时它才能被装入TMR0H&#8217;。当需要重装定时器时，首先应该将16位定时/计数的初值的高8位装入TMR0H临时寄存器，然后在向TMR0L写入低8位时由于TMR0L写信号有效，TMR0H也被同步地装入TMR0H&#8217;。这样，定时计算器就可以正确的工作，这就是硬件的双缓冲。</p>
<p>　　接触到&#8221;软件&#8221;的或者说逻辑的双缓冲，是在Chris写一个3D魔方的时候。最初的魔方在转动时画面会发生闪烁，后来采用的双缓存消除了闪烁。画面闪烁是因为程序是边计算图像的&#8221;桢&#8221;(输入法无此字)数据，边向显示器(显存)写出桢数据所造成的延迟感。解决方法就是，先将计算所得数据存入内存，得到一个完整桢后再&#8221;一次性&#8221;地写入显存。这也是一种双缓存，也是一种同步，但不是严格意义上的同步。另外，一个更好的方法就是采用利用多线程，创建一个可容纳多个桢的缓冲池作为共享，创建一个线程来计算桢数据并添加到缓冲池，创建另外一个线程从缓冲池中取出桢并写入显存。当然，正两个线程需要一定的同步机制来协调工作。要是再创建一个线程，痴痴地等待着Chris同学的鼠标就perfect了！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2009/10/double-buffer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>找坏点</title>
		<link>http://www.dutor.net/index.php/2009/10/break-dot/</link>
		<comments>http://www.dutor.net/index.php/2009/10/break-dot/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 14:34:39 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[动动脑筋]]></category>
		<category><![CDATA[囧Orz]]></category>
		<category><![CDATA[图片]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1408</guid>
		<description><![CDATA[　　下面的图片是一个LED显示屏，显示的这个等式明显是错误的，原因是某个显示屏的像点坏了，你能找出来吗？我找了10分钟，最终还是没看出来。
<img alt="break dot" src="http://www.dutor.net/files/images/break_dot.png" title="break dot" width="600" height="154" />
　　答案其实并不简单……坏点……并不都是该亮的没亮，还有可能是不该亮的却亮了……]]></description>
			<content:encoded><![CDATA[<p>　　下面的图片是一个LED显示屏，显示的这个等式明显是错误的，原因是某个显示屏的像点坏了，你能找出来吗？我找了10分钟，最终还是没看出来。<br />
<div class="wp-caption aligncenter" style="width: 610px"><img alt="break dot" src="http://www.dutor.net/files/images/break_dot.png" title="break dot" width="600" height="154" /><p class="wp-caption-text">break dot</p></div><br />
　　答案其实并不简单……坏点……并不都是该亮的没亮，还有可能是不该亮的却亮了……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2009/10/break-dot/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>发几张美图</title>
		<link>http://www.dutor.net/index.php/2009/10/beach-road/</link>
		<comments>http://www.dutor.net/index.php/2009/10/beach-road/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 22:54:08 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[图片]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1406</guid>
		<description><![CDATA[<img alt="sunset" src="http://www.dutor.net/files/images/6.jpg" title="sunset" width="614" height="461" />]]></description>
			<content:encoded><![CDATA[<p>国庆前夕，兴致高昂，重走滨海路，从星海广场，途径金沙滩、银沙滩、付家庄、燕窝岭、北大桥、鸟语林，直至老虎滩，然后打车返校。<br />
<div class="wp-caption aligncenter" style="width: 624px"><img alt="ivan" src="http://www.dutor.net/files/images/1.jpg" title="ivan" width="614" height="461" /><p class="wp-caption-text">ivan</p></div></p>
<div class="wp-caption aligncenter" style="width: 624px"><img alt="ivan" src="http://www.dutor.net/files/images/2.jpg" title="ivan" width="614" height="461" /><p class="wp-caption-text">ivan</p></div>
<div class="wp-caption aligncenter" style="width: 624px"><img alt="这棵树上有个马蜂窝……" src="http://www.dutor.net/files/images/3.jpg" title="ivan" width="614" height="819" /><p class="wp-caption-text">这棵树上有个马蜂窝……</p></div>
<div class="wp-caption aligncenter" style="width: 624px"><img alt="ivan" src="http://www.dutor.net/files/images/4.jpg" title="ivan" width="614" height="461" /><p class="wp-caption-text">ivan</p></div>
<div class="wp-caption aligncenter" style="width: 624px"><img alt="来一点高斯模糊" src="http://www.dutor.net/files/images/5.jpg" title="来一点高斯模糊" width="614" height="461" /><p class="wp-caption-text">来一点高斯模糊</p></div>
<div class="wp-caption aligncenter" style="width: 624px"><img alt="sunset" src="http://www.dutor.net/files/images/6.jpg" title="sunset" width="614" height="461" /><p class="wp-caption-text">sunset</p></div>
<p>总结一下，拍照时不能逆光，如果被拍的人很黑的话尤其如此，sigh……<br />
网站停了两天，原因很简单，没有备案，对工信部那帮兔崽子们无话可说，脑有病</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2009/10/beach-road/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>虚拟内存管理总结</title>
		<link>http://www.dutor.net/index.php/2009/09/summary-vm/</link>
		<comments>http://www.dutor.net/index.php/2009/09/summary-vm/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 23:51:57 +0000</pubDate>
		<dc:creator>dutor</dc:creator>
				<category><![CDATA[尚未分类]]></category>
		<category><![CDATA[OS基础]]></category>
		<category><![CDATA[虚拟内存]]></category>

		<guid isPermaLink="false">http://www.dutor.net/?p=1252</guid>
		<description><![CDATA[　　操作系统为每一个进程维护着一个虚拟的地址空间，这个地址空间的大小通常取决于系统的地址线数目，比如在32位系统中，虚拟地址空间的返回就是0x00000000~0xFFFFFFFF，大小共4G。通常操作系统会划分出一部分来专门供内核使用，而不允许用户进程直接访问。Linux内核占用4G中高地址的1G，即0XC0000000~0XFFFFFFFF，windows内核通常占用高地址的2G空间，但也可配置成1G。进程的代码、数据以及共享库等资源终究是要放在物理内存中才能被访问的，操作系统在建立用户进程时，会为其建立各自独立的虚拟地址空间，然后将各自的数据段、代码段、BSS段等映射到这个地址空间，并为其初始化堆、栈等必须的资源。另外，操作系统还将虚拟空间和物理空间都划分成大小相等的页，把进程数据所在虚拟地址空间的各个虚拟页面映射到其真正被加载的物理页面，这种映射是全相联方式的，即任何一个虚页可以被映射到任何一个实页。]]></description>
			<content:encoded><![CDATA[<p>　　操作系统为每一个进程维护着一个虚拟的地址空间，这个地址空间的大小通常取决于系统的地址线数目，比如在32位系统中，虚拟地址空间的返回就是0&#215;00000000~0xFFFFFFFF，大小共4G。通常操作系统会划分出一部分来专门供内核使用，而不允许用户进程直接访问。Linux内核占用4G中高地址的1G，即0XC0000000~0XFFFFFFFF，windows内核通常占用高地址的2G空间，但也可配置成1G。进程的代码、数据以及共享库等资源终究是要放在物理内存中才能被访问的，操作系统在建立用户进程时，会为其建立各自独立的虚拟地址空间，然后将各自的数据段、代码段、BSS段等映射到这个地址空间，并为其初始化堆、栈等必须的资源。另外，操作系统还将虚拟空间和物理空间都划分成大小相等的页，把进程数据所在虚拟地址空间的各个虚拟页面映射到其真正被加载的物理页面，这种映射是全相联方式的，即任何一个虚页可以被映射到任何一个实页。</p>
<p>　　操作系统采用虚拟内存的方式管理存储器有很多好处：</p>
<p>　　<strong>第一，虚拟内存管理可以控制物理内存的访问权限。</strong>物理内存本身是不限制访问的，任何地址都可以读写，而操作系统要求不同的页面具有不同的访问权限，这是利用CPU模式和MMU的内存保护机制实现的。例如，代码段被只读保护起来，防止被错误的指令意外改写，内核地址空间也被保护起来，防止在用户模式下执行错误的指令意外改写内核数据。这样，执行错误指令或恶意代码的破坏能力受到了限制，顶多使当前进程因段错误终止，而不会影响整个系统的稳定性。</p>
<p>　　<strong>第二，虚拟内存管理最主要的作用是让每个进程有独立的地址空间。</strong>所谓<strong>独立</strong>的地址空间是指，不同进程中的同一个VA被MMU映射到不同的PA，并且在某一个进程中访问任何地址都不可能访问到另外一个进程的数据，这样使得任何一个进程由于执行错误指令或恶意代码导致的非法内存访问都不会意外改写其它进程的数据，不会影响其它进程的运行，从而保证整个系统的稳定性。另一方面，每个进程都认为自己独占整个虚拟地址空间，这样链接器和加载器的实现会比较容易，不必考虑各进程的地址范围是否冲突。</p>
<p>　　<strong>第三，方便了共享库的实现。</strong>采用共享库的目的在于节省内存(物理内存)，一些公用模块在内存中可以只保存一份，让各进程共享，而不是各自加载一份，当然，只读的代码段可以共享，可写的数据段就必须各自保留一份了。采用虚拟内存机制后，可以将物理内存中所加载的共享库分别映射到进程各自的地址空间，由于加载地址可能不同，所以共享库必须实现为地址无关码(PIC)。</p>
<p>　　<strong>第三，VA到PA的映射会给分配和释放内存带来方便，物理地址不连续的几块内存可以映射成虚拟地址连续的一块内存。</strong>比如要用malloc分配一块很大的内存空间，虽然有足够多的空闲物理内存，却没有足够大的连续空闲内存，这时就可以分配多个不连续的物理页面而映射到连续的虚拟地址范围。</p>
<p>　　<strong>第四，“增加”了程序可以使用的内存空间。</strong>一个系统如果同时运行着很多进程，为各进程分配的内存之和可能会大于实际可用的物理内存，虚拟内存管理使得这种情况下各进程仍然能够正常运行。因为各进程分配的只不过是虚拟内存的页面，这些页面的数据可以映射到物理页面，也可以临时保存到磁盘上而不占用物理页面。当所访问的页面不在内存中时再将其加载进来，无空闲页面的时候还可能需要采取一定的置换算法将某个页面换出。这种机制的可行性得益于伟大的“局部性原理”。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dutor.net/index.php/2009/09/summary-vm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

