<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>๑۩๑ 须弥之界 ๑۩๑</title>
	<atom:link href="http://superkyle1888.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://superkyle1888.wordpress.com</link>
	<description>人们总是希望永恒，却总是忘记为永恒付出。</description>
	<lastBuildDate>Thu, 03 Feb 2011 05:54:19 +0000</lastBuildDate>
	<language>zh-cn</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='superkyle1888.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/b807c0bab09ff251e0053c88a727dc58?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>๑۩๑ 须弥之界 ๑۩๑</title>
		<link>http://superkyle1888.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://superkyle1888.wordpress.com/osd.xml" title="๑۩๑ 须弥之界 ๑۩๑" />
	<atom:link rel='hub' href='http://superkyle1888.wordpress.com/?pushpress=hub'/>
		<item>
		<title>[zz] Keil的代码优化产生的问题</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/zz-keil%e7%9a%84%e4%bb%a3%e7%a0%81%e4%bc%98%e5%8c%96%e4%ba%a7%e7%94%9f%e7%9a%84%e9%97%ae%e9%a2%98/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/zz-keil%e7%9a%84%e4%bb%a3%e7%a0%81%e4%bc%98%e5%8c%96%e4%ba%a7%e7%94%9f%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:55:29 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[电子技术]]></category>
		<category><![CDATA[信息技术]]></category>
		<category><![CDATA[C51]]></category>
		<category><![CDATA[Keil]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=232</guid>
		<description><![CDATA[来自于天之涯海之角 阅读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《Keil C51对同一端口的连续读取方法》(原文)后，笔者认为该文并未就此问题进行深入准确的分析。文章中提到的两种解决方法并不直接和简单。笔者认为这并非是 Keil C51中不能处理对一个端口进行连续读写的问题，而是对Keil C51的使用不够熟悉和设计不够细致的问题，因此特撰写本文。 本文中对原文提到的问题，提出了三种不同于原文的解决方法。每种方法都比原文中提到的方法更直接和简单，设计也更规范。(无意批评，请原文作者见谅) 1 问题回顾和分析 原文中提到：在实际工作中遇到对同一端口反复连续读取，Keil C5l编译并未达到预期的结果。原文作者对C编译出来的汇编程序进行分析发现，对同一端口的第二次读取语句并未被编译。但可惜原文作者并未分析没有被编译的原因，而是匆忙地采用一些不太规范的方法试验出了两种解决办法。 对此问题，翻阅Keil C51的手册很容易发现：KellC51的编译器有一个优化设置，不同的优化设置，会产生不同的编译结果。一般情况缺省编译优化设置被设定为8级优化，实际最高可设定为9级优化： ①Dead code elimination。 ②Data overlaymg。 ③Peephole optimization。 ④Register variables。 ⑤Common subexpression elimination。 ⑥Loop rotation。 ⑦Extended Index Access 0ptimizing。 ⑧Reuse Common。Entry Code。 ⑨Common Block Subroutines。 而以上的问题，正是由于KeiI C5l编译优化产生的。因为在原文程序中将外设地址直接按如下定义： unsigned char xdata MAXl97_at_Ox8000； 采用_at_将变量MAXl97定义到外部扩展RAM指定地址Ox8OOO。因此，Keil C51优化编译理所当然认为重复读第二次是没有用的，直接用第一次读取的结果就可以了，因此编译器跳过了第二条读取语句。至此，问题就一目了然了。 2 解决方法 由以上分析很容易就能提出很好的解决办法。 2.1 最简单最直接的办法 程序一点都不用修改，将Keil C5l的编译优化选择设置为0(不优化)就可以了。 选择project窗口的Target，然后打开“Options forTarget”设置对话框，选择“C5l”选项卡，将“Code Optimiztaion”中的“Level”选择为“0：Costant <a href="http://superkyle1888.wordpress.com/2011/02/02/zz-keil%e7%9a%84%e4%bb%a3%e7%a0%81%e4%bc%98%e5%8c%96%e4%ba%a7%e7%94%9f%e7%9a%84%e9%97%ae%e9%a2%98/" class="excerpt-more-link">[&#8230;]</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=232&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>来自于天之涯海之角</div>
<div>
<p>阅读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《Keil C51对同一端口的连续读取方法》(原文)后，笔者认为该文并未就此问题进行深入准确的分析。文章中提到的两种解决方法并不直接和简单。笔者认为这并非是 Keil C51中不能处理对一个端口进行连续读写的问题，而是对Keil C51的使用不够熟悉和设计不够细致的问题，因此特撰写本文。</p>
<p>本文中对原文提到的问题，提出了三种不同于原文的解决方法。每种方法都比原文中提到的方法更直接和简单，设计也更规范。(无意批评，请原文作者见谅)</p>
<p>1 问题回顾和分析</p>
<p>原文中提到：在实际工作中遇到对同一端口反复连续读取，Keil C5l编译并未达到预期的结果。原文作者对C编译出来的汇编程序进行分析发现，对同一端口的第二次读取语句并未被编译。但可惜原文作者并未分析没有被编译的原因，而是匆忙地采用一些不太规范的方法试验出了两种解决办法。</p>
<p>对此问题，翻阅Keil C51的手册很容易发现：KellC51的编译器有一个优化设置，不同的优化设置，会产生不同的编译结果。一般情况缺省编译优化设置被设定为8级优化，实际最高可设定为9级优化：</p>
<p>①Dead code elimination。</p>
<p>②Data overlaymg。</p>
<p>③Peephole optimization。</p>
<p>④Register variables。</p>
<p>⑤Common subexpression elimination。</p>
<p>⑥Loop rotation。</p>
<p>⑦Extended Index Access 0ptimizing。</p>
<p>⑧Reuse Common。Entry Code。</p>
<p>⑨Common Block Subroutines。</p>
<p>而以上的问题，正是由于KeiI C5l编译优化产生的。因为在原文程序中将外设地址直接按如下定义：</p>
<p>unsigned char xdata MAXl97_at_Ox8000；</p>
<p>采用_at_将变量MAXl97定义到外部扩展RAM指定地址Ox8OOO。因此，Keil C51优化编译理所当然认为重复读第二次是没有用的，直接用第一次读取的结果就可以了，因此编译器跳过了第二条读取语句。至此，问题就一目了然了。</p>
<p>2 解决方法</p>
<p>由以上分析很容易就能提出很好的解决办法。</p>
<p>2.1 最简单最直接的办法</p>
<p>程序一点都不用修改，将Keil C5l的编译优化选择设置为0(不优化)就可以了。</p>
<p>选择project窗口的Target，然后打开“Options forTarget”设置对话框，选择“C5l”选项卡，将“Code Optimiztaion”中的“Level”选择为“0：Costant folding”。再次编译后，大家会发现编译结果为：</p>
<p>CLR MAXHBEN</p>
<p>MOV DPTR，#M．AXl97</p>
<p>MOVX A，@DPTR</p>
<p>MOV R7．A</p>
<p>MOV down8．R7</p>
<p>SETB MAXHBEN</p>
<p>MOV DPTR，#MAXl97</p>
<p>MOVX A，@DPTR</p>
<p>MOV R7．A</p>
<p>MOV uD4．R7</p>
<p>两次读取操作都被编译出来了。</p>
<p>2.2 最好的方法</p>
<p>告诉Keil C51，这个地址不是一般的扩展RAM，而是连接的设备，具有“挥发”特性，每次读取都是有意义的。</p>
<p>可以修改变量定义，增加“volatile”关键字说明其特征：</p>
<p>unsigned char volatile xdata MAXl97_at_Ox8000；</p>
<p>也可以在程序中包含系统头文件：“#incIude”，然后在程序中修改变量，定义为直接地址：</p>
<p>#defme MAXl97 XBYTE[Ox8000]</p>
<p>这样，。Keil C51的设置仍然可以保留高级优化，且编译结果中，同样两次读取并不会被优化跳过。</p>
<p>2.3 硬件解决方法</p>
<p>原文中将MAXl97的数据直接连接到数据总线，而对地址总线并未使用，采用一根端口线选择操作高低字节。很简单的修改方法就是使用一根地址线选择操作高低字节即可。比如：将P2．0(A8)连接到原来P1．O连接的HBEN脚(MAXl97的5脚)，在程序中分别定义高低字节的操作地址：</p>
<p>unsigned char volatile xdata MAXl97_L_aI_Ox8000;</p>
<p>unsigned char volatile xdata MAXl97 H at 0．x8100；</p>
<p>将原来的程序：</p>
<p>MAXHBEN=O； ／／读取低8位</p>
<p>down8=MAXl97：</p>
<p>MAXHBEN=1； ／／读取高4位</p>
<p>up4=MAXl97：</p>
<p>改为以下两句即可：</p>
<p>down8=MAXl97_L； ／／读取低8位</p>
<p>up4=MAXl97_H； ／／读取高4位</p>
</div>
<div>
<table>
<tbody>
<tr>
<td>
<div>
<p>3 小结</p>
<p>Keil C51经过长期考验和改进以及大量开发人员的实际使用，已经克服了绝大多数的问题，并且其编译效率也非常高。对于一般的使用，很难再发现什么问题。笔者曾经粗略研究过一下Keil C51优化编译的结果，非常佩服Keil C51设计者的智慧，一些C程序编译产生的汇编代码，甚至比一般程序员直接用汇编编写的代码还要优秀和简练。通过研读KeilC51编译产生的汇编代码，对提高汇编语言编写程序的水平都是很有帮助的。</p>
<p>由本文中的问题可以看出：在设计中遇到问题时，一定不要被表面现象蒙蔽，不要急于解决。应该认真分析，找出问题的原因，这样才能从根本上彻底解决问题。上不会出现不必要的干扰，防止了数据不一致的发生。</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/232/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/232/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/232/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=232&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/zz-keil%e7%9a%84%e4%bb%a3%e7%a0%81%e4%bc%98%e5%8c%96%e4%ba%a7%e7%94%9f%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
		<item>
		<title>单片机编程规范</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/%e5%8d%95%e7%89%87%e6%9c%ba%e7%bc%96%e7%a8%8b%e8%a7%84%e8%8c%83/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/%e5%8d%95%e7%89%87%e6%9c%ba%e7%bc%96%e7%a8%8b%e8%a7%84%e8%8c%83/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:51:19 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[电子技术]]></category>
		<category><![CDATA[信息技术]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[规范]]></category>
		<category><![CDATA[单片机]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=230</guid>
		<description><![CDATA[1单片机C51编程规范－ 前言 为了提高源程序的质量和可维护性，从而最终提高软件产品生产力，特编写此规范。 2 单片机C51编程规范－范围 本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对C51编程语言和keil编译器而言，包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。 3 单片机C51编程规范－总则 l 格式清晰 l 注释简明扼要 l 命名规范易懂 l 函数模块化 l 程序易读易维护 l 功能准确实现 l 代码空间效率和时间效率高 l 适度的可扩展性 4 单片机C51编程规范－数据类型定义 编程时统一采用下述新类型名的方式定义数据类型。 建立一个datatype.h文件，在该文件中进行如下定义： typedef bit BOOL; // 位变量 // typedef unsigned char INT8U; // 无符号8位整型变量 // typedef signed char INT8S; // 有符号8位整型变量 // typedef unsigned int INT16U; // 无符号16位整型变量 // <a href="http://superkyle1888.wordpress.com/2011/02/02/%e5%8d%95%e7%89%87%e6%9c%ba%e7%bc%96%e7%a8%8b%e8%a7%84%e8%8c%83/" class="excerpt-more-link">[&#8230;]</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=230&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>1单片机C51编程规范－ 前言<br />
为了提高源程序的质量和可维护性，从而最终提高软件产品生产力，特编写此规范。</p>
<p>2 单片机C51编程规范－范围<br />
本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对C51编程语言和keil编译器而言，包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。</p>
<p>3 单片机C51编程规范－总则<br />
l 格式清晰<br />
l 注释简明扼要<br />
l 命名规范易懂<br />
l 函数模块化<br />
l 程序易读易维护<br />
l 功能准确实现<br />
l 代码空间效率和时间效率高<br />
l 适度的可扩展性</p>
<p>4 单片机C51编程规范－数据类型定义<br />
编程时统一采用下述新类型名的方式定义数据类型。<br />
建立一个datatype.h文件，在该文件中进行如下定义：<br />
typedef bit BOOL; // 位变量 //<br />
typedef unsigned char INT8U; // 无符号8位整型变量 //<br />
typedef signed char INT8S; // 有符号8位整型变量 //<br />
typedef unsigned int INT16U; // 无符号16位整型变量 //<br />
typedef signed int INT16S; // 有符号16位整型变量 //<br />
typedef unsigned long INT32U; // 无符号32位整型变量 //<br />
typedef signed long INT32S; // 有符号32位整型变量 //<br />
typedef float FP32; // 单精度浮点数(32位长度) //<br />
typedef double FP64; // 双精度浮点数(64位长度) //</p>
<p>5 单片机C51编程规范－标识符命名</p>
<p>5.1 命名基本原则<br />
l 命名要清晰明了，有明确含义，使用完整单词或约定俗成的缩写。通常，较短的单词可通过去掉元音字母形成缩写；较长的单词可取单词的头几个字母形成缩写。即&#8221;见名知意&#8221;。<br />
l 命名风格要自始至终保持一致。<br />
l 命名中若使用特殊约定或缩写，要有注释说明。<br />
l 除了编译开关/头文件等特殊应用，应避免使用以下划线开始和／或结尾的定义。<br />
l 同一软件产品内模块之间接口部分的标识符名称之前加上模块标识。</p>
<p>5.2 宏和常量命名<br />
宏和常量用全部大写字母来命名，词与词之间用下划线分隔。对程序中用到的数字均应用有意义的枚举或宏来代替。</p>
<p>5.3 变量命名<br />
变量名用小写字母命名，每个词的第一个字母大写。类型前缀（u8\s8 etc.）全局变量另加前缀g_。<br />
局部变量应简明扼要。局部循环体控制变量优先使用i、j、k等；局部长度变量优先使用len、num等；临时中间变量优先使用temp、tmp等。</p>
<p>5.4 函数命名<br />
函数名用小写字母命名，每个词的第一个字母大写，并将模块标识加在最前面。</p>
<p>5.5 文件命名<br />
一个文件包含一类功能或一个模块的所有函数，文件名称应清楚表明其功能或性质。<br />
每个.c文件应该有一个同名的.h文件作为头文件。</p>
<p>6 单片机C51编程规范－注释</p>
<p>6.1 注释基本原则<br />
l 有助于对程序的阅读理解，说明程序在&#8221;做什么&#8221;，解释代码的目的、功能和采用的方法。<br />
l 一般情况源程序有效注释量在30％左右。<br />
l 注释语言必须准确、易懂、简洁。<br />
l 边写代码边注释，修改代码同时修改相应的注释，不再有用的注释要删除。</p>
<p>6.2 文件注释<br />
文件注释必须说明文件名、函数功能、创建人、创建日期、版本信息等相关信息。<br />
修改文件代码时，应在文件注释中记录修改日期、修改人员，并简要说明此次修改的目的。所有修改记录必须保持完整。<br />
文件注释放在文件顶端，用&#8221;"格式包含。<br />
注释文本每行缩进4个空格；每个注释文本分项名称应对齐。</p>
<p>6.3 函数注释<br />
6.3.1 函数头部注释<br />
函数头部注释应包括函数名称、函数功能、入口参数、出口参数等内容。如有必要还可增加作者、创建日期、修改记录（备注）等相关项目。<br />
函数头部注释放在每个函数的顶端，用&#8221;"的格式包含。其中函数名称应简写为FunctionName()，不加入、出口参数等信息。</p>
<p>6.3.2 代码注释<br />
代码注释应与被注释的代码紧邻，放在其上方或右方，不可放在下面。如放于上方则需与其上面的代码用空行隔开。一般少量注释应该添加在被注释语句的行尾，一个函数内的多个注释左对齐；较多注释则应加在上方且注释行与被注释的语句左对齐。<br />
函数代码注释用&#8221;//…//&#8221;的格式。<br />
通常，分支语句（条件分支、循环语句等）必须编写注释。其程序块结束行&#8221;｝&#8221;的右方应加表明该程序块结束的标记&#8221;end of ……&#8221;, 尤其在多重嵌套时。</p>
<p>6.4 变量、常量、宏的注释<br />
同一类型的标识符应集中定义，并在定义之前一行对其共性加以统一注释。对单个标识符的注释加在定义语句的行尾。<br />
全局变量一定要有详细的注释，包括其功能、取值范围、哪些函数或过程存取它以及存取时的注意事项等。<br />
注释用&#8221;//…//&#8221;的格式。</p>
<p>7 单片机C51编程规范－函数</p>
<p>7.1 设计原则<br />
函数的基本要求：<br />
l 正确性：程序要实现设计要求的功能。<br />
l 稳定性和安全性：程序运行稳定、可靠、安全。<br />
l 可测试性：程序便于测试和评价。<br />
l 规范／可读性：程序书写风格、命名规则等符合规范。<br />
l 扩展性：代码为下一次升级扩展留有空间和接口。<br />
l 全局效率：软件系统的整体效率高。<br />
l 局部效率：某个模块／子模块/函数的本身效率高。</p>
<p>编制函数的基本原则：<br />
l 单个函数的规模尽量限制在200行以内（不包括注释和空行）。一个函数只完成一个功能。<br />
l 函数局部变量的数目一般不超过5～10个。<br />
l 函数内部局部变量定义区和功能实现区（包含变量初始化）之间空一行。<br />
l 函数名应准确描述函数的功能。通常使用动宾词组为执行某操作的函数命名。<br />
l 函数的返回值要清楚明了，尤其是出错返回值的意义要准确无误。<br />
l 不要把与函数返回值类型不同的变量，以编译系统默认的转换方式或强制的转换方式作为返回值返回。<br />
l 减少函数本身或函数间的递归调用。<br />
l 尽量不要将函数的参数作为工作变量。</p>
<p>7.2 函数定义<br />
l 函数若没有入口参数或者出口参数，应用void明确申明。<br />
l 函数名称与出口参数类型定义间应该空一格且只空一格。<br />
l 函数名称与括号()之间无空格。<br />
l 函数形参必须给出明确的类型定义。<br />
l 多个形参的函数，后一个形参与前一个形参的逗号分割符之间添加一个空格。<br />
l 函数体的前后花括号&#8221;｛｝&#8221; 各独占一行。</p>
<p>7.3 局部变量定义<br />
l 同一行内不要定义过多变量。<br />
l 同一类的变量在同一行内定义，或者在相邻行定义。<br />
l 先定义data型变量，再定义idtata型变量，再定义xdata型变量.<br />
l 数组、指针等复杂类型的定义放在定义区的最后。<br />
l 变量定义区不做较复杂的变量赋值。</p>
<p>7.4 功能实现区规范<br />
l 一行只写一条语句。<br />
l 注意运算符的优先级，并用括号明确表达式的操作顺序，避免使用默认优先级。<br />
l 各程序段之间使用一个空行分隔，加以必要的注释。程序段指能完一个较具体的功能的一行或多行代码。程序段内的各行代码之间相互依赖性较强。<br />
l 不要使用难懂的技巧性很高的语句。<br />
l 源程序中关系较为紧密的代码应尽可能相邻。<br />
l 完成简单功能、关系非常密切的一条或几条语句可编写为函数或定义为宏。</p>
<p>8 单片机C51编程规范－排版</p>
<p>8.1 缩进<br />
代码的每一级均往右缩进4个空格的位置。</p>
<p>8.2 分行<br />
过长的语句（超过80个字符）要分成多行书写；长表达式要在低优先级操作符处划分新行，操作符放在新行之首，划分出的新行要进适当的缩进，使排版整齐，语句可读。避免把注释插入分行中。</p>
<p>8.3 空行<br />
l 文件注释区、头文件引用区、函数间应该有且只有一行空行。<br />
l 相邻函数之间应该有且只有一行空行。<br />
l 函数体内相对独立的程序块之间可以用一行空行或注释来分隔。<br />
l 函数注释和对应的函数体之间不应该有空行。<br />
l 文件末尾有且只有一行空行。</p>
<p>8.4 空格<br />
l 函数语句尾部或者注释之后不能有空格。<br />
l 括号内侧（即左括号后面和右括号前面）不加空格，多重括号间不加空格。<br />
l 函数形参之间应该有且只有一个空格（形参逗号后面加空格）。<br />
l 同一行中定义的多个变量间应该有且只有一个空格（变量逗号后面加空格）。<br />
l 表达式中，若有多个操作符连写的情况，应使用空格对它们分隔：<br />
在两个以上的关键字、变量、常量进行对等操作时，它们之间的操作符前后均加一个空格；在两个以上的关键字、变量、常量进行非对等操作时，其前后均不应加空格；<br />
逗号只在后面加空格；<br />
双目操作符，如比较操作符, 赋值操作符&#8221;=&#8221;、&#8221;+=&#8221;，算术操作符&#8221;+&#8221;、&#8221;%&#8221;，逻辑操作符&#8221;&amp;&amp;&#8221;、&#8221;&amp;&#8221;，位操作符&#8221;&lt;&lt;&#8221;、&#8221;^&#8221;等，前后均加一个空格；<br />
单目操作符，如&#8221;!&#8221;、&#8221;~&#8221;、&#8221;++&#8221;、&#8221;-&#8221;、&#8221;&amp;&#8221;（地址运算符）等，前后不加空格；<br />
&#8220;-&gt;&#8221;、&#8221;.&#8221;前后不加空格；<br />
if、for、while、switch等关键字与后面的括号间加一个空格；</p>
<p>8.5 花括号<br />
l if、else if、else、for、while语句无论其执行体是一条语句还是多条语句都必须加花括号，且左右花括号各独占一行。<br />
l do{}while()结构中，&#8221;do&#8221;和&#8221;{&#8220;均各占一行，&#8221;}&#8221;和&#8221;while();&#8221;共同占用一行。<br />
if ( ) do<br />
{ {</p>
<p>} }while( );<br />
else<br />
{</p>
<p>}</p>
<p>8.6 switch语句<br />
l 每个case和其判据条件独占一行。<br />
l 每个case程序块需用break结束。特殊情况下需要从一个case块顺序执行到下一个case块的时候除外，但需要在交界处明确注释如此操作的原因，以防止出错。<br />
l case程序块之间空一行，且只空一行。<br />
l 每个case程序块的执行语句保持4个空格的缩进。<br />
l 一般情况下都应该包含default分支。<br />
Switch ( )<br />
{<br />
case x:</p>
<p>break;</p>
<p>case x:</p>
<p>break;</p>
<p>default:</p>
<p>break;<br />
}</p>
<p>9 单片机C51编程规范－程序结构</p>
<p>9.1 基本要求<br />
l 有main()函数的.c文件应将main()放在最前面，并明确用void声明参数和返回值。<br />
l 对由多个.c文件组成的模块程序或完整监控程序，建立公共引用头文件，将需要引用的库头文件、标准寄存器定义头文件、自定义的头文件、全局变量等均包含在内，供每个文件引用。通常，标准函数库头文件采用尖角号&lt; &gt;标志文件名，自定义头文件采用双撇号″″标志文件名。<br />
l 每个.c文件有一个对应的.h文件，.c文件的注释之后首先定义一个唯一的文件标志宏，并在对应的.h文件中解析该标志。<br />
在.c文件中：<br />
#define FILE_FLAG<br />
在.h文件中：<br />
#ifdef FILE_FLAG<br />
#define XXX<br />
#else<br />
#define XXX extern<br />
#endif<br />
l 对于确定只被某个.c文件调用的定义可以单独列在一个头文件中、单独调用。</p>
<p>9.2 可重入函数<br />
可重入函数中若使用了全局变量，应通过关中断、信号量等操作手段对其加以保护。</p>
<p>9.3 函数的形参<br />
l 由函数调用者负责检查形参的合法性。<br />
l 尽量避免将形参作为工作变量使用。</p>
<p>9.4 循环<br />
l 尽量减少循环嵌套层数<br />
l 在多重循环中，应将最忙的循环放在最内层<br />
l 循环体内工作量最小<br />
l 尽量避免循环体内含有判断语句</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=230&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/%e5%8d%95%e7%89%87%e6%9c%ba%e7%bc%96%e7%a8%8b%e8%a7%84%e8%8c%83/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
		<item>
		<title>PCB设计经验总结</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/pcb%e8%ae%be%e8%ae%a1%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/pcb%e8%ae%be%e8%ae%a1%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:49:04 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[电子技术]]></category>
		<category><![CDATA[DRC]]></category>
		<category><![CDATA[PCB]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=228</guid>
		<description><![CDATA[1. 根据线路板厂家的能力设定线路板基本参数 根据沧州一带线路板厂的水平，按下列参数设计线路板质量应能保证： * 最小导线宽度：8mil； * 最小导线间距：8mil； * 最小过孔焊盘直径：30mil； * 最小过孔孔径：16mil； * DRC检查最小间距：8mil； 2. 线路板布局 * 固定孔和线路板外形按结构要求以公制尺寸绘制； * 螺钉固定孔的焊盘要大于螺钉帽和螺母的直径，以M3的螺钉为例，其焊盘直径为6.5mm，钻孔直径为3.2mm。 * 外围接插件位置要总体考虑，避免电缆错位、扭曲； * 其他器件要以英制尺寸布置在最小25mil的网格上，以利布线； * 按功能把器件分成多个单元，在显示网络飞线的情况下把单元的各个器件定位； * 把各个单元移到线路板的合适位置，利用块移动和旋转功能使大部分走线合理； * 模拟电路与数字电路分片布置，数字部分的电流尽量不要穿越模拟区； * 模拟电路按信号走向布置，大信号线不得穿越小信号区； * 晶体和连接电容下方不得走其他信号线，以免振荡频率不稳； * 除单列器件外只允许移动、旋转，不得翻转，否则器件只能焊于焊接面； * 核对器件封装 同一型号的贴片器件有不同封装。例如SO14 塑料本体宽度有0.15英寸（3.8mm）和5.1mm的区别。 * 核对器件安装位置 器件布局初步完成后，应打出1:1的器件图，核对边沿器件安装位置是否合适。 3. 布线 3.1 线宽 信号线：8～12mil； 电源线：30～100mil（A级电源线可用矩形焊盘加焊裸导线以增加通过电流量）； 3.2 标准英制器件以25 mil间距走线。 3.3 公制管脚以5mil间距走线，距离管脚不远处拐弯，尽量走到25mil网格上，便于以后导线调整。 3.4  8mil线宽到过孔中心间距为30mil。 3.5 <a href="http://superkyle1888.wordpress.com/2011/02/02/pcb%e8%ae%be%e8%ae%a1%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93/" class="excerpt-more-link">[&#8230;]</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=228&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>
<p><span style="font-family:'Times New Roman';">1.</span><br />
根据线路板厂家的能力设定线路板基本参数</p>
<p>根据沧州一带线路板厂的水平，按下列参数设计线路板质量应能保证：</p>
<p>* 最小导线宽度：<span style="font-family:'Times New Roman';">8mil</span>；</p>
<p>* 最小导线间距：<span style="font-family:'Times New Roman';">8mil</span>；</p>
<p>* 最小过孔焊盘直径：<span style="font-family:'Times New Roman';">30mil</span>；</p>
<p>* 最小过孔孔径：<span style="font-family:'Times New Roman';">16mil</span>；</p>
<p>* <span style="font-family:'Times New Roman';">DRC</span>检查最小间距：<span style="font-family:'Times New Roman';">8mil</span>；</p>
<p><span style="font-family:'Times New Roman';">2.</span> 线路板布局</p>
<p>* 固定孔和线路板外形按结构要求以公制尺寸绘制；</p>
<p>* 螺钉固定孔的焊盘要大于螺钉帽和螺母的直径，以<span style="font-family:'Times New Roman';">M3</span>的螺钉为例，其焊盘直径为<span style="font-family:'Times New Roman';">6.5mm</span>，钻孔直径为<span style="font-family:'Times New Roman';">3.2mm</span>。</p>
<p>* 外围接插件位置要总体考虑，避免电缆错位、扭曲；</p>
<p>* 其他器件要以英制尺寸布置在最小<span style="font-family:'Times New Roman';">25mil</span>的网格上，以利布线；</p>
<p>* 按功能把器件分成多个单元，在显示网络飞线的情况下把单元的各个器件定位；</p>
<p>* 把各个单元移到线路板的合适位置，利用块移动和旋转功能使大部分走线合理；</p>
<p>* 模拟电路与数字电路分片布置，数字部分的电流尽量不要穿越模拟区；</p>
<p>* 模拟电路按信号走向布置，大信号线不得穿越小信号区；</p>
<p>* 晶体和连接电容下方不得走其他信号线，以免振荡频率不稳；</p>
<p>* 除单列器件外只允许移动、旋转，不得翻转，否则器件只能焊于焊接面；</p>
<p>* 核对器件封装</p>
<p>同一型号的贴片器件有不同封装。例如<span style="font-family:'Times New Roman';">SO14</span> 塑料本体宽度有<span style="font-family:'Times New Roman';">0.15</span>英寸（<span style="font-family:'Times New Roman';">3.8mm</span>）和<span style="font-family:'Times New Roman';">5.1mm</span>的区别。</p>
<p>* 核对器件安装位置</p>
<p>器件布局初步完成后，应打出<span style="font-family:'Times New Roman';">1:1</span>的器件图，核对边沿器件安装位置是否合适。</p>
<p><span style="font-family:'Times New Roman';">3.</span> 布线</p>
<p><span style="font-family:'Times New Roman';">3.1</span> 线宽</p>
<p>信号线：<span style="font-family:'Times New Roman';">8</span>～<span style="font-family:'Times New Roman';">12mil</span>；</p>
<p>电源线：<span style="font-family:'Times New Roman';">30</span>～<span style="font-family:'Times New Roman';">100mil</span>（<span style="font-family:'Times New Roman';">A</span>级电源线可用矩形焊盘加焊裸导线以增加通过电流量）；</p>
<p><span style="font-family:'Times New Roman';">3.2</span><br />
标准英制器件以<span style="font-family:'Times New Roman';">25 mil</span>间距走线。</p>
<p><span style="font-family:'Times New Roman';">3.3</span><br />
公制管脚以<span style="font-family:'Times New Roman';">5mil</span>间距走线，距离管脚不远处拐弯，尽量走到<span style="font-family:'Times New Roman';">25mil</span>网格上，便于以后导线调整。</p>
<p><span style="font-family:'Times New Roman';">3.4  8mil</span>线宽到过孔中心间距为<span style="font-family:'Times New Roman';">30mil</span>。</p>
<p><span style="font-family:'Times New Roman';">3.5</span><br />
大量走线方向交叉时可把贴片器件改到焊接面。</p>
<p><span style="font-family:'Times New Roman';">3.6</span><br />
原理图连线不见得合理，可适当修改原理图，重作网络表，使走线尽量简洁、合理。</p>
<p>*　<span style="font-family:'Times New Roman';">62256<br />
RAM</span>芯片的数据、地址线可不按元件图排列；</p>
<p>*　<span style="font-family:'Times New Roman';">MCU</span><br />
的外接<span style="font-family:'Times New Roman';">IO</span>管脚可适当调整；</p>
<p>*　地址锁存芯片的引脚可适当变动，但要注意信号的对应关系；</p>
<p>*　<span style="font-family:'Times New Roman';">CPLD</span>和<span style="font-family:'Times New Roman';">GAL</span>的引脚可适当调整。</p>
<p><span style="font-family:'Times New Roman';">3.7</span>在用贴片管脚较多的器件时，布线不一定坚持横竖各在一面的原则，应以走线简洁、合理为准。</p>
<p><span style="font-family:'Times New Roman';">3.8</span><br />
预留电源和地线走线空间。</p>
<p><span style="font-family:'Times New Roman';">3.9</span><br />
电源线换面时最好在器件管脚处，过孔的电阻较大。</p>
<p><span style="font-family:'Times New Roman';">3.10</span><br />
不应连接的器件有飞线，可能是原理图网络标号相同所致，应修改原理图。</p>
<p><span style="font-family:'Times New Roman';">4.</span> 线间距压缩</p>
<p><span style="font-family:'Times New Roman';"> </span>在引线密度较高，差几根线布放困难时可采取以下办法：</p>
<p>* <span style="font-family:'Times New Roman';">8mil</span>线宽线间距由<span style="font-family:'Times New Roman';">25mil</span>改为<span style="font-family:'Times New Roman';">20 mil</span>；</p>
<p>* 过孔较多时可把经过孔的相反方向的走线调整到一排；</p>
<p>* 经过孔的走线弯曲，压缩线间距；</p>
<p><span style="font-family:'Times New Roman';">5. DRC</span>检查</p>
<p><span style="font-family:'Times New Roman';">DRC</span>检查的间距一般为<span style="font-family:'Times New Roman';">10mil</span>，如布线困难也可设为<span style="font-family:'Times New Roman';">8 mil</span>。</p>
<p>布地网前应作一次<span style="font-family:'Times New Roman';">DRC</span>检查，即除<span style="font-family:'Times New Roman';">GND</span>没布线外不得有其他问题。如发现问题也容易处理。</p>
<p><span style="font-family:'Times New Roman';">6.</span> 佈地网（铺铜）</p>
<p>佈地网首先能减小地线电阻，即减小由地线电阻（电感）形成的电压降，使电路工作稳定。另外也可减少对外辐射，增强电磁兼容性。早期采用网格，近来很多采用连在一起的铜箔。</p>
<p><span style="font-family:'Times New Roman';"> </span>佈地网用<span style="font-family:'Times New Roman';">DXP</span>软件较好，即缺画导线较少。</p>
<p><span style="font-family:'Times New Roman';">6.1</span> 初始设置</p>
<p><span style="font-family:'Times New Roman';">DRC</span>检查的间距设置：<span style="font-family:'Times New Roman';">16mil</span>（<span style="font-family:'Times New Roman';">DRC</span>检查时要改回<span style="font-family:'Times New Roman';">10mil</span>）</p>
<p>（焊盘与地网距离较大，焊接时不易短路）</p>
<p><span style="font-family:'Times New Roman';"> </span>网格间距：<span style="font-family:'Times New Roman';">10mil</span></p>
<p><span style="font-family:'Times New Roman';"> </span>线宽：<span style="font-family:'Times New Roman';">10mil</span></p>
<p><span style="font-family:'Times New Roman';"> </span>不删除死铜。</p>
<p>&nbsp;</p>
<p><span style="font-family:'Times New Roman';">6.2</span> 布线</p>
<p>布线前应在元件面丝印层画出佈地网的范围，以免两面不一致。这些线布完后删除。</p>
<p><span style="font-family:'Times New Roman';">6.3</span> 加过孔</p>
<p>过孔不只起把死铜连接的作用，在可能的地方尽量多加过孔（<span style="font-family:'Times New Roman';">10mm</span>间距），以使地电阻最小。</p>
<p><span style="font-family:'Times New Roman';">6.4</span> 删除死铜</p>
<p>多余死铜使两边导线电容加大，增加不必要的耦合，必须删除。</p>
<p><span style="font-family:'Times New Roman';">7.</span> 钻孔孔径调整</p>
<p><span style="font-family:'Times New Roman';"> </span>由于一般阻容件、集成电路管脚直径在<span style="font-family:'Times New Roman';">0.5~0.6mm</span>之间，<span style="font-family:'Times New Roman';">50mil</span>焊盘的缺省孔径为<span style="font-family:'Times New Roman';">30mil</span>（<span style="font-family:'Times New Roman';">0.76mm</span>），焊接无问题。对直径较大的二极管、单双排插针就不合适，甚至会插不进去，把孔径改为<span style="font-family:'Times New Roman';">39mil</span>（约为<span style="font-family:'Times New Roman';">1 mm</span>）即可。</p>
<p>管脚直径大于<span style="font-family:'Times New Roman';">1mm</span>的器件，无法在<span style="font-family:'Times New Roman';">50mil</span>焊盘上应用，这是器件库设计问题。</p>
<p><span style="font-family:'Times New Roman';">8.</span> 器件标号调整</p>
<p>把器件标号移到合适位置，在器件较密时容易把标号放错，此时应用器件编辑命令核对。</p>
<p><span style="font-family:'Times New Roman';">9.</span> 编制元器件表</p>
<p>编制元器件表的目的是给器件采购和线路板焊接准备必要文件。建议按以下原则编制：</p>
<p>* 器件顺序按电阻、电容、电感、集成电路、其他排列；</p>
<p>* 同类器件按数值从小到大排列；</p>
<p>* 器件应标明型号、数量、安装位置（器件标号）；</p>
<p>* 集成电路应在备注栏标明封装型式；</p>
<p>* 焊插座的器件应标明插座型号；</p>
<p>* 特殊器件（如高精度电阻）应注明。</p>
<p><span style="font-family:'Times New Roman';">10.</span> 元件封装设计</p>
<p><span style="font-family:'Times New Roman';">10.1</span>元件封装设计的必要性</p>
<p>* 新器件没有现成的封装；</p>
<p>* 贴片器件自动贴装焊盘可以和器件焊盘一致，手工焊接要留出焊接余量。</p>
<p><span style="font-family:'Times New Roman';">10.2</span>元件封装设计</p>
<p>* 在元件丝印面画出带器件方向的元件外形，以防器件放置拥挤；</p>
<p>* 贴片器件焊盘要长出器件管脚<span style="font-family:'Times New Roman';">0.5mm</span>，便于手工焊接；</p>
<p>* 插板器件焊盘孔径要大于管脚直径<span style="font-family:'Times New Roman';">0.2mm</span>，便于焊锡流动；</p>
<p>* 管脚编号要与原理图一致（不用管脚也要编号）；</p>
<p>* 核对管脚编号；</p>
<p>* 打印<span style="font-family:'Times New Roman';">1:1</span>图形，与实际器件核对。</p>
<p><span style="font-family:'Times New Roman';">10.3</span><br />
使用元件封装库应注意的几个问题</p>
<p>* <span style="font-family:'Times New Roman';">DB</span>插头座针、孔管脚排列相反，容易用错；</p>
<p>* <span style="font-family:'Times New Roman';">3</span>脚分立器件封装与原理图可能不一致；</p>
<p>* <span style="font-family:'Times New Roman';">DC2</span>带耳接插件要留出合适的安装空间；</p>
<p>* 立式接插件与卧式接插件封装图不同；</p>
<p>* 把器件改放到焊接面可用器件编辑来实现</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/228/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=228&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/pcb%e8%ae%be%e8%ae%a1%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
		<item>
		<title>PCB地线布线原则</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/pcb%e5%9c%b0%e7%ba%bf%e5%b8%83%e7%ba%bf%e5%8e%9f%e5%88%99/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/pcb%e5%9c%b0%e7%ba%bf%e5%b8%83%e7%ba%bf%e5%8e%9f%e5%88%99/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:43:52 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[电子技术]]></category>
		<category><![CDATA[GND]]></category>
		<category><![CDATA[PCB]]></category>
		<category><![CDATA[地线]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=225</guid>
		<description><![CDATA[在电子设备中，接地是控制干扰的重要方法。如能将接地和屏蔽正确结合起来使用，可解决大部分干扰问题。电子设备中地线结构大致有系统地、机壳地（屏蔽地）、数字地（逻辑地）和模拟地等。在地线设计中应注意以下几点： 1.正确选择单点接地与多点接地 在低频电路中，信号的工作频率小于1MHz，它的布线和器件间的电感影响较小，而接地电路形成的环流对干扰影响较大，因而应采用一点接地。当信号工作频率大于10MHz时，地线阻抗变得很大，此时应尽量降低地线阻抗，应采用就近多点接地。当工作频率在1～10MHz时，如果采用一点接地，其地线长度不应超过波长的1/20，否则应采用多点接地法。 2.将数字电路与模拟电路分开 电路板上既有高速逻辑电路，又有线性电路，应使它们尽量分开，而两者的地线不要相混，分别与电源端地线相连。要尽量加大线性电路的接地面积。 3.尽量加粗接地线 若接地线很细，接地电位则随电流的变化而变化，致使电子设备的定时信号电平不稳，抗噪声性能变坏。因此应将接地线尽量加粗，使它能通过三位于印制电路板的允许电流。如有可能，接地线的宽度应大于3mm。 4.将接地线构成闭环路 设计只由数字电路组成的印制电路板的地线系统时，将接地线做成闭环路可以明显的提高抗噪声能力。其原因在于：印制电路板上有很多集成电路元件，尤其遇有耗电多的元件时，因受接地线粗细的限制，会在地结上产生较大的电位差，引起抗噪声能力下降，若将接地结构成环路，则会缩小电位差值，提高电子设备的抗噪声能力<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=225&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="text-indent:2em;">在电子设备中，接地是控制干扰的重要方法。如能将接地和屏蔽正确结合起来使用，可解决大部分干扰问题。电子设备中地线结构大致有系统地、机壳地（屏蔽地）、数字地（逻辑地）和模拟地等。在地线设计中应注意以下几点：</div>
<div style="text-indent:2em;">
<p>1.正确选择单点接地与多点接地</p>
<p>在低频电路中，信号的工作频率小于1MHz，它的布线和器件间的电感影响较小，而接地电路形成的环流对干扰影响较大，因而应采用一点接地。当信号工作频率大于10MHz时，地线阻抗变得很大，此时应尽量降低地线阻抗，应采用就近多点接地。当工作频率在1～10MHz时，如果采用一点接地，其地线长度不应超过波长的1/20，否则应采用多点接地法。</p></div>
<div style="text-indent:2em;">
<p>2.将数字电路与模拟电路分开</p>
<p>电路板上既有高速逻辑电路，又有线性电路，应使它们尽量分开，而两者的地线不要相混，分别与电源端地线相连。要尽量加大线性电路的接地面积。</p></div>
<div style="text-indent:2em;">
<p>3.尽量加粗接地线</p>
<p>若接地线很细，接地电位则随电流的变化而变化，致使电子设备的定时信号电平不稳，抗噪声性能变坏。因此应将接地线尽量加粗，使它能通过三位于印制电路板的允许电流。如有可能，接地线的宽度应大于3mm。</p></div>
<div style="text-indent:2em;">
<p>4.将接地线构成闭环路</p>
<p>设计只由数字电路组成的印制电路板的地线系统时，将接地线做成闭环路可以明显的提高抗噪声能力。其原因在于：印制电路板上有很多集成电路元件，尤其遇有耗电多的元件时，因受接地线粗细的限制，会在地结上产生较大的电位差，引起抗噪声能力下降，若将接地结构成环路，则会缩小电位差值，提高电子设备的抗噪声能力</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/225/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/225/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=225&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/pcb%e5%9c%b0%e7%ba%bf%e5%b8%83%e7%ba%bf%e5%8e%9f%e5%88%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
		<item>
		<title>硬件设计中一些术语的简称</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/%e7%a1%ac%e4%bb%b6%e8%ae%be%e8%ae%a1%e4%b8%ad%e4%b8%80%e4%ba%9b%e6%9c%af%e8%af%ad%e7%9a%84%e7%ae%80%e7%a7%b0/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/%e7%a1%ac%e4%bb%b6%e8%ae%be%e8%ae%a1%e4%b8%ad%e4%b8%80%e4%ba%9b%e6%9c%af%e8%af%ad%e7%9a%84%e7%ae%80%e7%a7%b0/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:38:42 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[电子技术]]></category>
		<category><![CDATA[ASIC]]></category>
		<category><![CDATA[BOM]]></category>
		<category><![CDATA[CISC]]></category>
		<category><![CDATA[电平]]></category>
		<category><![CDATA[稳压器]]></category>
		<category><![CDATA[DSP]]></category>
		<category><![CDATA[ESR]]></category>
		<category><![CDATA[FPGA]]></category>
		<category><![CDATA[LDO]]></category>
		<category><![CDATA[MCU]]></category>
		<category><![CDATA[MOS]]></category>
		<category><![CDATA[OC]]></category>
		<category><![CDATA[OD]]></category>
		<category><![CDATA[RISC]]></category>
		<category><![CDATA[TTL]]></category>
		<category><![CDATA[压降]]></category>
		<category><![CDATA[晶体管]]></category>
		<category><![CDATA[上拉电阻]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=222</guid>
		<description><![CDATA[1.什么是BOM 2.什么是LDO 3.什么是ESR 4.什么是TTL 5.什么是MOS、NMOS、PMOS、CMOS 6.什么是OC、OD 7.什么是线或逻辑与线与逻辑 8.什么是推挽结构 9.什么是MCU、RISC、CISC、DSP 10.什么是FPGA和ASIC 11.FPGA 与 CPLD 的异同点 1.什么是BOM BOM(BillOfMaterial),是制造业管理的重点之一,简单的定义就是“记载产品组成所需使用材料的表”。以一个新产品的诞生来看:首先是创意与可行**研究的初期过程,接下来的过程就是初步的工程技术分析与原型产品的设计,等到原型产品比较稳定后,经过自制或外购分析(MakeorBuyAnalysisandDecision)后就会产生第一版的工程料表(EBOM,EngineeringBOM)。到正式量产之前,第一版的生产料表(PBOM,ProductionBOM)必须要先完成,以便企业内的相关部门有所遵循。在此之后,就进入了正常的例行维护阶段。 2. 什么是 LDO（低压降）稳压器? LDO 是一种线**稳压器。线**稳压器使用在其线**区域内运行的晶体管或 FET,从应用的输入电压中减去超额的电压,产生经过调节的输出电压。所谓压降电压,是指稳压器将输出电压维持在其额定值上下 100mV 之内所需的输入电压与输出电压差额的最小值。正输出电压的LDO（低压降）稳压器通常使用功率晶体管（也称为传递设备）作为 PNP。这种晶体管允许饱和,所以稳压器可以有一个非常低的压降电压,通常为 200mV 左右;与之相比,使用 NPN 复合电源晶体管的传统线**稳压器的压降为 2V 左右。负输出 LDO 使用 NPN 作为它的传递设备,其运行模式与正输出 LDO 的 PNP设备类似。更新的发展使用 CMOS 功率晶体管,它能够提供最低的压降电压。使用 CMOS,通过稳压器的唯一电压压降是电源设备负载电流的 ON 电阻造成的。如果负载较小,这种方式产生的压降只有几十毫伏。 3.什么是ESR 电容的等效串联电阻,越低的话Q值越小。 4.什么是TTL Transistor-Transistor Logic晶体管-晶体管逻辑电路 (双极**型电路,指包含电子和空**两种极**的载流子) 5.什么是MOS、NMOS、PMOS、CMOS MOS(Metal-OxideSemiconductor 金属-氧化物半导体场效应管,单极**)有增强型和耗尽型两种,主要是以下三类 P沟道增强型管构成的PMOS电路 N沟道增强型管构成的NMOS电路 PMOS和NMOS构成的CMOS(互补MOS,Complementary <a href="http://superkyle1888.wordpress.com/2011/02/02/%e7%a1%ac%e4%bb%b6%e8%ae%be%e8%ae%a1%e4%b8%ad%e4%b8%80%e4%ba%9b%e6%9c%af%e8%af%ad%e7%9a%84%e7%ae%80%e7%a7%b0/" class="excerpt-more-link">[&#8230;]</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=222&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:medium;"><span style="color:#0000ff;">1.什么是BOM</p>
<p>2.什么是LDO</p>
<p>3.什么是ESR</p>
<p>4.什么是TTL</p>
<p>5.什么是MOS、NMOS、PMOS、CMOS</p>
<p>6.什么是OC、OD</p>
<p>7.什么是线或逻辑与线与逻辑</p>
<p>8.什么是推挽结构</p>
<p>9.什么是MCU、RISC、CISC、DSP</p>
<p>10.什么是FPGA和ASIC</p>
<p>11.FPGA 与 CPLD 的异同点</p>
<p></span><span style="color:green;">1.什么是BOM</span><br />
</span><span style="font-size:medium;"><span style="color:#0000ff;"><br />
BOM(BillOfMaterial),是制造业管理的重点之一,简单的定义就是“记载产品组成所需使用材料的表”。以一个新产品的诞生来看:首先是创意与可行**研究的初期过程,接下来的过程就是初步的工程技术分析与原型产品的设计,等到原型产品比较稳定后,经过自制或外购分析(MakeorBuyAnalysisandDecision)后就会产生第一版的工程料表(EBOM,EngineeringBOM)。到正式量产之前,第一版的生产料表(PBOM,ProductionBOM)必须要先完成,以便企业内的相关部门有所遵循。在此之后,就进入了正常的例行维护阶段。<br />
</span></span></p>
<p><span style="font-size:medium;"><span style="color:#0000ff;"> </span></span></p>
<p><span style="font-size:medium;"><span style="color:#0000ff;"><br />
</span><span style="color:green;">2. 什么是<br />
LDO（低压降）稳压器?</span><br />
</span><span style="font-size:medium;"><span style="color:#0000ff;"><br />
LDO<br />
是一种线**稳压器。线**稳压器使用在其线**区域内运行的晶体管或 FET,从应用的输入电压中减去超额的电压,产生经过调节的输出电压。所谓压降电压,是指稳压器将输出电压维持在其额定值上下<br />
100mV 之内所需的输入电压与输出电压差额的最小值。正输出电压的LDO（低压降）稳压器通常使用功率晶体管（也称为传递设备）作为<br />
PNP。这种晶体管允许饱和,所以稳压器可以有一个非常低的压降电压,通常为 200mV 左右;与之相比,使用 NPN<br />
复合电源晶体管的传统线**稳压器的压降为 2V<br />
左右。负输出 LDO 使用 NPN 作为它的传递设备,其运行模式与正输出 LDO 的 PNP设备类似。更新的发展使用 CMOS<br />
功率晶体管,它能够提供最低的压降电压。使用 CMOS,通过稳压器的唯一电压压降是电源设备负载电流的 ON<br />
电阻造成的。如果负载较小,这种方式产生的压降只有几十毫伏。</p>
<p></span><span style="color:green;">3.什么是ESR</span><br />
</span><span style="font-size:medium;"><span style="color:#0000ff;"><br />
电容的等效串联电阻,越低的话Q值越小。</p>
<p></span><span style="color:green;">4.什么是TTL</span><br />
</span><span style="font-size:medium;"><span style="color:#0000ff;"><br />
Transistor-Transistor<br />
Logic晶体管-晶体管逻辑电路 (双极**型电路,指包含电子和空**两种极**的载流子)</p>
<p></span><span style="color:green;">5.什么是MOS、NMOS、PMOS、CMOS</span><br />
</span><span style="font-size:medium;"><span style="color:#0000ff;"></p>
<p>MOS(Metal-OxideSemiconductor<br />
金属-氧化物半导体场效应管,单极**)有增强型和耗尽型两种,主要是以下三类<br />
</span></span></p>
<p><span style="font-size:medium;"><span style="color:#0000ff;"><br />
P沟道增强型管构成的PMOS电路<br />
N沟道增强型管构成的NMOS电路</p>
<p></span></span></p>
<p><span style="font-size:medium;"><span style="color:#0000ff;"><br />
PMOS和NMOS构成的CMOS(互补MOS,Complementary<br />
Metal-Oxide-Semiconductor Transistor 互补型金属氧化物半导体)电路</p>
<p></span><span style="color:green;">6.什么是OC、OD</span><br />
</span><span style="color:#0000ff;font-size:medium;">集电极开路门(集电极开路 OC 或源极开路 OD)</p>
<p>open-drain是漏极开路输出的意思,相当于集电极开路(open-collector)输出,即ttl中的集电极开路（oc）输出。一般用于线或、线与,也有的用于电流驱动。<br />
</span></p>
<p><span style="color:#0000ff;font-size:medium;"><br />
open-drain是对mos管而言,open-collector是对双极型管而言,在用法上没啥区别。<br />
开漏形式的电路有以下几个特点：</p>
<p>a. 利用外部电路的驱动能力,减少IC内部的驱动。 或驱动比芯片电源电压高的负载.</p>
<p>b.可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。如果作为输出必须接上拉电阻。接容**负载时,下降延是芯片内的晶体管,是有源驱动,速度较快;上升延是无源的外接电阻,速度慢。如果要求速度高电阻选择要小,功耗会大。所以负载电阻的选择要兼顾功耗和速度。</p>
<p>c. 可以利用改变上拉电源的电压,改变传输电平。例如加上上拉电阻就可以提供TTL/CMOS电平输出等。</p>
<p>d. 开漏Pin不连接外部的上拉电阻,则只能输出低电平。一般来说,开漏是用来连接不同电平的器件,匹配电平用的。</p>
<p>正常的CMOS输出级是上、下两个管子,把上面的管子去掉就是OPEN-DRAIN了。这种输出的主要目的有两个：电平转换和线与。</p>
<p>由于漏级开路,所以后级电路必须接一上拉电阻,上拉电阻的电源电压就可以决定输出电平。这样你就可以进行任意电平的转换了。</p>
<p>线与功能主要用于有多个电路对同一信号进行拉低**作的场合,如果本电路不想拉低,就输出高电平,因为OPEN-DRAIN上面的管子被拿掉,高电平是靠外接的上拉电阻实现的。（而正常的CMOS输出级,如果出现一个输出为高另外一个为低时,等于电源短路。）</p>
<p></span></p>
<p><span style="color:#0000ff;font-size:medium;"><br />
OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/222/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/222/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/222/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=222&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/%e7%a1%ac%e4%bb%b6%e8%ae%be%e8%ae%a1%e4%b8%ad%e4%b8%80%e4%ba%9b%e6%9c%af%e8%af%ad%e7%9a%84%e7%ae%80%e7%a7%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
		<item>
		<title>常用的分立及IC元件封装</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/%e5%b8%b8%e7%94%a8%e7%9a%84%e5%88%86%e7%ab%8b%e5%8f%8aic%e5%85%83%e4%bb%b6%e5%b0%81%e8%a3%85/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/%e5%b8%b8%e7%94%a8%e7%9a%84%e5%88%86%e7%ab%8b%e5%8f%8aic%e5%85%83%e4%bb%b6%e5%b0%81%e8%a3%85/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:27:43 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[电子技术]]></category>
		<category><![CDATA[IC]]></category>
		<category><![CDATA[PCB]]></category>
		<category><![CDATA[封装]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=217</guid>
		<description><![CDATA[直插式电阻器或无极性端子元件： AXIAL0.3～AXIAL1.0； 直插式无极性电容： RAD0.1～RAD0.4； 直插式有极性电容： RB.2/.4～RB.5/1.0； 晶振： XTAL1； 按键开关： SIP2、RAD0.3； 指拨开关： DIPx； 可变电阻器： VR1～VR5； 直插式二极管： DIODE0.4、DIODE0.7； 直插式晶体管、Mosfet、FET、UJT： TO-xxx； 双列直插IC： DIPx、DIP-x； 电源接头： POWER4、POWER6、SIPx； 单排插针： SIPx； 双排插针： IDCx； 串口通讯终端接口： DB9/F～DB37RA/M； 贴片电阻、贴片无极性电容： 0402～7257； 贴片二极管： 0402～7257； 贴片有极性电容： TANT-A～TANT-D； 贴片三极管、贴片场效应管： SOT-xxx； 芯片载体封装： LCCC、PLCC、SOP、QFP； 引脚栅格阵列封装： PGA； 球形栅格阵列封装： BGA； 芯片尺寸封装： CSP. 注：以上封装均为英制称谓.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=217&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>直插式电阻器或无极性端子元件：      AXIAL0.3～AXIAL1.0；</p>
<p>直插式无极性电容：                  RAD0.1～RAD0.4；</p>
<p>直插式有极性电容：                  RB.2/.4～RB.5/1.0；</p>
<p>晶振：                              XTAL1；</p>
<p>按键开关：                          SIP2、RAD0.3；</p>
<p>指拨开关：                          DIPx；</p>
<p>可变电阻器：                        VR1～VR5；</p>
<p>直插式二极管：                      DIODE0.4、DIODE0.7；</p>
<p>直插式晶体管、Mosfet、FET、UJT： TO-xxx；</p>
<p>双列直插IC： DIPx、DIP-x；</p>
<p>电源接头：                          POWER4、POWER6、SIPx；</p>
<p>单排插针：                          SIPx；</p>
<p>双排插针：                          IDCx；</p>
<p>串口通讯终端接口：                  DB9/F～DB37RA/M；</p>
<p>贴片电阻、贴片无极性电容：          0402～7257；</p>
<p>贴片二极管：                        0402～7257；</p>
<p>贴片有极性电容：                    TANT-A～TANT-D；</p>
<p>贴片三极管、贴片场效应管：          SOT-xxx；</p>
<p>芯片载体封装：                      LCCC、PLCC、SOP、QFP；</p>
<p>引脚栅格阵列封装：                  PGA；</p>
<p>球形栅格阵列封装：                  BGA；</p>
<p>芯片尺寸封装：                      CSP.</p>
<p>注：以上封装均为英制称谓.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=217&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/%e5%b8%b8%e7%94%a8%e7%9a%84%e5%88%86%e7%ab%8b%e5%8f%8aic%e5%85%83%e4%bb%b6%e5%b0%81%e8%a3%85/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
		<item>
		<title>MC C18编译器占用RAM大?（PIC单片机RAM的分配）</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/mc-c18%e7%bc%96%e8%af%91%e5%99%a8%e5%8d%a0%e7%94%a8ram%e5%a4%a7%ef%bc%88pic%e5%8d%95%e7%89%87%e6%9c%baram%e7%9a%84%e5%88%86%e9%85%8d%ef%bc%89/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/mc-c18%e7%bc%96%e8%af%91%e5%99%a8%e5%8d%a0%e7%94%a8ram%e5%a4%a7%ef%bc%88pic%e5%8d%95%e7%89%87%e6%9c%baram%e7%9a%84%e5%88%86%e9%85%8d%ef%bc%89/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:25:31 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[电子技术]]></category>
		<category><![CDATA[C18]]></category>
		<category><![CDATA[PIC]]></category>
		<category><![CDATA[RAM]]></category>
		<category><![CDATA[单片机]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=215</guid>
		<description><![CDATA[C18 (MPLAB C for PIC18) 所有的記憶體使用狀況都會列在 .map 檔案裡。 看起來佔用大量的 RAM，其實是: MATH_DATA      udata   0x000000       data   0x000002 .tmpdata      udata   0x000002       data   0x000000 .udata_c018i.o      udata   0x000080       data   0x00000a .idata_c018i.o      idata   0x00008a       data   0x000000 .udata_Test.o      udata   0x00008a       data   0x000000 .idata_Test.o      idata   0x00008a       data   0x000000 .udata___init.o      udata   0x00008a       data   0x000000 .idata___init.o      idata   0x00008a       data   0x000000 .stack      udata   0x000300       data   0x000100 <a href="http://superkyle1888.wordpress.com/2011/02/02/mc-c18%e7%bc%96%e8%af%91%e5%99%a8%e5%8d%a0%e7%94%a8ram%e5%a4%a7%ef%bc%88pic%e5%8d%95%e7%89%87%e6%9c%baram%e7%9a%84%e5%88%86%e9%85%8d%ef%bc%89/" class="excerpt-more-link">[&#8230;]</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=215&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div><span style="font-family:Consolas, Monaco, 'Courier New', Courier, monospace;font-size:small;"><span style="font-size:12px;line-height:18px;white-space:pre;"><span style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size:small;"><span style="font-size:13px;line-height:19px;white-space:normal;"></p>
<div>C18 (MPLAB C for PIC18) 所有的記憶體使用狀況都會列在 .map 檔案裡。</p>
<p>看起來佔用大量的 RAM，其實是:</p></div>
<div style="text-align:right;"><code>MATH_DATA      udata   0x000000       data   0x000002</code></div>
<div style="text-align:right;"><code>.tmpdata      udata   0x000002       data   0x000000</code></div>
<div style="text-align:right;"><code>.udata_c018i.o      udata   0x000080       data   0x00000a</code></div>
<div style="text-align:right;"><code>.idata_c018i.o      idata   0x00008a       data   0x000000</code></div>
<div style="text-align:right;"><code>.udata_Test.o      udata   0x00008a       data   0x000000</code></div>
<div style="text-align:right;"><code>.idata_Test.o      idata   0x00008a       data   0x000000</code></div>
<div style="text-align:right;"><code>.udata___init.o      udata   0x00008a       data   0x000000</code></div>
<div style="text-align:right;"><code>.idata___init.o      idata   0x00008a       data   0x000000</code></div>
<div style="text-align:right;"><code>.stack      udata   0x000300       data   0x000100</code></div>
<div style="text-align:right;"><code>SFR_UNBANKED0      udata   0x000f80       data   0x000080</code></div>
<div></div>
<div>扣除 SFR 的定址空間 0&#215;000080 不計，其他部分合計使用 268 byte</p>
<p><strong>這 268 byte 裡，預留給 stack 256 byte， C 的函數(副程式)是可以 reentrant 的，沒有限制只能呼叫一次，這樣的函數才能做到遞迴(adj.: recursive)，因此，函數中沒宣告 static 的，都是在每一次呼叫時，才在堆疊上配置出這一次執行時的動態變數。<br />
</strong><br />
<span style="text-decoration:underline;"><strong>自定堆疊大小，可以修改 lkr 檔案裡對堆疊 size 的宣告。如果能確定 stack 用不了這麼多，可以改小一點。<br />
</strong></span><br />
cmath18.asm 的暫存區 MATH_DATA 2 byte，這是給某些算數函數用的，除了像這種測試程式之外，真正實用的C程式用到ㄧ些算數函數的機率應該很大吧。</div>
<div style="text-align:right;"><code>SIGN   0x000008    data     extern C:\MCC18\src\traditional\math\cmath18.asm</code></div>
<div style="text-align:right;"><code>__FPFLAGSbits  0x000009    data     extern C:\MCC18\src\traditional\math\cmath18.asm</code></div>
<div style="text-align:right;"><code>__FPFLAGS   0x000009    data     extern C:\MCC18\src\traditional\math\cmath18.asm</code></div>
<div>最後，真正比較大的消耗是作初始化的 c018i.c 用了 10 byte。這部分不清楚作完初始化之後還有沒有其他用途。</div>
<div style="text-align:right;"><code>curr_byte   0x000083       data     static C:\MCC18\src\traditional\startup\c018i.c</code></div>
<div style="text-align:right;"><code>curr_entry   0x000085       data     static C:\MCC18\src\traditional\startup\c018i.c</code></div>
<div style="text-align:right;"><code>data_ptr   0x000087       data     static C:\MCC18\src\traditional\startup\c018i.c</code></div>
<div style="text-align:right;"><code>prom   0x000080       data     static C:\MCC18\src\traditional\startup\c018i.c</code></div>
<pre>看下面這個程式，比原來的程式多了很多個變數。不過，使用的RAM數目還是一樣268。如果有弄懂前面說的那些，應該可以解釋出為什麼是這樣了。
<code>//unsigned char i_am_global;</code></pre>
<div>
<pre><code>void main( void ){</code>
<code>//static unsigned char i_am_static;</code>
<code>long aa=1,bb=2,cc=3,dd=4;</code>
<code>int ii=0,jj[51];</code>
<code>while( 1 )</code>
<code>{aa++; bb--; cc++; dd--;}</code>
<code>}</code>
程式裡有兩行目前是故意註解掉了，如果不清楚這兩行的宣告與其它變數的差異，請翻一下C18的文件、C語言的書等。當然，也可以動手實驗。</pre>
</div>
<p></span></span></span></span></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=215&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/mc-c18%e7%bc%96%e8%af%91%e5%99%a8%e5%8d%a0%e7%94%a8ram%e5%a4%a7%ef%bc%88pic%e5%8d%95%e7%89%87%e6%9c%baram%e7%9a%84%e5%88%86%e9%85%8d%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
		<item>
		<title>CAN总线 通讯距离与 通讯波特率 的关系</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/can%e6%80%bb%e7%ba%bf-%e9%80%9a%e8%ae%af%e8%b7%9d%e7%a6%bb%e4%b8%8e-%e9%80%9a%e8%ae%af%e6%b3%a2%e7%89%b9%e7%8e%87-%e7%9a%84%e5%85%b3%e7%b3%bb/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/can%e6%80%bb%e7%ba%bf-%e9%80%9a%e8%ae%af%e8%b7%9d%e7%a6%bb%e4%b8%8e-%e9%80%9a%e8%ae%af%e6%b3%a2%e7%89%b9%e7%8e%87-%e7%9a%84%e5%85%b3%e7%b3%bb/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:19:57 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[电子技术]]></category>
		<category><![CDATA[CAN]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=212</guid>
		<description><![CDATA[波特率/Kbps    1000    500    250    125    100    50        20        10 最大距离/m      40        130     270    530    620    1300    3300    6700 在现场使用中，通讯距离与理论值有较大差距。在具体的使用中应该进行测试验证。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=212&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>波特率/Kbps    1000    500     250    125    100    50        20        10<br />
最大距离/m      40        130     270    530    620    1300    3300    6700</p>
<p>在现场使用中，通讯距离与理论值有较大差距。在具体的使用中应该进行测试验证。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=212&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/can%e6%80%bb%e7%ba%bf-%e9%80%9a%e8%ae%af%e8%b7%9d%e7%a6%bb%e4%b8%8e-%e9%80%9a%e8%ae%af%e6%b3%a2%e7%89%b9%e7%8e%87-%e7%9a%84%e5%85%b3%e7%b3%bb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
		<item>
		<title>C51中固定地址的变量声明方法</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/c51%e4%b8%ad%e5%9b%ba%e5%ae%9a%e5%9c%b0%e5%9d%80%e7%9a%84%e5%8f%98%e9%87%8f%e5%a3%b0%e6%98%8e%e6%96%b9%e6%b3%95/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/c51%e4%b8%ad%e5%9b%ba%e5%ae%9a%e5%9c%b0%e5%9d%80%e7%9a%84%e5%8f%98%e9%87%8f%e5%a3%b0%e6%98%8e%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:16:21 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[电子技术]]></category>
		<category><![CDATA[C51]]></category>
		<category><![CDATA[固定地址]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=210</guid>
		<description><![CDATA[#include &#60;Reg51.h&#62; #include &#60;stdio.h&#62; unsigned char xdata a[128] _at_ 0&#215;0100; //关键字xdata使a成为外部的， //关键字_at_使a固定地址，使用_at_时必须为全局变量 void main(void) { unsigned char i; TI=1; for(i=0;i&#60;128;i++) //打印ASCII表 { a[i]=i; printf(&#8220;%c&#8221;,a[i]); //Keil里从Serial Window #1 可看到输出 } printf(&#8220;\naddress:0xx\n&#8221;,(int)&#38;a); while(1); }<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=210&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>#include &lt;Reg51.h&gt;</p>
<p>#include &lt;stdio.h&gt;</p>
<p>unsigned char xdata a[128] _at_ 0&#215;0100;</p>
<p>//关键字xdata使a成为外部的，</p>
<p>//关键字_at_使a固定地址，使用_at_时必须为全局变量</p>
<p>void main(void)</p>
<p>{</p>
<p>unsigned char i;</p>
<p>TI=1;</p>
<p>for(i=0;i&lt;128;i++) //打印ASCII表</p>
<p>{</p>
<p>a[i]=i;</p>
<p>printf(&#8220;%c&#8221;,a[i]); //Keil里从Serial Window #1 可看到输出</p>
<p>}</p>
<p>printf(&#8220;\naddress:0xx\n&#8221;,(int)&amp;a);</p>
<p>while(1);</p>
<p>}</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/210/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=210&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/c51%e4%b8%ad%e5%9b%ba%e5%ae%9a%e5%9c%b0%e5%9d%80%e7%9a%84%e5%8f%98%e9%87%8f%e5%a3%b0%e6%98%8e%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
		<item>
		<title>[zz] 嵌入式学习经验谈</title>
		<link>http://superkyle1888.wordpress.com/2011/02/02/zz-%e5%b5%8c%e5%85%a5%e5%bc%8f%e5%ad%a6%e4%b9%a0%e7%bb%8f%e9%aa%8c%e8%b0%88/</link>
		<comments>http://superkyle1888.wordpress.com/2011/02/02/zz-%e5%b5%8c%e5%85%a5%e5%bc%8f%e5%ad%a6%e4%b9%a0%e7%bb%8f%e9%aa%8c%e8%b0%88/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 15:12:52 +0000</pubDate>
		<dc:creator>superkyle1888</dc:creator>
				<category><![CDATA[信息技术]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[PCB]]></category>
		<category><![CDATA[SOC]]></category>
		<category><![CDATA[SOPC]]></category>
		<category><![CDATA[嵌入式]]></category>

		<guid isPermaLink="false">http://superkyle1888.wordpress.com/?p=208</guid>
		<description><![CDATA[从去年做嵌入式项目到今天,已经快一年时间了，经历了从PCB设计, bootloader修改,核心移植, 文件系统移植,驱动开发,QT开发,几乎嵌入式开发的全过程. 回想起一年前,对嵌入式的感受大不一样,只庆幸是在学校,才能经历如此完整的项目流程.看到admin如此认真的写帖,感慨万千,将自己的很多想法写出来，希望对后来者有些帮助. ..如此,心足慰也。 第一个话题,嵌入式学习的路径有哪些&#8230; 这是一个初学者常问的问题,也是初学者问嵌入式该如何入门的根源..我感觉有两个方面,偏硬和偏软.我不认为嵌入式开发软件占绝对比重,相反,软硬件都懂,才是嵌入式高手所应该追求的,也是高手的必由之路. 硬件道路: 第一步: PCB设计,一般为开发板的电路裁减和扩充,由开发板原理图为基础,画出PCB和封装库,设计自己的电路. 第二步: SOPC技术,一般为FPGA,CPLD开发,利用VHDL等硬件描述语言做专用芯片开发,写出自己的逻辑电路,基于ALTER或XILINUX的FPGA做开发. 第三步: SOC设计,分前端,后端实现,这是硬件设计的核心技术:芯片设计.能做到这步,已经不属于平凡的技术人员. 软件道路: 第一步:bootloader的编写，修改, 通过这步熟悉ARM硬件结构,学习ARM汇编语言,阅读ARM的芯片手册,感觉就是像操作51单片机一样操作ARM芯片.这一步最好的两个参考资料就是:芯片手册和bootloader源代码. 第二步:系统移植, 驱动开发, 我只做过linux方向,所以也推荐学习嵌入式linux系统,作为标准体系,他开源而且可以获得大量学习资料.操作系统是整个计算机科学的核心,熟悉kernel实属不易,kernel, 驱动开发的学习,没有什么捷径,只有多读代码,多写代码,熟悉系统API.. understanding linux kernel , linux device driver 都是不可多得的好书，值得一看. 第三步:应用程序的编写,各种GUI的移植,qt , minigui都被大量采用,两种思想都类似,熟悉一种就可以. 软件道路中,驱动,系统应该是最深入的部分,不是短时间可以掌握的,需要有勇气和耐心.. 嵌入式开发,软硬结合,因为硬件条件比PC差很多,所以肯定会遇见不少问题,因此实践的勇气更加重要.有问题就解决问题，无数次的实验,也许是解决问题的必由之路.. 前路甚远，吾将前行不已. 等你入门之后，其实在实际的开发中重中之重是应用程序的开发和驱动程序的开始； &#160;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=208&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:x-small;">从去年做嵌入式项目到今天,已经快一年时间了，经历了从<strong>PCB设计, bootloader修改,核心移植, 文件系统移植,驱动开发,QT开发</strong>,几乎嵌入式开发的全过程. 回想起一年前,对嵌入式的感受大不一样,只庆幸是在学校,才能经历如此完整的项目流程.看到admin如此认真的写帖,感慨万千,将自己的很多想法写出来，希望对后来者有些帮助. ..如此,心足慰也。</p>
<p>第一个话题,嵌入式学习的路径有哪些&#8230;<br />
这是一个初学者常问的问题,也是初学者问嵌入式该如何入门的根源..我感觉有两个方面,偏硬和偏软.我不认为嵌入式开发软件占绝对比重,相反,软硬件都懂,才是嵌入式高手所应该追求的,也是高手的必由之路.</p>
<p>硬件道路:<br />
<strong>第一步: PCB设计</strong>,一般为开发板的电路裁减和扩充,由开发板原理图为基础,画出PCB和封装库,设计自己的电路.<br />
<strong>第二步: SOPC技术</strong>,一般为FPGA,CPLD开发,利用VHDL等硬件描述语言做专用芯片开发,写出自己的逻辑电路,基于ALTER或XILINUX的FPGA做开发.<br />
<strong>第三步: SOC设计</strong>,分前端,后端实现,这是硬件设计的核心技术:芯片设计.能做到这步,已经不属于平凡的技术人员.<br />
软件道路:<br />
第一步<strong>:bootloader的编写，修改</strong>, 通过这步熟悉ARM硬件结构,学习ARM汇编语言,阅读ARM的芯片手册,感觉就是像操作51单片机一样操作ARM芯片.这一步最好的两个参考资料就是:芯片手册和bootloader源代码.<br />
<strong>第二步:系统移植, 驱动开发,</strong> 我只做过linux方向,所以也推荐学习嵌入式linux系统,作为标准体系,他开源而且可以获得大量学习资料.操作系统是整个计算机科学的核心,熟悉kernel实属不易,kernel, 驱动开发的学习,没有什么捷径,只有多读代码,多写代码,熟悉系统API.. understanding linux kernel , linux device driver 都是不可多得的好书，值得一看.<br />
<strong>第三步:应用程序的编写,各种GUI的移植,qt</strong> , minigui都被大量采用,两种思想都类似,熟悉一种就可以.<br />
软件道路中,<strong>驱动,系统</strong>应该是最深入的部分,不是短时间可以掌握的,需要有勇气和耐心..<br />
嵌入式开发,软硬结合,因为硬件条件比PC差很多,所以肯定会遇见不少问题,因此实践的勇气更加重要.有问题就解决问题，无数次的实验,也许是解决问题的必由之路..<br />
前路甚远，吾将前行不已.</span></p>
<p><span style="font-size:x-small;"> 等你入门之后，其实在实际的开发中重中之重是<strong>应用程序的开发和驱动程序的开始</strong>；</span></p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superkyle1888.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superkyle1888.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superkyle1888.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superkyle1888.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superkyle1888.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superkyle1888.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superkyle1888.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superkyle1888.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superkyle1888.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superkyle1888.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superkyle1888.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superkyle1888.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superkyle1888.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superkyle1888.wordpress.com/208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superkyle1888.wordpress.com&amp;blog=16166728&amp;post=208&amp;subd=superkyle1888&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superkyle1888.wordpress.com/2011/02/02/zz-%e5%b5%8c%e5%85%a5%e5%bc%8f%e5%ad%a6%e4%b9%a0%e7%bb%8f%e9%aa%8c%e8%b0%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fea7d04b93b4bf73ca8adbcad4e63999?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superkyle1888</media:title>
		</media:content>
	</item>
	</channel>
</rss>
