<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10chinesetwfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>LifeTyper</title>
    <link rel="alternate" type="text/html" href="http://www.lifetyper.com/" />
    
    <id>tag:www.lifetyper.com,2010-09-22://2</id>
    <updated>2012-02-02T04:12:41Z</updated>
    <subtitle>到底是国家承载着幻觉，还是幻觉成就了国家？</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.03</generator>

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/lifetyper" /><feedburner:info uri="lifetyper" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>lifetyper</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Flifetyper" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/lifetyper" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Flifetyper" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Flifetyper" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.zhuaxia.com/add_channel.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Flifetyper" src="http://www.lifetyper.com/mt-static/images/zhuaxia.gif">Subscribe with Some Cool Service</feedburner:feedFlare><entry>
    <title>Retarget Printf To USART In STM32 Develop Using GCC Toolchain</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/FhFRehd-DFo/000022.html" />
    <id>tag:www.lifetyper.com,2011://2.22</id>

    <published>2011-12-17T02:58:00Z</published>
    <updated>2012-02-02T04:12:41Z</updated>

    <summary><![CDATA[Compiler:Yagarto or CodeSourcery Lite(Not tested but should work)  Linker&amp;Startup File: Using the default linker &amp; startup file provided in the STM32 StdPeriph Library for TrueStudio.Any version should do but I used V3.5.  Syscalls.c: implement the basic needed system calls.Define the usart port you want to retarget the printf function by modify below section or setup a compiler define  #ifndef STDOUT_USART
#define STDOUT_USART 2
#endif

#ifndef STDERR_USART
#define STDERR_USART 2
#endif

#ifndef STDIN_USART
#define STDIN_USART 2
#endif

After adding this file to your project you will be able to call printf which is implemented by new lib by #include&nbsp; "stdio.h"in your code.

As we all know the printf implemented in new lib will take a huge amount of RAM.This even lead to a stack overflow in STM32F103RB with only 20K RAM.

That's why we need:

printf.c:this file provide a private implement of printf beside the built in printf of new lib.Which require much less RAM in the while.

Is that all?

Surely not!

/***************************************************************/

&nbsp;

Issue Description

You will find a very weird phenomenon:

When you call printf with conversion specifiers like this: 

printf("Test number is:%d\r\n",TestNumber);

the printf provided above will be called.

while using printf directly with a string like:

printf("hello world\r\n");

the built in printf will be called again.

/***************************************************************/

A simple workaround is rename printf function in printf.c&nbsp; to any other name you like such as uprintf. Then just use uprintf instead of printf.

What a coward!You can't even face the problem.

After reading the GCC compiler guide, I found a simple parameter which fix this problem.

-fno-builtin

By adding this parameter to your IDE's compile command, the built in function will be disabled and only printf in printf.c will be called.

For SlickEdit user,below is the full command for compile:

arm-none-eabi-gcc -c -fdata-sections -ffunction-sections -fno-builtin -O0 -mcpu=cortex-m3 -mthumb -g -gdwarf-2 -Wall %i %defd -o "%bd%n.o" "%f"

Surely you can fine tune the optimize level or the debug infomation format by yourself.]]></summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="纯电工手黑" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;&lt;strong&gt;Compiler&lt;/strong&gt;:&lt;a href="http://www.yagarto.de/"&gt;Yagarto&lt;/a&gt; or CodeSourcery Lite(Not tested but should work)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Linker&amp;amp;Startup File&lt;/strong&gt;: Using the default linker &amp;amp; startup file provided in the STM32 StdPeriph Library for TrueStudio.Any version should do but I used V3.5.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lifetyper.com/upload/code/Syscalls.c"&gt;&lt;strong&gt;Syscalls.c&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; implement the basic needed system calls.Define the usart port you want to retarget the printf function by modify below section or setup a compiler define&lt;/p&gt;  &lt;pre&gt;#ifndef STDOUT_USART
#define STDOUT_USART 2
#endif

#ifndef STDERR_USART
#define STDERR_USART 2
#endif

#ifndef STDIN_USART
#define STDIN_USART 2
#endif&lt;/pre&gt;

&lt;p&gt;After adding this file to your project you will be able to call printf which is implemented by new lib by #include&amp;nbsp; "stdio.h"in your code.&lt;/p&gt;

&lt;p&gt;As we all know the printf implemented in new lib will take a huge amount of RAM.This even lead to a stack overflow in STM32F103RB with only 20K RAM.&lt;/p&gt;

&lt;p&gt;That's why we need:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.lifetyper.com/upload/code/printf.c"&gt;&lt;strong&gt;printf.c&lt;/strong&gt;&lt;/a&gt;:this file provide a private implement of printf beside the built in printf of new lib.Which require much less RAM in the while.&lt;/p&gt;

&lt;p&gt;Is that all?&lt;/p&gt;

&lt;p&gt;Surely not!&lt;/p&gt;

&lt;p&gt;/***************************************************************/&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Issue Description&lt;/p&gt;

&lt;p&gt;You will find a very weird phenomenon:&lt;/p&gt;

&lt;p&gt;When you call printf with conversion specifiers like this: &lt;/p&gt;

&lt;p&gt;printf("Test number is:%d\r\n",TestNumber);&lt;/p&gt;

&lt;p&gt;the printf provided above will be called.&lt;/p&gt;

&lt;p&gt;while using printf directly with a string like:&lt;/p&gt;

&lt;p&gt;printf("hello world\r\n");&lt;/p&gt;

&lt;p&gt;the built in printf will be called again.&lt;/p&gt;

&lt;p&gt;/***************************************************************/&lt;/p&gt;

&lt;p&gt;A simple workaround is rename printf function in printf.c&amp;nbsp; to any other name you like such as uprintf. Then just use uprintf instead of printf.&lt;/p&gt;

&lt;p&gt;What a coward!You can't even face the problem.&lt;/p&gt;

&lt;p&gt;After reading the GCC compiler guide, I found a simple parameter which fix this problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-fno-builtin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By adding this parameter to your IDE's compile command, the built in function will be disabled and only printf in printf.c will be called.&lt;/p&gt;

&lt;p&gt;For SlickEdit user,below is the full command for compile:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;arm-none-eabi-gcc -c -fdata-sections -ffunction-sections -fno-builtin -O0 -mcpu=cortex-m3 -mthumb -g -gdwarf-2 -Wall %i %defd -o "%bd%n.o" "%f"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Surely you can fine tune the optimize level or the debug infomation format by yourself.&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/FhFRehd-DFo" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000022.html</feedburner:origLink></entry>

<entry>
    <title>向东北的某位教师致以最崇高的敬意</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/t8V4Izd2q-U/000021.html" />
    <id>tag:www.lifetyper.com,2011://2.21</id>

    <published>2011-10-22T14:30:00Z</published>
    <updated>2011-10-22T15:07:43Z</updated>

    <summary><![CDATA[刚才玩三国杀时，无意中碰到某位东北兄弟，一席言谈之中，让我对他的老师，尤其是思想政治老师的水平感到极度佩服。什么叫给我三千城管还你世界和平，给我三千他老师，宇宙都是我的。  怕忘记了，赶紧将此兄弟言论归结如下，本文无任何对东北人的偏见，读书时东北同学也不少，这样的极品绝对是个案。  1、中国人民老幸福了！！！！！！(我就不该来摧毁你的世界…)  2、大兴安岭的房子一套才3万，一平米才500(我去，移民东北有啥条件没？)。谁让你们活在大城市，买不起房活该。(这个批判很深刻，某种意义上说，这条我无力反驳，继续求办理东北移民的中介。)  3、问问你爷爷奶奶，过去那日子有多苦（擦，你不知道我奶奶家在赣南是地主吗，你想让我激起对党国更大的仇恨？不可能!我那么爱党爱国爱她妹。）  对于第三条，我反驳道，你问问你爸妈59年～61年是怎么过的，他说  4、才两年。(不管从数学上还是内心的坚强度上，我都很佩服你)  5、你看看朝鲜人，那个惨啊，至少我比他们幸福(这个我也没啥说的，按理说你消息不闭塞啊，朝鲜那边有具体多惨我都不知道，不过你都强大到和朝鲜人比幸福了，我还能说啥？！)  6、中国的富人比美国的富人都多（我问他他是不是富人，富人有钱和他有什么关系时，他说=&gt;)，中国人口多，就是这样(这个回答有外交部的水准啊)  7、你别以为美国没穷人，美国政府把美国穷人都送到国外去了你不知道吗(党国能把我这穷人也送出去不？我自己包邮！)  同局的刚好有一个要移民加拿大的，于是他说：  8、就快打仗了，你还移民？美国都开始从伊拉克撤兵了，你还移民，不怕打仗啊。。。(他妈的，我十几年不看电视竟然错过了这么重要的新闻。。。)  9、老邓96年军演差点就把台湾收回来了，你知道不！(知道，幸亏没有！)  10、台湾好个屁啊，你看看台湾，连武器都得跟别人买，美军退伍的东西他们都买(党国先进多了，买的都是SU-27瓦良格之列的高档货，瓦良格的造船钢材东北现在能造了吗？)  我让他上twitter看看，或者facebook、youtube啥的，他说  11、我在百度看到简介了，你们看美国的网站当然觉得美国好(我看了7年中国的网站为啥还想跑？)  我说你别看简介，进去看看，他说  12、擦，啥破网站，打不开(方校长激动得飞过来跟他握手合影，在此我再次感谢段校长没有让西电参与GFW这个项目,什么北大、清华、北邮、哈工大的名声都是被自己毁掉的)。  在一堆人的反驳之下，他最后说了一句  13、你们这些人啊。。。(擦，太毒、太德味了！)    纯粹的对人不对群体，不是我怕惹东北人，哥在西电活着都没怕过，还怕啥。我的同学那么多东北的，我知道傻逼的比例到底有多低，碰上了这也是哥的运气。      &#160;  ]]></summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="帝国的黄昏" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;刚才玩三国杀时，无意中碰到某位东北兄弟，一席言谈之中，让我对他的老师，尤其是思想政治老师的水平感到极度佩服。什么叫给我三千城管还你世界和平，给我三千他老师，宇宙都是我的。&lt;/p&gt;  &lt;p&gt;怕忘记了，赶紧将此兄弟言论归结如下，本文无任何对东北人的偏见，读书时东北同学也不少，这样的极品绝对是个案。&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;1、中国人民老幸福了！！！！！！(我就不该来摧毁你的世界…)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;2、大兴安岭的房子一套才3万，一平米才500(我去，移民东北有啥条件没？)。谁让你们活在大城市，买不起房活该。(这个批判很深刻，某种意义上说，这条我无力反驳，继续求办理东北移民的中介。)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;3、问问你爷爷奶奶，过去那日子有多苦（擦，你不知道我奶奶家在赣南是地主吗，你想让我激起对党国更大的仇恨？不可能!我那么爱党爱国爱她妹。）&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;对于第三条，我反驳道，你问问你爸妈59年～61年是怎么过的，他说&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="黑体"&gt;4、才两年。(不管从数学上还是内心的坚强度上，我都很佩服你)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;5、你看看朝鲜人，那个惨啊，至少我比他们幸福(这个我也没啥说的，按理说你消息不闭塞啊，朝鲜那边有具体多惨我都不知道，不过你都强大到和朝鲜人比幸福了，我还能说啥？！)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;6、中国的富人比美国的富人都多（我问他他是不是富人，富人有钱和他有什么关系时，他说=&amp;gt;)，中国人口多，就是这样(这个回答有外交部的水准啊)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;7、你别以为美国没穷人，美国政府把美国穷人都送到国外去了你不知道吗(党国能把我这穷人也送出去不？我自己包邮！)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;同局的刚好有一个要移民加拿大的，于是他说：&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;8、就快打仗了，你还移民？美国都开始从伊拉克撤兵了，你还移民，不怕打仗啊。。。(他妈的，我十几年不看电视竟然错过了这么重要的新闻。。。)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;9、老邓96年军演差点就把台湾收回来了，你知道不！(知道，幸亏没有！)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;10、台湾好个屁啊，你看看台湾，连武器都得跟别人买，美军退伍的东西他们都买(党国先进多了，买的都是SU-27瓦良格之列的高档货，瓦良格的造船钢材东北现在能造了吗？)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;我让他上twitter看看，或者facebook、youtube啥的，他说&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="黑体"&gt;11、我在百度看到简介了，你们看美国的网站当然觉得美国好(我看了7年中国的网站为啥还想跑？)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;我说你别看简介，进去看看，他说&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4" face="黑体"&gt;&lt;strong&gt;12、擦，啥破网站，打不开(方校长激动得飞过来跟他握手合影，在此我再次感谢段校长没有让西电参与GFW这个项目,什么&lt;a href="http://photo.renren.com/photo/77099103/photo-4853473787?curpage=0&amp;amp;t=&amp;amp;albumpage="&gt;北大、清华、北邮、哈工大&lt;/a&gt;的名声都是被自己毁掉的)。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="黑体"&gt;在一堆人的反驳之下，他最后说了一句&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="黑体"&gt;13、你们这些人啊。。。(擦，太毒、太德味了！)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="黑体"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;纯粹的对人不对群体，不是我怕惹东北人，哥在西电活着都没怕过，还怕啥。我的同学那么多东北的，我知道傻逼的比例到底有多低，碰上了这也是哥的运气。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="黑体"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="黑体"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="黑体"&gt;&amp;#160;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4" face="黑体"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/t8V4Izd2q-U" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000021.html</feedburner:origLink></entry>

<entry>
    <title>傻逼种了棵菩提树</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/RL-c7BX-9so/000018.html" />
    <id>tag:www.lifetyper.com,2011://2.18</id>

    <published>2011-07-26T15:14:00Z</published>
    <updated>2011-07-26T15:16:47Z</updated>

    <summary>什么是佛？想明白了便是佛。  像唐三藏那样傻逼兮兮的跑几万里去讨要基本经书就能成佛了？释迦摩尼是看完全套大英百科全书成佛的吗？不是，丫就在菩提树下忽然被榴莲砸开窍了，也就是所谓的顿悟了，于是就成佛了。所以，第一个成佛的人都没看过佛经，你们看个屁啊。  如果一定要说佛经，嗯，我们来分析一下本系列的中心思想。  佛无本相，从来没有界定任何一种成佛的方式，可以是救了地球-三体联合星系，也可以是救了一只臭虫，也可以是杀了一个人。  戒痴、嗔，哥从来就不知道嗔是啥意思，不要执著于任何事物与人。  好了，下面是个人总结。  人最后是出世还是入世，其实并没有什么是否胸怀天下这样的差别，出世是为了满足自己的心理需要，入世也是一样，本质都是自私的，所幸的是他们都很坦然的接受这种自私。他们都明白了人生的真相无非就三个字：  爽就好。  施舍是因为内心无法忍受别人的痛苦，吝啬是因为内心无法忍受自己财物的割舍，说到底不都是为了避免自己内心的痛苦？只是恰好有了一个这么奇怪的社会价值观要褒奖一个，批判另一个。这两种人都是很好的，直接的，不虚伪的人。  为了名声去施舍的呢？当然也有，但明明就是为了名声去施舍，硬要说自己是菩萨心肠见不得别人受苦，这便是虚伪。  佛必定是胸怀坦荡之人，连自己都要骗的人连人都做不好。当我讨厌一个人骗我时，我只说一句话：你说的这些，你自己信吗？  不欺骗自己，不伤害别人，不逼自己做违心的事，如果厌恶邪恶就绝不袖手旁观，这是什么？这他妈不是佛，这是中国的希望。  哥不是佛，哥也还没资格做中国的希望，不然我周围的共产党早死光了(反正我外公我爷爷都死了，说这话也谈不上不孝)，别以为长得漂亮就会对你们爱屋及乌了。你们这些是共匪的，想当共匪的，都他妈及早退党。  为了一己私利出卖理想、欺压同胞，别说你没掀翻过小贩的推车你就不是坏人。邪恶要胜利，唯一的条件就是有良知的人袖手旁观。更何况你们还同流合污。  左眼皮跳了一个月了，反正以我的经验一般不会发财，往往都是破财。想想这个月的作息，科学的解释应该还是睡眠不足。  也许你死了我才知道你到底意味着什么，只怕那时我绝无法承受。  冰球，魔法师有特殊技能吗？哈哈。</summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="帝国的黄昏" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;什么是佛？想明白了便是佛。&lt;/p&gt;  &lt;p&gt;像唐三藏那样傻逼兮兮的跑几万里去讨要基本经书就能成佛了？释迦摩尼是看完全套大英百科全书成佛的吗？不是，丫就在菩提树下忽然被榴莲砸开窍了，也就是所谓的顿悟了，于是就成佛了。所以，第一个成佛的人都没看过佛经，你们看个屁啊。&lt;/p&gt;  &lt;p&gt;如果一定要说佛经，嗯，我们来分析一下本系列的中心思想。&lt;/p&gt;  &lt;p&gt;佛无本相，从来没有界定任何一种成佛的方式，可以是救了地球-三体联合星系，也可以是救了一只臭虫，也可以是杀了一个人。&lt;/p&gt;  &lt;p&gt;戒痴、嗔，哥从来就不知道嗔是啥意思，不要执著于任何事物与人。&lt;/p&gt;  &lt;p&gt;好了，下面是个人总结。&lt;/p&gt;  &lt;p&gt;人最后是出世还是入世，其实并没有什么是否胸怀天下这样的差别，出世是为了满足自己的心理需要，入世也是一样，本质都是自私的，所幸的是他们都很坦然的接受这种自私。他们都明白了人生的真相无非就三个字：&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="5"&gt;爽就好。&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;施舍是因为内心无法忍受别人的痛苦，吝啬是因为内心无法忍受自己财物的割舍，说到底不都是为了避免自己内心的痛苦？只是恰好有了一个这么奇怪的社会价值观要褒奖一个，批判另一个。这两种人都是很好的，直接的，不虚伪的人。&lt;/p&gt;  &lt;p&gt;为了名声去施舍的呢？当然也有，但明明就是为了名声去施舍，硬要说自己是菩萨心肠见不得别人受苦，这便是虚伪。&lt;/p&gt;  &lt;p&gt;佛必定是胸怀坦荡之人，连自己都要骗的人连人都做不好。当我讨厌一个人骗我时，我只说一句话：你说的这些，你自己信吗？&lt;/p&gt;  &lt;p&gt;不欺骗自己，不伤害别人，不逼自己做违心的事，如果厌恶邪恶就绝不袖手旁观，这是什么？这他妈不是佛，这是中国的希望。&lt;/p&gt;  &lt;p&gt;哥不是佛，哥也还没资格做中国的希望，不然我周围的共产党早死光了(反正我外公我爷爷都死了，说这话也谈不上不孝)，别以为长得漂亮就会对你们爱屋及乌了。你们这些是共匪的，想当共匪的，都他妈及早退党。&lt;/p&gt;  &lt;p&gt;为了一己私利出卖理想、欺压同胞，别说你没掀翻过小贩的推车你就不是坏人。邪恶要胜利，唯一的条件就是有良知的人袖手旁观。更何况你们还同流合污。&lt;/p&gt;  &lt;p&gt;左眼皮跳了一个月了，反正以我的经验一般不会发财，往往都是破财。想想这个月的作息，科学的解释应该还是睡眠不足。&lt;/p&gt;  &lt;p&gt;也许你死了我才知道你到底意味着什么，只怕那时我绝无法承受。&lt;/p&gt;  &lt;p&gt;冰球，魔法师有特殊技能吗？哈哈。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/RL-c7BX-9so" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000018.html</feedburner:origLink></entry>

<entry>
    <title>我为什么拒绝时光倒流？</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/UkCOE86Y394/000017.html" />
    <id>tag:www.lifetyper.com,2011://2.17</id>

    <published>2011-07-07T12:28:00Z</published>
    <updated>2011-07-07T12:29:01Z</updated>

    <summary>虽然现在的一切并不完美，而时光倒流可能可以让这一切都完美，但我更怕连这不完美的一切都失去。</summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="生活在别处" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;虽然现在的一切并不完美，而时光倒流可能可以让这一切都完美，但我更怕连这不完美的一切都失去。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/UkCOE86Y394" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000017.html</feedburner:origLink></entry>

<entry>
    <title>关于STM32的AFIO</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/Zyx-xuUQ4AA/000016.html" />
    <id>tag:www.lifetyper.com,2011://2.16</id>

    <published>2011-07-03T01:48:00Z</published>
    <updated>2011-07-03T01:52:08Z</updated>

    <summary>也许你以为IO和AFIO是很简单的，事实上有几个误区可能很多人都没注意过，当你只用现成的开发板来学习的时候，别人已经帮你做好了资源分配，所有的外设功能学习都是照着别人给你的例程去做的，这才没让你觉得奇怪。  先问自己一个问题：STM32中，USART2和TIM2是共用相同IO的，你如何决定这几个IO到底是做USART2还是做TIM2呢？如果你要同时使用USART2和TIM2，该怎么办？  1、不是说使用了IO的复用功能就一定要启动RCC_APB2Periph_AFIO的Clock的,参考下图    只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中断(EXTI)控制寄存器才需要开启AFIO的时钟，STM32参考手册从来没说过使用IO的复用功能就一定要开启AFIO时钟，这是个误区。  例如下面的，最常用的USART1，如果你的板子上，默认用的就是PA9和PA10这两个IO作为USART1的TX和TX，那么也就是没有重映射，No Remap，这种情况下根本不需要开启AFIO时钟，只要开启USART1的外设时钟就行了。这个实验很简单，自己试试就知道了。    2、从上面的图你可以看到，原来USART1是可以放在PB6和PB7上面的，只不过几乎所有的原理图封装中都不会在PB6和PB7的复用功能上标出它可以当USART1用，毕竟这种重映射的情况太多，几乎所有外设都可以重映射，每个都标出来会非常混乱。  STM32中，USART2的CTS、RTS、TX、RX和TIM2的CH1~CH4都在PA0～PA3上面，具体要如何选择这两个功能呢？  如果要使用USART2，就开始USART2的外设时钟，如果要使用TIM2，就开启TIM2的外设时钟，如果你同时开启，我也不知道会怎么样，你可以自己试试，我觉得应该是两个都不能用。如果你一定要在PA0~PA3上使用这两个功能，只能是时分复用。  正确的同时使用USART2和TIM2，应该是使用上面提到的AFIO_Remap寄存器，将其中的一个重映射到其他IO上去，当然这样其他IO的本身的复用功能你就不能开启了。      回到前面的问题，如果你不做Remap，你根本不可能同时在PA0~PA3上同时使用这两个外设，现在你的方案有两种：  一、保留USART2在PA口上，将TIM2完全重映射(Full Remap)到其他IO上，或者，如果你不用RTS和CTS的硬件流控制，PA0(CTS)和PA1(RTS)上对应的CH1和CH2是可以不用重映射的，只需要将Bit9：8改成10，也就是将CH3和CH4部分重映射到PB10和PB11上去，而CH1和CH2继续保留在PA0和PA1上。但这种情况下，PB10和PB11上的I2C2和USART3就不能用了。  二、保留TIM2在PA口，将USART2重映射到PD口上，很明显，当TIM2完全不重映射时，USART2必须的信号线只有Clock不受影响，这种情况下也没有部分映射可言了，必须将USART2完全重映射到PD3～PD7上，同样的，这种情况下FSMC就不能用了。  具体怎么选择就看你自己了，一般情况下最简单的就是你换个定时器好了，反正定时器那么多，如果非要同时用USART2和TIM2，大部分人可能会选择前一种方案，毕竟FSMC被干掉是非常麻烦的一件事。</summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="纯电工手黑" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;也许你以为IO和AFIO是很简单的，事实上有几个误区可能很多人都没注意过，当你只用现成的开发板来学习的时候，别人已经帮你做好了资源分配，所有的外设功能学习都是照着别人给你的例程去做的，这才没让你觉得奇怪。&lt;/p&gt;  &lt;p&gt;先问自己一个问题：STM32中，USART2和TIM2是共用相同IO的，你如何决定这几个IO到底是做USART2还是做TIM2呢？如果你要同时使用USART2和TIM2，该怎么办？&lt;/p&gt;  &lt;p&gt;1、不是说使用了IO的复用功能就一定要启动RCC_APB2Periph_AFIO的Clock的,参考下图&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lifetyper.com/upload/blogpic/STM32AFIO_830A/When_AFIO_Clock_Is_Needed.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="When_AFIO_Clock_Is_Needed" border="0" alt="When_AFIO_Clock_Is_Needed" src="http://www.lifetyper.com/upload/blogpic/STM32AFIO_830A/When_AFIO_Clock_Is_Needed_thumb.png" width="558" height="172" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中断(EXTI)控制寄存器才需要开启AFIO的时钟，STM32参考手册从来没说过使用IO的复用功能就一定要开启AFIO时钟，这是个误区。&lt;/p&gt;  &lt;p&gt;例如下面的，最常用的USART1，如果你的板子上，默认用的就是PA9和PA10这两个IO作为USART1的TX和TX，那么也就是没有重映射，No Remap，这种情况下根本不需要开启AFIO时钟，只要开启USART1的外设时钟就行了。这个实验很简单，自己试试就知道了。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lifetyper.com/upload/blogpic/STM32AFIO_830A/UART1_No_Remap.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UART1_No_Remap" border="0" alt="UART1_No_Remap" src="http://www.lifetyper.com/upload/blogpic/STM32AFIO_830A/UART1_No_Remap_thumb.png" width="544" height="90" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2、从上面的图你可以看到，原来USART1是可以放在PB6和PB7上面的，只不过几乎所有的原理图封装中都不会在PB6和PB7的复用功能上标出它可以当USART1用，毕竟这种重映射的情况太多，几乎所有外设都可以重映射，每个都标出来会非常混乱。&lt;/p&gt;  &lt;p&gt;STM32中，USART2的CTS、RTS、TX、RX和TIM2的CH1~CH4都在PA0～PA3上面，具体要如何选择这两个功能呢？&lt;/p&gt;  &lt;p&gt;如果要使用USART2，就开始USART2的外设时钟，如果要使用TIM2，就开启TIM2的外设时钟，如果你同时开启，我也不知道会怎么样，你可以自己试试，我觉得应该是两个都不能用。如果你一定要在PA0~PA3上使用这两个功能，只能是时分复用。&lt;/p&gt;  &lt;p&gt;正确的同时使用USART2和TIM2，应该是使用上面提到的AFIO_Remap寄存器，将其中的一个重映射到其他IO上去，当然这样其他IO的本身的复用功能你就不能开启了。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lifetyper.com/upload/blogpic/STM32AFIO_830A/USART2_Remap.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="USART2_Remap" border="0" alt="USART2_Remap" src="http://www.lifetyper.com/upload/blogpic/STM32AFIO_830A/USART2_Remap_thumb.png" width="525" height="88" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lifetyper.com/upload/blogpic/STM32AFIO_830A/TIM2_Remap.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TIM2_Remap" border="0" alt="TIM2_Remap" src="http://www.lifetyper.com/upload/blogpic/STM32AFIO_830A/TIM2_Remap_thumb.png" width="520" height="125" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;回到前面的问题，如果你不做Remap，你根本不可能同时在PA0~PA3上&lt;strong&gt;同时&lt;/strong&gt;使用这两个外设，现在你的方案有两种：&lt;/p&gt;  &lt;p&gt;一、保留USART2在PA口上，将TIM2完全重映射(Full Remap)到其他IO上，或者，如果你不用RTS和CTS的硬件流控制，PA0(CTS)和PA1(RTS)上对应的CH1和CH2是可以不用重映射的，只需要将Bit9：8改成10，也就是将CH3和CH4部分重映射到PB10和PB11上去，而CH1和CH2继续保留在PA0和PA1上。但这种情况下，PB10和PB11上的I2C2和USART3就不能用了。&lt;/p&gt;  &lt;p&gt;二、保留TIM2在PA口，将USART2重映射到PD口上，很明显，当TIM2完全不重映射时，USART2必须的信号线只有Clock不受影响，这种情况下也没有部分映射可言了，必须将USART2完全重映射到PD3～PD7上，同样的，这种情况下FSMC就不能用了。&lt;/p&gt;  &lt;p&gt;具体怎么选择就看你自己了，一般情况下最简单的就是你换个定时器好了，反正定时器那么多，如果非要同时用USART2和TIM2，大部分人可能会选择前一种方案，毕竟FSMC被干掉是非常麻烦的一件事。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/Zyx-xuUQ4AA" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000016.html</feedburner:origLink></entry>

<entry>
    <title>archive</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/iE2txGfKcm8/000015.html" />
    <id>tag:www.lifetyper.com,2011://2.15</id>

    <published>2011-06-25T15:22:00Z</published>
    <updated>2011-06-25T15:23:28Z</updated>

    <summary>1.我不知道你们这些虚伪的人类到底在想什么，所以我告诉你们我在想什么，你们爱信不信，所有的错误只可能由你们的虚伪造成。  2.《3D肉蒲团》是部很好的爱情片，不只是动作爱情片。Sex And Zen这个标题很好，淫者见淫，片尾曲也很好。  3.我把这些话写成日志，是因为状态都被你们忽略，日志往往你们看得很仔细，这是针对同步到校内后的情况说的。  4.对胖子又洁癖这个事情，我TM还是不信，都是胖子，差距肿麽这么大。  5.WiMAX这么好的技术为什么被市场抛弃了？你们这些阻碍人类发展的资本主义混蛋。  6.Allegro中出Gerber时要完全不报warning，A、一定要加photo plot outline B、封装也就是database要按2位decimal建立，因为RS274X格式要求Gerber精度比database大3个小数位。  我们那层楼有个我以前以为很牛逼的layout外包公司，他们的database精度那叫一个高啊，4位小数点，顺便说一下，RS274X的Gerber最多只能输出5位精度。像我这样写代码都不想看到一个warning的变态，以后还是自己layout好了。  7.N900用户注意，进行社区更新要先安装 Community SSU Enabler，不然的话，你按照那些China Man在论坛上写的直接输入apt-get updata再apt-get upgrade，能升级个鸟啊，Nokia怎么可能自动集成社区更新。  8.我很想凑个10条啊。  9.还差一条了，还是算了吧。</summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="不以类聚的" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;1.我不知道你们这些虚伪的人类到底在想什么，所以我告诉你们我在想什么，你们爱信不信，所有的错误只可能由你们的虚伪造成。&lt;/p&gt;  &lt;p&gt;2.《3D肉蒲团》是部很好的爱情片，不只是动作爱情片。Sex And Zen这个标题很好，淫者见淫，片尾曲也很好。&lt;/p&gt;  &lt;p&gt;3.我把这些话写成日志，是因为状态都被你们忽略，日志往往你们看得很仔细，这是针对同步到校内后的情况说的。&lt;/p&gt;  &lt;p&gt;4.对胖子又洁癖这个事情，我TM还是不信，都是胖子，差距肿麽这么大。&lt;/p&gt;  &lt;p&gt;5.WiMAX这么好的技术为什么被市场抛弃了？你们这些阻碍人类发展的资本主义混蛋。&lt;/p&gt;  &lt;p&gt;6.Allegro中出Gerber时要完全不报warning，A、一定要加photo plot outline B、封装也就是database要按2位decimal建立，因为RS274X格式要求Gerber精度比database大3个小数位。&lt;/p&gt;  &lt;p&gt;我们那层楼有个我以前以为很牛逼的layout外包公司，他们的database精度那叫一个高啊，4位小数点，顺便说一下，RS274X的Gerber最多只能输出5位精度。像我这样写代码都不想看到一个warning的变态，以后还是自己layout好了。&lt;/p&gt;  &lt;p&gt;7.N900用户注意，进行社区更新要先安装 &lt;a href="http://repository.maemo.org/community-testing/community-testing-fremantle.install"&gt;Community SSU Enabler&lt;/a&gt;，不然的话，你按照那些China Man在论坛上写的直接输入apt-get updata再apt-get upgrade，能升级个鸟啊，Nokia怎么可能自动集成社区更新。&lt;/p&gt;  &lt;p&gt;8.我很想凑个10条啊。&lt;/p&gt;  &lt;p&gt;9.还差一条了，还是算了吧。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/iE2txGfKcm8" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000015.html</feedburner:origLink></entry>

<entry>
    <title>凑一个标题</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/gUpgGAwctKU/000014.html" />
    <id>tag:www.lifetyper.com,2011://2.14</id>

    <published>2011-06-11T10:59:00Z</published>
    <updated>2011-06-11T11:00:51Z</updated>

    <summary>一、想起小时候我妈带我去赣州时我不听话的样子，我不止一次的想坐时光机回去杀了我，那怎么会是我，那么幼稚，太丢人了。  二、人都是动物，不管你服不服，弗洛伊德是对的，人都是被性冲动和潜在性冲动支配的动物，这个太容易看出来了，你祖宗都跟你说了“女为悦己者容”，“士为知己者死”其实是指同性恋。  三、我以为反叛常理和本性可以避免往动物性上靠拢，结果有时候出现了我自己都不知道怎么办的悖论，例如今天这个事先给了答案的检定员资格考试：A、这种纯粹为了收钱而进行的考试和所谓的学习是没有任何益处的，反正公司掏钱，我才不想浪费一天去考这种虚伪的东西B、我懒得起床去考试，懒得去背书，但是我要反对这种懒惰。C、我TM到底该不该去考？D、6.30起床时我想该考试还是睡过考试开始时间E、三次看表后时间是8：30F、考虑到我住徐汇而考场在黄埔(9号线马当路，不知道是不是黄埔)，我没去。  四、没了。</summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="生活在别处" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;一、想起小时候我妈带我去赣州时我不听话的样子，我不止一次的想坐时光机回去杀了我，那怎么会是我，那么幼稚，太丢人了。&lt;/p&gt;  &lt;p&gt;二、人都是动物，不管你服不服，弗洛伊德是对的，人都是被性冲动和潜在性冲动支配的动物，这个太容易看出来了，你祖宗都跟你说了“女为悦己者容”，“士为知己者死”其实是指同性恋。&lt;/p&gt;  &lt;p&gt;三、我以为反叛常理和本性可以避免往动物性上靠拢，结果有时候出现了我自己都不知道怎么办的悖论，例如今天这个事先给了答案的检定员资格考试：A、这种纯粹为了收钱而进行的考试和所谓的学习是没有任何益处的，反正公司掏钱，我才不想浪费一天去考这种虚伪的东西B、我懒得起床去考试，懒得去背书，但是我要反对这种懒惰。C、我TM到底该不该去考？D、6.30起床时我想该考试还是睡过考试开始时间E、三次看表后时间是8：30F、考虑到我住徐汇而考场在黄埔(9号线马当路，不知道是不是黄埔)，我没去。&lt;/p&gt;  &lt;p&gt;四、没了。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/gUpgGAwctKU" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000014.html</feedburner:origLink></entry>

<entry>
    <title>64位操作系统下Capture CIS Access数据库的配置,关于Error #8012</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/XpMFGSiB374/000013.html" />
    <id>tag:www.lifetyper.com,2011://2.13</id>

    <published>2011-03-06T08:12:00Z</published>
    <updated>2011-03-06T08:16:20Z</updated>

    <summary>这其实是个以前就写过的文章，最近在64位WIN7下再次配置时发现有点问题，特地将补充的内容加上再发一遍，以方便需要用到的人。  直接说报错结果，你在以为自己配置完系统DSN之后，应该就会进Capture点CIS Configuration了，然后添加你刚刚以为搞定的DSN。噹!  ERROR #8012 Database Operation Failed     Please Check Session For More Details     ODBC Error Code: -1     Description: 在指定的 DSN 中，驱动程序和应用程序之间的体系结构不匹配     ODBC Error Description: State:IM014,Native:0,Origin:[Microsoft][ODBC 驱动程序管理器]    如果你看到的错误提示和上面一个字都不差，不要浪费时间去查数据库有没有错了，赶紧看哥的秘籍，猛击这里。  本文的中心思想，就是使用C:\Windows\SysWOW64\odbcad32.exe来添加系统DSN，而不是控制面板\管理工具下的那个ODBC工具，原因就是64位系统要64位的ODBC之类的，具体怎么回事请致电微软。</summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="纯电工手黑" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;这其实是个以前就写过的文章，最近在64位WIN7下再次配置时发现有点问题，特地将补充的内容加上再发一遍，以方便需要用到的人。&lt;/p&gt;  &lt;p&gt;直接说报错结果，你在以为自己配置完系统DSN之后，应该就会进Capture点CIS Configuration了，然后添加你刚刚以为搞定的DSN。噹!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ERROR #8012 Database Operation Failed&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;Please Check Session For More Details&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;ODBC Error Code: -1&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;Description: 在指定的 DSN 中，驱动程序和应用程序之间的体系结构不匹配&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;ODBC Error Description: State:IM014,Native:0,Origin:[Microsoft][ODBC 驱动程序管理器]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;如果你看到的错误提示和上面一个字都不差，不要浪费时间去查数据库有没有错了，赶紧看哥的秘籍，猛击&lt;a href="http://cid-4856ed67d41f1edc.office.live.com/self.aspx/Public%20Download/CIS%E6%9C%AC%E5%9C%B0%E5%85%83%E4%BB%B6Access%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8D%97.pdf"&gt;&lt;strong&gt;这里&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;  &lt;p&gt;本文的中心思想，就是使用C:\Windows\SysWOW64\odbcad32.exe来添加系统DSN，而不是控制面板\管理工具下的那个ODBC工具，原因就是64位系统要64位的ODBC之类的，具体怎么回事请致电微软。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/XpMFGSiB374" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000013.html</feedburner:origLink></entry>

<entry>
    <title>Allegro封装批量降版本的方法</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/jGkZOY41rFs/000011.html" />
    <id>tag:www.lifetyper.com,2011://2.11</id>

    <published>2011-01-27T14:11:00Z</published>
    <updated>2011-01-27T14:17:56Z</updated>

    <summary>Allegro封装升级版本非常容易，用qvupdate.exe批量处理就可以搞定了，而且非常彻底，连.dra文件都一起升级了。  但是，如果你后悔了，想把版本降下来，或者某种情况下你必须用低版本的allegro去layout，而低版本的allegro是无法搞定高版本的封装的，你就必须想办法降版本了。  今天在cadence官网看到一个帖子，讲的就是如何批量降封装版本,其实很简单，就是一个downrev_library命令就可以了，在命令提示符下操作直接把16.x的封装降到15.x，支持通配符，批量操作时，默认会把输出的低版本封装同名覆盖掉原来的文件，如果你还要保留原来的高版本封装，要记得备份。比较不爽的一点就是，.dra文件是无法降版本的，不过如果只是layout用也够了。可以装多个版本的allegro，用高版本修改.dra文件，生成几个版本的.psm文件供不同的版本调用。</summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="纯电工手黑" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;Allegro封装升级版本非常容易，用qvupdate.exe批量处理就可以搞定了，而且非常彻底，连.dra文件都一起升级了。&lt;/p&gt;  &lt;p&gt;但是，如果你后悔了，想把版本降下来，或者某种情况下你必须用低版本的allegro去layout，而低版本的allegro是无法搞定高版本的封装的，你就必须想办法降版本了。&lt;/p&gt;  &lt;p&gt;今天在cadence官网看到&lt;a href="http://www.cadence.com/Community/forums/p/16964/1179384.aspx#1179384"&gt;一个帖子&lt;/a&gt;，讲的就是如何批量降封装版本,其实很简单，就是一个downrev_library命令就可以了，在命令提示符下操作直接把16.x的封装降到15.x，支持通配符，批量操作时，默认会把输出的低版本封装同名覆盖掉原来的文件，如果你还要保留原来的高版本封装，要记得备份。比较不爽的一点就是，.dra文件是无法降版本的，不过如果只是layout用也够了。可以装多个版本的allegro，用高版本修改.dra文件，生成几个版本的.psm文件供不同的版本调用。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/jGkZOY41rFs" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000011.html</feedburner:origLink></entry>

<entry>
    <title>Cortex M3学习笔记(二)--外部中断EXTI的问题</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/xwtRwLfbqQ4/000010.html" />
    <id>tag:www.lifetyper.com,2011://2.10</id>

    <published>2011-01-19T14:06:00Z</published>
    <updated>2011-01-19T14:08:16Z</updated>

    <summary><![CDATA[关于cortex m3的外部中断配置，我只有一个问题要说，因为除了这个问题，外部中断几乎和GPIO一样简单。  你也许在很多地方都看到了，把一个GPIO作为中断线来用，是启用了它的复用功能，所以必须要AFIO复用始终，也就是：  RCC-&gt;APB2ENR|=1&lt;&lt;0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //开启AFIO复用时钟  我要说的只有一点，你对于EXTI寄存器的配置，也就是中断线的设置，必须在AFIO时钟开启之后才有效，你不能先配置EXTI中断线，然后再开启AFIO时钟。  毫无疑问的，你的编译可以通过，甚至连软件仿真的结果都是完全正常的，但实际硬件跑起来你就会发现你的中断函数根本没有执行，就是这个原因了。  &#160;  此外，我仅代表我全家，衷心祝愿铁道部所有人和全国所有票贩子下辈子还是中国人。]]></summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="纯电工手黑" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;关于cortex m3的外部中断配置，我只有一个问题要说，因为除了这个问题，外部中断几乎和GPIO一样简单。&lt;/p&gt;  &lt;p&gt;你也许在很多地方都看到了，把一个GPIO作为中断线来用，是启用了它的复用功能，所以必须要AFIO复用始终，也就是：&lt;/p&gt;  &lt;p&gt;RCC-&amp;gt;APB2ENR|=1&amp;lt;&amp;lt;0;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //开启AFIO复用时钟&lt;/p&gt;  &lt;p&gt;我要说的只有一点，你对于EXTI寄存器的配置，&lt;strong&gt;也就是中断线的设置，必须在AFIO时钟开启之后才有效&lt;/strong&gt;，你不能先配置EXTI中断线，然后再开启AFIO时钟。&lt;/p&gt;  &lt;p&gt;毫无疑问的，你的编译可以通过，甚至连软件仿真的结果都是完全正常的，但实际硬件跑起来你就会发现你的中断函数根本没有执行，就是这个原因了。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;此外，我仅代表我全家，衷心祝愿铁道部所有人和全国所有票贩子下辈子还是中国人。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/xwtRwLfbqQ4" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000010.html</feedburner:origLink></entry>

<entry>
    <title>Cortex M3学习笔记（一）--Systick的应用</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/wX3PXvDD13c/000009.html" />
    <id>tag:www.lifetyper.com,2010://2.9</id>

    <published>2010-12-26T14:42:00Z</published>
    <updated>2010-12-26T15:26:14Z</updated>

    <summary><![CDATA[这篇学习笔记，完全是基于《STM32不完全手册》而言的，我没有买Alientek的开发板，买的是ARMFly的，其实都差不多，只不过安福莱的板载资源非常丰富罢了，应用起来其实都差不都。  《STM32不完全手册》的51到56页就是要这次笔记学习的内容，请自己参考，我不再粘帖，主要讨论的内容其实就几行：  void delay_init(u8 SYSCLK)    {     &#160;&#160;&#160;&#160;&#160;&#160;&#160; SysTick-&gt;CTRL&amp;=0xfffffffb；  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; fac_us=SYSCLK/8;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160; fac_ms=(u16)fac_us*1000;     }   Systick主要的作用就是拿来计时，其原理和应用简述一下就是这样的：通过配置寄存器 SysTick-&gt;CTRL来设定Systick的计时频率并Enable使Systick开始计数，这里的SysTick-&gt;CTRL&amp;=0xfffffffb应该很好理解，把第2位设定为0，查找应用手册可以知道这是把Systick的计时频率设定为CPU主频(SYSCLK)的1/8。  假定我们板子默认的晶振频率是8Mhz，默认CPU工作频率(SYSCLK)是9倍频，即72M，那Systick的频率就是72/8=9Mhz。  知道了Systick的频率，下一步就是确定倒时计数器的数值，即SysTick-&gt; LOAD这个寄存器的配置。上面已经知道了，Systick的工作频率F=9Mhz=SYSCLK/8，即每秒钟计数器自减900万次，也就是说，SYSCLK/8次的自减耗时1秒，那么（8/SYSCLK）/1000,000次自减就耗时1微秒了，这也就是fac_us的值了。那么上面函数中的fac_us为什么是SYSCLK/8呢？这里先搞清楚一点，函数中SYSCLK的单位是Mhz，所以SYSCLK的值是72（这个以Mhz为单位应该是STM32基础库里面做过宏定义的），否则也不可能用一个8位整形去表示一个7200万的数值；而我们这里计算的SYSCLK是以Hz为单位的，即72Mhz/1000,000=72，所以这个SYSCLK/8是对的。  你可能还没搞清楚fac_us到底是干嘛的。很简单，fac_us就是要写入SysTick-&gt; LOAD寄存器的值，Systick的工作原理是这个寄存器的值在Systick被Enable之后就开始以设定的工作频率自减，减到0的时候就发出中断，实现定时。所以，写入fac_us到SysTick-&gt; LOAD寄存器，就是要Systick在自减了fac_us次以后发出中断，自减fac_us所耗的时间已经说了，1微秒。  下面的fac_ms应该很好理解了，就是1毫秒的计数次数，刚好是1微妙的1000倍，注意9×1000超出了8位整形的表示范围，所以要用(u16)先把fac_us转成16位变量，以保证计算的正确。  具体的应用函数是用来做延时，如下：  void delay_us(u32 nus)    {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160; u32 temp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160; SysTick-&gt;LOAD=nus*fac_us; //时间加载&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160; SysTick-&gt;VAL=0x00;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //清空计数器     &#160;&#160;&#160;&#160;&#160;&#160;&#160; SysTick-&gt;CTRL=0x01 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //Enable Systick，开始倒数&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160; do     &#160;&#160;&#160;&#160;&#160;&#160;&#160; {     &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; temp=SysTick-&gt;CTRL;     &#160;&#160;&#160;&#160;&#160;&#160;&#160; }     &#160;&#160;&#160;&#160;&#160;&#160;&#160; while(temp&amp;0x01&amp;&amp;!(temp&amp;(1&lt;&lt;16)));//等待时间到达&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160; SysTick-&gt;CTRL=0x00;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //Disable Systick  &#160;&#160;&#160;&#160;&#160;&#160;&#160; SysTick-&gt;VAL =0X00;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //清空计数器&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }   具体的寄存器配置只要看手册就知道了，这里只需要理解一句：  do    &#160;&#160;&#160;&#160;&#160;&#160;&#160; {     &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; temp=SysTick-&gt;CTRL;     &#160;&#160;&#160;&#160;&#160;&#160;&#160; }     &#160;&#160;&#160;&#160;&#160;&#160;&#160; while(temp&amp;0x01&amp;&amp;!(temp&amp;(1&lt;&lt;16)));//等待时间到达&#160;&#160;&#160;   核心就是while(temp&amp;0x01&amp;&amp;!(temp&amp;(1&lt;&lt;16)));//等待时间到达&#160;&#160;&#160;   temp已经是Systick控制寄存器的值了，temp&amp;0x01就是把该寄存器的值读出并且把除第一位之外位都清零(当然要通过temp变量来传递值而不是直接修改寄存器)，第一位就是Systick的Enable配置信息，写入1就是Enable，写入0就是Disable，读这一位是判断Systick是否仍然处于Enable状态(可能被其他中断禁用掉)，temp&amp;(1&lt;&lt;16)就是读取第16位的值，这一位如果为0就表示计数器的值不是0(即还在计数)，如果是1就表示计数器已经自减到0了。  &#160;&#160;&#160;&#160;&#160;&#160; 那么这段就很好理解了，即判断，如果Systick还在Enable的状态，并且计数器还没数到0，就不停的循环把当前的SysTick-&gt;CTRL寄存器值写入变量temp，继续下一次判断。当Systick被Disable或者计数器数到0了，就停止循环。因为只是做延时，也不需要跳到任何中断服务那边去处理什么，只要这个循环的耗时过程完成就可以了。  &#160;&#160;&#160;&#160;&#160;&#160; 表达的很乱，没关系，自己搞懂了就行。]]></summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="纯电工手黑" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;这篇学习笔记，完全是基于《&lt;a href="http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4141360&amp;amp;bbs_page_no=1&amp;amp;search_mode=3&amp;amp;search_text=liujun6037&amp;amp;bbs_id=9999" target="_blank"&gt;STM32不完全手册&lt;/a&gt;》而言的，我没有买Alientek的开发板，买的是ARMFly的，其实都差不多，只不过安福莱的板载资源非常丰富罢了，应用起来其实都差不都。&lt;/p&gt;  &lt;p&gt;《STM32不完全手册》的51到56页就是要这次笔记学习的内容，请自己参考，我不再粘帖，主要讨论的内容其实就几行：&lt;/p&gt;  &lt;p&gt;void delay_init(u8 SYSCLK)    &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SysTick-&amp;gt;CTRL&amp;amp;=0xfffffffb；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fac_us=SYSCLK/8;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fac_ms=(u16)fac_us*1000;     &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;Systick主要的作用就是拿来计时，其原理和应用简述一下就是这样的：通过配置寄存器 SysTick-&amp;gt;CTRL来设定Systick的计时频率并Enable使Systick开始计数，这里的SysTick-&amp;gt;CTRL&amp;amp;=0xfffffffb应该很好理解，把第2位设定为0，查找应用手册可以知道这是把Systick的计时频率设定为CPU主频(SYSCLK)的1/8。&lt;/p&gt;  &lt;p&gt;假定我们板子默认的晶振频率是8Mhz，默认CPU工作频率(SYSCLK)是9倍频，即72M，那Systick的频率就是72/8=9Mhz。&lt;/p&gt;  &lt;p&gt;知道了Systick的频率，下一步就是确定倒时计数器的数值，即SysTick-&amp;gt; LOAD这个寄存器的配置。上面已经知道了，Systick的工作频率F=9Mhz=SYSCLK/8，即每秒钟计数器自减900万次，也就是说，SYSCLK/8次的自减耗时1秒，那么（8/SYSCLK）/1000,000次自减就耗时1微秒了，这也就是fac_us的值了。那么上面函数中的fac_us为什么是SYSCLK/8呢？这里先搞清楚一点，函数中SYSCLK的单位是Mhz，所以SYSCLK的值是72（这个以Mhz为单位应该是STM32基础库里面做过宏定义的），否则也不可能用一个8位整形去表示一个7200万的数值；而我们这里计算的SYSCLK是以Hz为单位的，即72Mhz/1000,000=72，所以这个SYSCLK/8是对的。&lt;/p&gt;  &lt;p&gt;你可能还没搞清楚fac_us到底是干嘛的。很简单，fac_us就是要写入SysTick-&amp;gt; LOAD寄存器的值，Systick的工作原理是这个寄存器的值在Systick被Enable之后就开始以设定的工作频率自减，减到0的时候就发出中断，实现定时。所以，写入fac_us到SysTick-&amp;gt; LOAD寄存器，就是要Systick在自减了fac_us次以后发出中断，自减fac_us所耗的时间已经说了，1微秒。&lt;/p&gt;  &lt;p&gt;下面的fac_ms应该很好理解了，就是1毫秒的计数次数，刚好是1微妙的1000倍，注意9×1000超出了8位整形的表示范围，所以要用(u16)先把fac_us转成16位变量，以保证计算的正确。&lt;/p&gt;  &lt;p&gt;具体的应用函数是用来做延时，如下：&lt;/p&gt;  &lt;p&gt;void delay_us(u32 nus)    &lt;br /&gt;{&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; u32 temp;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SysTick-&amp;gt;LOAD=nus*fac_us; //时间加载&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SysTick-&amp;gt;VAL=0x00;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //清空计数器     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SysTick-&amp;gt;CTRL=0x01 ;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Enable Systick，开始倒数&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; do     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; temp=SysTick-&amp;gt;CTRL;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while(temp&amp;amp;0x01&amp;amp;&amp;amp;!(temp&amp;amp;(1&amp;lt;&amp;lt;16)));//等待时间到达&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SysTick-&amp;gt;CTRL=0x00;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Disable Systick&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SysTick-&amp;gt;VAL =0X00;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //清空计数器&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;具体的寄存器配置只要看手册就知道了，这里只需要理解一句：&lt;/p&gt;  &lt;p&gt;do    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; temp=SysTick-&amp;gt;CTRL;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while(temp&amp;amp;0x01&amp;amp;&amp;amp;!(temp&amp;amp;(1&amp;lt;&amp;lt;16)));//等待时间到达&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;核心就是while(temp&amp;amp;0x01&amp;amp;&amp;amp;!(temp&amp;amp;(1&amp;lt;&amp;lt;16)));//等待时间到达&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;temp已经是Systick控制寄存器的值了，temp&amp;amp;0x01就是把该寄存器的值读出并且把除第一位之外位都清零(当然要通过temp变量来传递值而不是直接修改寄存器)，第一位就是Systick的Enable配置信息，写入1就是Enable，写入0就是Disable，读这一位是判断Systick是否仍然处于Enable状态(可能被其他中断禁用掉)，temp&amp;amp;(1&amp;lt;&amp;lt;16)就是读取第16位的值，这一位如果为0就表示计数器的值不是0(即还在计数)，如果是1就表示计数器已经自减到0了。&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 那么这段就很好理解了，即判断，如果Systick还在Enable的状态，并且计数器还没数到0，就不停的循环把当前的SysTick-&amp;gt;CTRL寄存器值写入变量temp，继续下一次判断。当Systick被Disable或者计数器数到0了，就停止循环。因为只是做延时，也不需要跳到任何中断服务那边去处理什么，只要这个循环的耗时过程完成就可以了。&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 表达的很乱，没关系，自己搞懂了就行。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/wX3PXvDD13c" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000009.html</feedburner:origLink></entry>

<entry>
    <title>这下清净了</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lifetyper/~3/HY1wP0C4Jkk/000005.html" />
    <id>tag:www.lifetyper.com,2010://2.5</id>

    <published>2010-09-22T07:11:00Z</published>
    <updated>2010-09-22T07:32:25Z</updated>

    <summary>本来很高兴看到Movable Type5.03发布的消息，又在DBA Notes看到了之前那个wide character评论错误的解决办法(我之前开debug mode也是找到encwords.pm的176行encoding 错误，但不知道怎么办)。心想这次看你往哪跑，也轮到爷换5.03了吧。  不废话，直接上5.03，提交评论，很明显，继续报错。  没事，咱不还没修改那个文件吗，修改一下，上传覆盖。  再提交评论，OK，终于继续报错了。  残念。     这问题还真成了老大难了？从MT 5 Beta开始就有人在反馈，到现在官方也没解决。民间的方法按理说DBA Notes那个已经是最靠谱，最接近我这实际情况的了，结果还是完蛋。  算了，一不做二不休，直接删掉全部的东西，重装个5.03吧，反正没啥文章。记录性的文章，其实存在脑子里就好了，不管你到过那里，做过什么，之后回忆才是属于你的。  在留言页面看评论似乎是可以了，等下再试试这篇文章。顺便说一下，5.03版最大的贡献应该就是解决了评论邮件提示的中文乱码，不用在config.cgi里写明用UTF-8了。  也许你们已经知道我跳槽了，一次失败了60%以上的跳槽。上海的高消费，高社保公积金比例，普遍的无加班费，扯淡的没绩效奖金概念，再考虑之前在仁宝本来已经升职到工程师应该有的1k加薪，我怎么算怎么感觉没比跳槽前好多少。  虽说这里可以让你自己动手去做很多事了，但我不得不说这小公司事也太多了，一个人怎么可以做这么多事。这种不明确的分工下，你对产品的要求自然下降到能用就行，毕竟就你一个人在做一个产品。什么叫ME?机构问题EE自己搞定就好了。Layout？外包设计的设计费不是那么好申请的，6层板以下你就自己画吧(扯淡的是，这公司之前好像从来没人自己做过layout，凭什么从我开始？)  这里上班可以迟到，两小时也行，只是早退好像就不太好了。刚开始还很不习惯，总是来得很早，现在，也就随大流了。之前我憎恨的台企的严格管理体系，现在看来其实还不错，那才是一个企业该有的文化和制度。  嗯，似乎以前经常看到有人说不要再blog里抱怨公司什么的，会有很不好的后果。我想，去他妈的，哥的世界已经越来越虚伪的，在这里都不敢说真话就去死算了。</summary>
    <author>
        <name>leavic</name>
        
    </author>
    
        <category term="不以类聚的" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-us" xml:base="http://www.lifetyper.com/">
        &lt;p&gt;本来很高兴看到Movable Type5.03发布的消息，又在DBA Notes看到了之前那个wide character评论错误的&lt;a href="http://www.dbanotes.net/sitelog/movable_type_wide_character_in_subroutine_entry_bug.html" target="_blank"&gt;解决办法&lt;/a&gt;(我之前开debug mode也是找到encwords.pm的176行encoding 错误，但不知道怎么办)。心想这次看你往哪跑，也轮到爷换5.03了吧。&lt;/p&gt;  &lt;p&gt;不废话，直接上5.03，提交评论，很明显，继续报错。&lt;/p&gt;  &lt;p&gt;没事，咱不还没修改那个文件吗，修改一下，上传覆盖。&lt;/p&gt;  &lt;p&gt;再提交评论，OK，终于继续报错了。&lt;/p&gt;  &lt;p&gt;残念。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;这问题还真成了老大难了？从MT 5 Beta开始就有人在反馈，到现在官方也没解决。民间的方法按理说DBA Notes那个已经是最靠谱，最接近我这实际情况的了，结果还是完蛋。&lt;/p&gt;  &lt;p&gt;算了，一不做二不休，直接删掉全部的东西，重装个5.03吧，反正没啥文章。记录性的文章，其实存在脑子里就好了，不管你到过那里，做过什么，之后回忆才是属于你的。&lt;/p&gt;  &lt;p&gt;在留言页面看评论似乎是可以了，等下再试试这篇文章。顺便说一下，5.03版最大的贡献应该就是解决了评论邮件提示的中文乱码，不用在config.cgi里写明用UTF-8了。&lt;/p&gt;  &lt;p&gt;也许你们已经知道我跳槽了，一次失败了60%以上的跳槽。上海的高消费，高社保公积金比例，普遍的无加班费，扯淡的没绩效奖金概念，再考虑之前在仁宝本来已经升职到工程师应该有的1k加薪，我怎么算怎么感觉没比跳槽前好多少。&lt;/p&gt;  &lt;p&gt;虽说这里可以让你自己动手去做很多事了，但我不得不说这小公司事也太多了，一个人怎么可以做这么多事。这种不明确的分工下，你对产品的要求自然下降到能用就行，毕竟就你一个人在做一个产品。什么叫ME?机构问题EE自己搞定就好了。Layout？外包设计的设计费不是那么好申请的，6层板以下你就自己画吧(扯淡的是，这公司之前好像从来没人自己做过layout，凭什么从我开始？)&lt;/p&gt;  &lt;p&gt;这里上班可以迟到，两小时也行，只是早退好像就不太好了。刚开始还很不习惯，总是来得很早，现在，也就随大流了。之前我憎恨的台企的严格管理体系，现在看来其实还不错，那才是一个企业该有的文化和制度。&lt;/p&gt;  &lt;p&gt;嗯，似乎以前经常看到有人说不要再blog里抱怨公司什么的，会有很不好的后果。我想，去他妈的，哥的世界已经越来越虚伪的，在这里都不敢说真话就去死算了。&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/lifetyper/~4/HY1wP0C4Jkk" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.lifetyper.com/archives/000005.html</feedburner:origLink></entry>

</feed>

