<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[技术员日志 - 编程开发]]></title>
<link>http://www.cnsos.net/</link>
<description><![CDATA[http://www.cnsos.net]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[wzwyc@yeah.net(Aci)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>技术员日志</title>
	<url>http://www.cnsos.net/images/logos.gif</url>
	<link>http://www.cnsos.net/</link>
	<description>技术员日志</description>
</image>

			<item>
			<link>http://www.cnsos.net/article.asp?id=236</link>
			<title><![CDATA[C语言出错信息速查]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Sun,22 Aug 2010 11:24:47 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=236</guid>
		<description><![CDATA[Ambiguous operators need parentheses <br/>不明确的运算需要用括号括起 <br/><br/>Ambiguous symbol ``xxx`` <br/>不明确的符号 <br/><br/>Argument list syntax error <br/>参数表语法错误 <br/><br/>Array bounds missing <br/>丢失数组界限符 <br/><br/>Array size toolarge <br/>数组尺寸太大 <br/><br/>Bad character in paramenters <br/>参数中有不适当的字符 <br/><br/>Bad file name format in include directive <br/>包含命令中文件名格式不正确 <br/><br/>Bad ifdef directive synatax <br/>编译预处理ifdef有语法错 <br/><br/>Bad undef directive syntax <br/>编译预处理undef有语法错 <br/><br/>Bit field too large <br/>位字段太长 <br/><br/>Call of non-function <br/>调用未定义的函数 <br/><br/>Call to function with no prototype <br/>调用函数时没有函数的说明 <br/><br/>Cannot modify a const object <br/>不允许修改常量对象 <br/><br/>Case outside of switch <br/>漏掉了case 语句 <br/><br/>Case syntax error <br/><br/>Case 语法错误 <br/><br/>Code has no effect <br/>代码不可述不可能执行到 <br/><br/>Compound statement missing{ <br/>分程序漏掉&#34;{&#34; <br/><br/>Conflicting type modifiers <br/>不明确的类型说明符 <br/><br/>Constant e&#173;xpression required <br/>要求常量表达式 <br/><br/>Constant out of range in comparison <br/>在比较中常量超出范围 <br/><br/>Conversion may lose significant digits <br/>转换时会丢失意义的数字 <br/><br/>Conversion of near pointer not allowed <br/>不允许转换近指针 <br/><br/>Could not find file ``xxx`` <br/>找不到XXX文件 &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; <br/><br/>Declaration missing ; <br/>说明缺少&#34;；&#34; <br/><br/>Declaration syntax error <br/>说明中出现语法错误 <br/><br/>Default outside of switch <br/><br/>Default 出现在switch语句之外 <br/><br/>Define directive needs an identifier <br/>定义编译预处理需要标识符 <br/><br/>Division by zero <br/>用零作除数 <br/><br/>Do statement must have while <br/>Do-while语句中缺少while部分 <br/><br/>Enum syntax error <br/>枚举类型语法错误 <br/><br/>Enumeration constant syntax error <br/>枚举常数语法错误 <br/><br/>Error directive :xxx <br/>错误的编译预处理命令 <br/><br/>Error writing output file <br/>写输出文件错误 <br/><br/>Expression syntax error <br/>表达式语法错误 <br/><br/>Extra parameter in call <br/>调用时出现多余错误 <br/><br/>File name too long <br/>文件名太长 <br/><br/>Function call missing ) <br/>函数调用缺少右括号 <br/><br/>Fuction definition out of place <br/>函数定义位置错误 <br/><br/>Fuction should return a value <br/>函数必需返回一个值 <br/><br/>Goto statement missing label <br/>Goto语句没有标号 <br/><br/>Hexadecimal o&#114; octal constant too large <br/>16进制或8进制常数太大 <br/><br/>Illegal character ``x`` <br/>非法字符x <br/><br/>Illegal initialization <br/>非法的初始化 <br/><br/>Illegal octal digit <br/>非法的8进制数字 <br/><br/>Illegal pointer subtraction <br/>非法的指针相减 <br/><br/>Illegal structure operation <br/>非法的结构体操作 <br/><br/>Illegal use of floating point <br/>非法的浮点运算 <br/><br/>Illegal use of pointer <br/>指针使用非法 <br/><br/>Improper use of a typedefsymbol <br/>类型定义符号使用不恰当 <br/><br/>In-line assembly not allowed <br/>不允许使用行间汇编 <br/><br/>Incompatible storage class <br/>存储类别不相容 <br/><br/>Incompatible type conversion <br/>不相容的类型转换 <br/><br/>Incorrect number format <br/>错误的数据格式 <br/><br/>Incorrect use of default <br/>Default使用不当 <br/><br/>Invalid indirection <br/>无效的间接运算 <br/><br/>Invalid pointer addition <br/>指针相加无效 <br/><br/>Irreducible e&#173;xpression tree <br/>无法执行的表达式运算 <br/><br/>Lvalue required <br/>需要逻辑值0或非0值 <br/><br/>Macro argument syntax error <br/>宏参数语法错误 <br/><br/>Macro expansion too long <br/>宏的扩展以后太长 <br/><br/>Mismatched number of parameters in definition <br/>定义中参数个数不匹配 <br/><br/>Misplaced break <br/>此处不应出现break语句 <br/><br/>Misplaced continue <br/>此处不应出现continue语句 <br/><br/>Misplaced decimal point <br/>此处不应出现小数点 <br/><br/>Misplaced elif directive <br/>不应编译预处理elif <br/><br/>Misplaced else <br/>此处不应出现else <br/><br/>Misplaced else directive <br/>此处不应出现编译预处理else <br/><br/>Misplaced endif directive <br/>此处不应出现编译预处理endif <br/><br/>Must be addressable <br/>必须是可以编址的 <br/><br/>Must take address of memory location <br/>必须存储定位的地址 <br/><br/>No declaration for function ``xxx`` <br/>没有函数xxx的说明 <br/><br/>No stack <br/>缺少堆栈 <br/><br/>No type information <br/>没有类型信息 <br/><br/>Non-portable pointer assignment <br/>不可移动的指针（地址常数）赋值 <br/><br/>Non-portable pointer comparison <br/>不可移动的指针（地址常数）比较 <br/><br/>Non-portable pointer conversion <br/>不可移动的指针（地址常数）转换 <br/><br/>Not a valid e&#173;xpression format type <br/>不合法的表达式格式 <br/><br/>Not an allowed type <br/>不允许使用的类型 <br/><br/>Numeric constant too large <br/>数值常太大 <br/><br/>Out of memory <br/>内存不够用 <br/><br/>Parameter ``xxx`` is never used <br/>能数xxx没有用到 <br/><br/>Pointer required on left side of -&gt; <br/>符号-&gt;的左边必须是指针 <br/><br/>Possible use of ``xxx`` before definition <br/>在定义之前就使用了xxx（警告） <br/><br/>Possibly incorrect assignment <br/>赋值可能不正确 <br/><br/>Redeclaration of ``xxx`` <br/>重复定义了xxx <br/><br/>Redefinition of ``xxx`` is not identical <br/>xxx的两次定义不一致 <br/><br/>Register allocation failure <br/>寄存器定址失败 <br/><br/>Repeat count needs an lvalue <br/>重复计数需要逻辑值 <br/><br/>Size of structure o&#114; array not known <br/>结构体或数给大小不确定 <br/><br/>Statement missing ; <br/>语句后缺少&#34;；&#34; <br/><br/>Structure o&#114; union syntax error <br/>结构体或联合体语法错误 <br/><br/>Structure size too large <br/>结构体尺寸太大 <br/><br/>Sub scripting missing ] <br/>下标缺少右方括号 <br/><br/>Superfluous &amp; with function o&#114; array <br/>函数或数组中有多余的&#34;&amp;&#34; <br/><br/>Suspicious pointer conversion <br/>可疑的指针转换 <br/><br/>Symbol limit exceeded <br/>符号超限 <br/><br/>Too few parameters in call <br/>函数调用时的实参少于函数的参数不 <br/><br/>Too many default cases <br/>Default太多(switch语句中一个) <br/><br/>Too many error o&#114; warning messages <br/>错误或警告信息太多 <br/><br/>Too many type in declaration <br/>说明中类型太多 <br/><br/>Too much auto memory in function <br/>函数用到的局部存储太多 <br/><br/>Too much global data defined in file <br/>文件中全局数据太多 <br/><br/>Two consecutive dots <br/>两个连续的句点 <br/><br/>Type mismatch in parameter xxx <br/>参数xxx类型不匹配 <br/><br/>Type mismatch in redeclaration of ``xxx`` <br/>xxx重定义的类型不匹配 <br/><br/>Unable to cr&#101;ate output file ``xxx`` <br/>无法建立输出文件xxx <br/><br/>Unable to open include file ``xxx`` <br/>无法打开被包含的文件xxx <br/><br/>Unable to open input file ``xxx`` <br/>无法打开输入文件xxx <br/><br/>Undefined label ``xxx`` <br/>没有定义的标号xxx <br/><br/>Undefined structure ``xxx`` <br/>没有定义的结构xxx <br/><br/>Undefined symbol ``xxx`` <br/>没有定义的符号xxx <br/><br/>Unexpected end of file in comment started on line xxx <br/>从xxx行开始的注解尚未结束文件不能结束 <br/><br/>Unexpected end of file in conditional started on line xxx <br/>从xxx 开始的条件语句尚未结束文件不能结束 <br/><br/>Unknown assemble instruction <br/>未知的汇编结构 <br/><br/>Unknown option <br/>未知的操作 <br/><br/>Unknown preprocessor directive: ``xxx`` <br/>不认识的预处理命令xxx <br/><br/>Unreachable code <br/>无路可达的代码 <br/><br/>Unterminated string o&#114; character constant <br/>字符串缺少引号 <br/><br/>User break <br/>用户强行中断了程序 <br/><br/>Void functions may not return a value <br/>Void类型的函数不应有返回值 <br/><br/>Wrong number of arguments <br/>调用函数的参数数目错 <br/><br/>``xxx`` not an argument <br/>xxx不是参数 <br/><br/>``xxx`` not part of structure <br/>xxx不是结构体的一部分 <br/><br/>xxx statement missing ( <br/>xxx语句缺少左括号 <br/><br/>xxx statement missing ) <br/>xxx语句缺少右括号 <br/><br/>xxx statement missing ; <br/>xxx缺少分号 <br/><br/>xxx`` declared but never used <br/>说明了xxx但没有使用 <br/><br/>xxx`` is assigned a value which is never used <br/>给xxx赋了值但未用过 <br/><br/>Zero length structure <br/>结构体的长度为零 <br/><br/><br/><br/><br/>该文章转自 手机设计天下网www.rd3721.com <br/>原文地址：<a href="http://www.rd3721.com/bbs/info88a9695.html" target="_blank" rel="external">http://www.rd3721.com/bbs/info88a9695.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.cnsos.net/article.asp?id=235</link>
			<title><![CDATA[MMI设计]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Sun,22 Aug 2010 10:59:21 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=235</guid>
		<description><![CDATA[<strong>什么是用户界面设计? </strong><br/>　 在人和机器的互动过程（Human Machine Interaction）中，有一个层面，即我们所说的界面（interface）。从心理学意义来分，界面可分为感觉（视觉、触觉、听觉等）和情感两个层次。用户界面设计是屏幕产品的重要组成部分。界面设计是一个复杂的有不同学科参与的工程，认知心理学、设计学、语言学等在此都扮演着重要的角色。用户界面设计的三大原则是：置界面于用户的控制之下；减少用户的记忆负担；保持界面的一致性。 <br/>用户界面设计在工作流程上分为结构设计、交互设计、视觉设计三个部分，这里主要讲解后两部分： <br/><br/><br/><strong>交互设计 Interactive Design</strong> <br/>　　交互设计的目的是使产品让用户能简单使用。 任何产品功能的实现都是通过人和机器的交互来完成的。因此，人的因素应作为设计的核心<br/><br/>被体现出来。交互设计的原则如下： <br/>　　1)　有清楚的错误提示。误操作后，系统提供有针对性的提示。 <br/>　　2) 让用户控制界面。“下一步”、“完成”，面对不同层次提供多种选择，给不同层次的用户提供多种可能性。 <br/>　　3) 允许兼用鼠标和键盘。同一种功能，同时可以用鼠标和键盘。提供多种可能性。 <br/>　　4) 允许工作中断。例如用手机写新短信的时候，收到短信或电话，完成后回来仍能够找到刚才正写的新短信。 <br/>　　5) 使用用户的语言，而非技术的语言。 <br/>　　6) 提供快速反馈。给用户心理上的暗示，避免用户焦急。 <br/>　　7) 方便退出。如手机的退出，是按一个键完全退出，还是一层一层的退出。提供两种可能性。 <br/>　　8）导航功能。随时转移功能，很容易从一个功能跳到另外一个功能。 <br/>　　9）让用户知道自己当前的位置，使其做出下一步行动的决定。 <br/><br/><br/><strong>视觉设计　Visual Design</strong> <br/>在结构设计的基础上，参照目标群体的心理模型和任务达成进行视觉设计。包括色彩、字体、页面等。视觉设计要达到用户愉悦使用的目的。<br/><br/>视觉设计的原则如下： <br/>　　1）界面清晰明了。允许用户定制界面。 <br/>　　2） 减少短期记忆的负担。让计算机帮助记忆，例：User Name,、Password、IE进入界面地址可以让机器记住。 <br/>　　3） 依赖认知而非记忆。如打印图标的记忆、下拉菜单列表中的选择 <br/>　　4） 提供视觉线索。图形符号的视觉的刺激；GUI（图形界面设计）：Wh&#101;re, What, Next Step <br/>　　5） 提供默认（default）、撤销（undo）、恢复（redo）的功能 <br/>　　6） 提供界面的快捷方式 <br/>　　7） 尽量使用真实世界的比喻。如：电话、打印机的图标设计，尊重用户以往的使用经验。 <br/>　　8） 完善视觉的清晰度。条理清晰；图片、文字的布局和隐喻不要让用户去猜。 <br/>　　9）界面的协调一致。如手机界面按钮排放，左键肯定；右键否定；或按内容摆放。 <br/>　　10） 同样功能用同样的图形。 <br/>　　11）色彩与内容。整体软件不超过5个色系，尽量少用红色、绿色。近似的颜色表示近似的意思。 <br/>　　<br/><br/>　　用户界面设计构筑了产品设计的基础。如只有首先确定了手机菜单的交互形式，才能在造型设计上决定是采用五项键或上下键。 <br/>　　在国外，用户界面设计人员有了一个新的称谓：Information Architecture,信息建筑师。它不仅仅是指美工，而是具有心理学、软件工程学、设计学等综合知识的人。<br/><br/><br/>该文章转自 手机设计天下网www.rd3721.com <br/>原文地址：<a href="http://www.rd3721.com/bbs/info89a3211.html" target="_blank" rel="external">http://www.rd3721.com/bbs/info89a3211.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.cnsos.net/article.asp?id=233</link>
			<title><![CDATA[HTTP下载原理[转]]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Sun,22 Aug 2010 10:19:53 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=233</guid>
		<description><![CDATA[<p>对于HTTP协议，向服务器请求某个文件时，只要发送类似如下的请求即可：<br />
GET /Path/FileName HTTP/1.0 <br />
Host: <a href="http://www.caiban.net:80">www.caiban.net:80</a> <br />
&nbsp;Accept: */*<br />
User-Agent: GeneralDownloadApplication<br />
Connection: close <br />
每行用一个&ldquo;回车换行&rdquo;分隔，末尾再追加一个&ldquo;回车换行&rdquo;作为整个请求的结束。 <br />
第一行中的GET是HTTP协议支持的方法之一，方法名是大小写敏感的，HTTP协议还支持OPTIONS、HAED、POST、PUT、Delete、TRACE、CONNECT等方法，而GET和HEAD这两个方法通常被认为是&ldquo;安全的&rdquo;，也就是说任何实现了HTTP协议的服务器程序都会实现这两个方法。对于文件下载功能，GET足矣。GET后面是一个空格，其后紧跟的是要下载的文件从WEB服务器根开始的绝对路径。该路径后又有一个空格，然后是协议名称及协议版本。 除第一行以外，其余行都是HTTP头的字段部分。Host字段表示主机名和端口号，如果端口号是默认的80则可以不写。Accept字段中的*/*表示接收任何类型的数据。User-Agent表示用户代理，这个字段可有可无，但强烈建议加上，因为它是服务器统计、追踪以及识别客户端的依据。Connection字段中的close表示使用非持久连接。 关于HTTP协议更多的细节可以参考RFC2616（HTTP 1.1）。因为我只是想通过HTTP协议实现文件下载，所以也只看了一部分，并没有看全。 如果服务器成功收到该请求，并且没有出现任何错误，则会返回类似下面的数据： <br />
HTTP/1.0 200 OK <br />
Content-Length: 13057672 Content-Type: application/octet-stream <br />
Last-Modified: Wed, 10 Oct 2005 00:56:34 GMT <br />
Accept-Ranges: bytes <br />
ETag: &quot;2f38a6cac7cec51:160c&quot; <br />
Server: Microsoft-IIS/6.0 <br />
X-Powered-By: ASP.NET <br />
Date: Wed, 16 Nov 2005 01:57:54 GMT <br />
Connection: close <br />
不用逐一解释，很多东西一看几乎就明白了，只说我们大家都关心内容吧。 <br />
第一行是协议名称及版本号，空格后面会有一个三位数的数字，是HTTP协议的响应状态码，200表示成功，OK是对状态码的简短文字描述。状态码共有5类：1xx属于通知类；2xx属于成功类；3xx属于重定向类；4xx属于客户端错误类；5xx属于服务端错误类。对于状态码，相信大家对404应该很熟悉，如果向一个服务器请求一个不存在的文件，就会得到该错误，通常浏览器也会显示类似&ldquo;HTTP 404 - 未找到文件&rdquo;这样的错误。Content-Length字段是一个比较重要的字段，它标明了服务器返回数据的长度，这个长度是不包含HTTP头长度的。换句话说，我们的请求中并没有Range字段（后面会说到），表示我们请求的是整个文件，所以Content-Length就是整个文件的大小。其余各字段是一些关于文件和服务器的属性信息。 <br />
这段返回数据同样是以最后一行的结束标志（回车换行）和一个额外的回车换行作为结束，即&ldquo;\r\n\r\n&rdquo;。而&ldquo;\r\n\r\n&rdquo;后面紧接的就是文件的内容了，这样我们就可以找到&ldquo;\r\n\r\n&rdquo;，并从它后面的第一个字节开始，源源不断的读取，再写到文件中了。 <br />
以上就是通过HTTP协议实现文件下载的全过程。但还不能实现断点续传，而实际上断点续传的实现非常简单，只要在请求中加一个Range字段就可以了。 假如一个文件有1000个字节，那么其范围就是0-999，则： Range: bytes=500-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表示读取该文件的500-999字节，共500字节。 Range: bytes=500-599&nbsp;&nbsp; 表示读取该文件的500-599字节，共100字节。 Range还有其它几种写法，但上面这两种是最常用的，对于断点续传也足矣了。如果HTTP请求中包含Range字段，那么服务器会返回206（Partial Content），同时HTTP头中也会有一个相应的Content-Range字段，类似下面的格式： <br />
Content-Range: bytes 500-999/1000 <br />
Content-Range字段说明服务器返回了文件的某个范围及文件的总长度。这时Content-Length字段就不是整个文件的大小了，而是对应文件这个范围的字节数，这一点一定要注意。 <br />
一切好像基本上没有什么问题了，本来我也是这么认为的，但事实并非如此。如果我们请求的文件的URL是类似<a href="http://www.server.com/filename.exe">http://www.server.com/filename.exe</a>这样的文件，则不会有问题。但是很多软件下载网站的文件下载链接都是通过程序重定向的，比如pchome的ACDSee的HTTP下载地址是： <br />
<a href="http://download.pchome.net/php/tdownload2.php?sid=5547&amp;url=/multimedia/viewer/acdc31sr1b051007.exe&amp;svr=1&amp;typ=0">http://download.pchome.net/php/tdownload2.php?sid=5547&amp;url=/multimedia/viewer/acdc31sr1b051007.exe&amp;svr=1&amp;typ=0</a> <br />
这种地址并没有直接标识文件的位置，而是通过程序进行了重定向。如果向服务器请求这样的URL，服务器就会返回302（Moved Temporarily），意思就是需要重定向，同时在HTTP头中会包含一个Location字段，Location字段的值就是重定向后的目的URL。这时就需要断开当前的连接，而向这个重定向后的服务器发请求。</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/x03570227/archive/2008/01/03/2012372.aspx">http://blog.csdn.net/x03570227/archive/2008/01/03/2012372.aspx</a></p>]]></description>
		</item>
		
			<item>
			<link>http://www.cnsos.net/article.asp?id=230</link>
			<title><![CDATA[armar指令]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Thu,12 Aug 2010 14:21:01 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=230</guid>
		<description><![CDATA[Command format:<br/><br/>armar options archive [ file_list ]<br/><br/>Wildcards &#39;?&#39; and &#39;*&#39; may be used in file_list<br/><br/>Options:-<br/><br/>-r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ins&#101;rt files in &lt;file_list&gt;, replace existing members of the same name.<br/>-d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Del&#101;te the members in &lt;file_list&gt;.<br/>-x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Extract members in &lt;file_list&gt; placing in files of the same name.<br/>-m&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Move files in &lt;file_list&gt;.<br/>-p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print files to stdout.<br/>-a pos&nbsp;&nbsp;&nbsp;&nbsp; Ins&#101;rt/move files after file named &lt;pos&gt;.<br/>-b pos&nbsp;&nbsp;&nbsp;&nbsp; Ins&#101;rt/move files before file named &lt;pos&gt;.<br/>-u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Up&#100;ate older files only, used with -r.<br/><br/>-n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do not add a symbol table to an object archive.<br/>-s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Force regeneration of archive symbol table.<br/>-t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print table of contents of archive.<br/>-zs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show the symbol table.<br/>-zt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Summarize the archive contents (sizes + entries).<br/>-c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Suppress warning when a new archive is cr&#101;ated.<br/>-C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do not overwrite existing files when extracting.<br/>-T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Truncate file names to system maximum length.<br/>-v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Give verbose output.<br/>-cr&#101;ate&nbsp;&nbsp;&nbsp;&nbsp;Force creation of a new archive.<br/>-via file&nbsp;&nbsp;Take additional arguments from via file.<br/>-sizes&nbsp;&nbsp;&nbsp;&nbsp; List the size of each member and the library total.<br/>-entries&nbsp;&nbsp; List sections containing ENTRY points.<br/>-vsn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print the current Armar Version.<br/>-help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print this message.<br/><br/>Examples:-<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;armar -r&nbsp;&nbsp;mylib.a obj1 obj2 obj3...<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;armar -x&nbsp;&nbsp;mylib.a ?sort*<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;armar -d&nbsp;&nbsp;mylib.a hash.o<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;armar -tv ansilib.a<br/><br/>替换一个sample.lib文件里的1.obj文件:<br/>armar -r sample.lib 1.obj]]></description>
		</item>
		
			<item>
			<link>http://www.cnsos.net/article.asp?id=229</link>
			<title><![CDATA[mtk编译命令总结]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Thu,12 Aug 2010 01:34:14 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=229</guid>
		<description><![CDATA[<p>mtk编译命令<br />
&nbsp;<br />
目录<br />
1&nbsp;&nbsp;&nbsp;&nbsp; 目录&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;2<br />
2&nbsp;&nbsp;&nbsp;&nbsp; new &hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;..3<br />
3&nbsp;&nbsp;&nbsp;&nbsp; update&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;..3<br />
4&nbsp;&nbsp;&nbsp;&nbsp; remake&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;..3<br />
5&nbsp;&nbsp;&nbsp;&nbsp; clean&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;..3<br />
6&nbsp;&nbsp;&nbsp;&nbsp; 其他命令介绍&nbsp; &hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;..4<br />
&nbsp;2&nbsp;&nbsp; new：<br />
功能：全新开始构建整个工程的ARM版，包括图片、声音、字符串等资源都要重做。在构建工程过程中，清除所有的目标文件，库文件，日志文件等。New指令还会自动创建必要的目录、移除临时文件和中间脚本、更新日志文件。<br />
过程简要说明：new-&gt;cleanall-&gt;sysgen-&gt;ckscatter-&gt;mmi_feature_check-&gt;asngen-&gt;codegen-&gt;asnregen-&gt;operator_check_lit-&gt;$(BTLD_BIN_FILE)-&gt;update。<br />
依赖指令：new依赖的其他指令最多，其中包括cleanall,sysgen,ckscatter,mmi_feature_check,asngen,codegen,asnregen,operator_check_lite,update.<br />
用途：new指令是最彻底也是耗时最长的一个动作，一般得到一个新的MTK发布版本后由项目负责人要做一次。<br />
使用示例：C: BIRD25_GEMINI_07BRelease&gt;make BIRD25_GEMINI_07B gprs new。<br />
3&nbsp;&nbsp; update：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 功能：update是重新更新整个工程的ARM版，该动作会扫描工程中文件和库的依赖关系，若依赖关系有变化会建立新的依赖关系，随后根据新的依赖关系重新编译链接有改动的部分。Update指令不依赖cleanall指令，所以它不会删除目标文件和库文件，也不会去更新日志文件和创建目标目录，这一点和remake相像，这也是为什么执行时间比new短的原因。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 过程简要说明：update-&gt;cleanlog-&gt;cleanbin-&gt;mcddll_update-&gt;codegen-&gt;resgen-&gt;cksydrv-&gt;remake。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 依赖指令：cleanlog,cleanbin,mcddll_updata,codegen,resgen,cksydrv,remake。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用途：update是耗时较长的一个指令,一般在增加或删除一些驱动或应用情况下使用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用示例：C: BIRD25_GEMINI_07BRelease&gt;make BIRD25_GEMINI_07B gprs update。4 remake：<br />
功能： remake是重新编译整个工程的ARM版，该动作只是简单的重新编译链接有改动的部分。它不检查依赖关系.不扫描资源，只扫描代码的改变，有改变的重编，资源和无改变的代码不编。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 过程简要说明：remake-&gt;mcp_check-&gt;cleanlog-&gt;cleanbin-&gt;genverno-&gt;libs-&gt;$(BTLD_BIN_FIKE)-&gt;cmmgen-&gt;done。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 依赖指令：mcp_check，cleanlog，cleanbin，genverno，libs，$(BIN_FIKE)，cmmgen，done。其中最重要的两个指令是libs，$(BIN_FIKE)。Libs调用编译器和连接器将各个模块目录下的C文件编译连接为独立的库。$(BIN_FIKE)是将各个模块编译连接的库和mtk_lib目录下的库一起连接起来得到一个映像文件，然后使用ADS的工具fromelf将映像文件生成以变量BIN_FILE命名的二进制文件，该文件可以下载到硬件板上运行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用途：remake是耗时最短的一个动作，也是最常用的动作。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用示例：C: BIRD25_GEMINI_07BRelease&gt;make BIRD25_GEMINI_07B gprs remake。<br />
5&nbsp;&nbsp; clean：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 功能:清除所有的目标文件，临时文件，库文件，可执行文件，更新日志文件。还可以用于某个模块相关的清除工作。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 过程简要说明：check build root、target folder、comp、lib、comp log folder-&gt;clean bin folder、elf、lis、htm、log files、tst database files、obj,lib files。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 依赖指令：cleanlog,cleanbin,cleanmod,cleancodegen等。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用途：作为其它命令所依赖的指令，还有就是清除工程或者指定模块对象的类库。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用示例：C: BIRD25_GEMINI_07BRelease&gt;make BIRD25_GEMINI_07B gprs clean，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C: BIRD25_GEMINI_07BRelease&gt;make BIRD25_GEMINI_07B gprs clean Init。<br />
6&nbsp;&nbsp;&nbsp;&nbsp; 其他命令介绍：<br />
new_modis：是全新构建整个工程的PC模拟版，其调用VC的编译器和链接器得到一个可以在windows上运行的PC模拟版。MMI应用软件工程师可以在没有硬件板的情况下在PC上检查和调试自己写好的应用。<br />
codegen_modis:产生modis需要的trace文件的datebase。<br />
gen_modis:产生vc工程文件。<br />
remake_modis:重新编译整个工程的PC版。<br />
Codegen:创建TST数据库。它依赖的指令有：cleancodegen,asngen,[umts_gen],codegen,asnregen,cleanbin,mcddll_update,done。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cleancodegen:删除codegen.lis。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resgen:生成MMI资源。它依赖的指令有：code_generate,cleancodegen,asngen,codegen,asnregen,cleanbin,mcddll_update,done。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cmmgen:生成CMM文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sysgen:生成内存映射文件，并放在CUSTOMER文件夹里面。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Emigen:生成flash_opt.h,custom_EMI.h,custom_EMI.c和custom_switchclock.c文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Emiclean:清除EMI设置。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mmi_feature_check:根据MMI_features.h和MMI_features_switch.h中宏定义的不同来产生info.log文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Operator_check:检查customer的宏是否被修改，如果修改产生相应log文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fota:生成FOTA二进制文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bootloader:生成bootloader二进制文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ckscatter:检查scatter文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mmi_obj_check:检查运行时间值，e.g，联合体元素的大小等。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Med_mem_check:检查media memory。该指令依赖gencustominfo gen_infolog nvram_auto_gen。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dummy_data_check:检查虚拟数据。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Viewlog:查看日志文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cksysdrv:检查系统驱动是否为满。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Genverno:生成verno.c/h。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mcddll_update:生成和更新tst mcddll.dll文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Gen_bl_verno:生成bootloader版本号。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Del_fota:删除fota二进制文件和elf,lis,sym,htm.*.log文件。</p>
<p><br />
本文来自：天勤手机研发网(mtkmtk.com) -做手机就上这个网站<br />
详细出处：<a href="http://www.mtkmtk.com/html/download/mtkbuild/2010/0107/5155.html">http://www.mtkmtk.com/html/download/mtkbuild/2010/0107/5155.html</a></p>]]></description>
		</item>
		
			<item>
			<link>http://www.cnsos.net/article.asp?id=228</link>
			<title><![CDATA[Source Insight实用技巧]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Sun,18 Jul 2010 11:11:02 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=228</guid>
		<description><![CDATA[1、到“option” - “document options”把“screen fonts”的字体设置为“Microsoft Sans Serif”字体，这样中文的字体显示的时候就不会隔得很远了。<br/>2、光标在某个单词上面，按shift+F8，可以让这个变量在代码中高亮显示。<br/>3、等宽字体：Courier New]]></description>
		</item>
		
			<item>
			<link>http://www.cnsos.net/article.asp?id=227</link>
			<title><![CDATA[VB：怎样为程序设置热键]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Sat,17 Jul 2010 21:39:44 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=227</guid>
		<description><![CDATA[Q :--怎样在我的程序中实现文件下载 <br/><br/>Re:<br/><br/>　　一个例子：一个Command，两个Text 代码如下： <br/><br/>　　　Private Declare Function DoFileDownload Lib &#34;shdocvw.dll&#34; (ByVal lpszFile As String) As Long <br/><br/>　　　Private Sub Command1_Click() <br/>　　　Dim sDownload As String <br/>　　　sDownload = StrConv(Text1.Text, vbUnicode) <br/>　　　Call DoFileDownload(sDownload) <br/>　　　End Sub<br/><br/>　　　Private Sub Form_Load() <br/>　　　Text1.Text = &#34;<a href="http://www.chat.ru/~softdaily/fo-ag162.zip" target="_blank" rel="external">http://www.chat.ru/~softdaily/fo-ag162.zip</a>&#34; <br/>　　　Form1.Caption = &#34;Audiograbber 1.62 Full&#34; <br/>　　　Text2.Text = &#34;<a href="http://www6.50megs.com/audiograbber/demos/cr-ag161.zip" target="_blank" rel="external">http://www6.50megs.com/audiograbber/demos/cr-ag161.zip</a>&#34; <br/>　　　End Sub <br/><br/>Q :--如何在vb中定义一个热键，使得当一个应用程序的窗口最小化后，可以通过热键来唤醒它 <br/><br/>Re:<br/><br/>　　先声明API函数SendMessage，然后添加一个按钮和如下代码；<br/><br/>　　　Private Declare Function SendMessage Lib &#34;user32&#34; Alias &#34;SendMessageA&#34; (ByVa l hwnd As Long, ByVal_ 　　　wMsg As Long, ByVal wparam As Long, lparam As Any) As Long <br/><br/>　　　Private Sub Command1_Click() <br/>　　　Dim wKey As Long <br/>　　　wKey = 66 <br/>　　　X = SendMessage(Me.hwnd, WM_SETHOTKEY, wKey, 0) <br/>　　　MsgBox &#34;B 键将激活窗体！&#34;, 64, &#34;定义快捷键&#34;<br/>　　　End Sub <br/>]]></description>
		</item>
		
			<item>
			<link>http://www.cnsos.net/article.asp?id=226</link>
			<title><![CDATA[ARM开发总结的小知识 Code,RO-data,RW-data,ZI-data]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Thu,08 Jul 2010 09:58:46 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=226</guid>
		<description><![CDATA[ARM开发总结的小知识 <br/>字节 8位<br/>半字 16位<br/>字&nbsp;&nbsp; 32位<br/><br/>Code, RO-data<br/>RW-data,ZI-data<br/><br/>Code为程序代码部分<br/>RO-data 表示 程序定义的常量 const temp;<br/>RW-data 表示 已初始化的全局变量<br/>ZI-data 表示 未初始化的全局变量<br/><br/>Program Size: Code=&#34;18248&#34; RO-data=320 RW-data=260 ZI-data=3952&nbsp;&nbsp;<br/><br/>Code, RO-data,RW-data ..............flash<br/>RW-data, ZIdata...................RAM<br/><br/>初始化时RW-data从flash拷贝到RAM<br/><br/>生成的map文件位于list文件夹下 (KEIL)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Total RO&nbsp;&nbsp;Size (Code + RO Data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18568 (&nbsp;&nbsp;18.13kB)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Total RW&nbsp;&nbsp;Size (RW Data + ZI Data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4212 (&nbsp;&nbsp; 4.11kB)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Total ROM Size (Code + RO Data + RW Data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18828 (&nbsp;&nbsp;18.39kB)<br/><br/>ARM指令的长度刚好是1个字（分配为占用4个字节），Thumb指令的长度刚好是半字（占用2个字节）<br/><br/>R0-R15 (R15-PC,R14-LR,R13-SP) 32位<br/><br/>每个异常模式还带有一个程序状态保存寄存器 （SPSR），它用于保存在异常事件发生之前的CPSR<br/><br/>LDMIA R1!，{R2-R7, R12} ;将R1单兀中的数据读出到R2-R7,R12,&nbsp;&nbsp;R1自动加1<br/>STMIA RO!，{R3-R6,R10}&nbsp;&nbsp;;将R3-R6,R10中的数据保存到RO指向的地址，RO自动加1<br/><br/>在数据传送之前，将偏移量加到Rn中，其结果作为传送数据的存储地址.若使用后缀“!”，则结果写回到Rn中，且Rn值不允许为R15.指令举例如下:<br/>LDR&nbsp;&nbsp; Rd, [Rn, #Ox4]!<br/><br/>LDMFD&nbsp;&nbsp;SP!,{R0-R3,PC}^ ;中断返回<br/>“^”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时（PC是最后恢复的），CPSR也得到恢复<br/><br/>大端格式（Big-endian）<br/>小端格式（Little-endian）<br/> <br/>数据0x12345678存储格式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大端格式<br/>低地址&lt;----0x12|0x34|0x56|0x78----&gt;高地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小端格式<br/>低地址&lt;----0x78|0x56|0x34|0x12----&gt;高地址<br/><br/>ARM微处理器支持7种运行模式，分别为： CPSR M[4:0]<br/><br/>用户模式(usr)：ARM处理器正常的程序执行状态。&nbsp;&nbsp; 10000<br/>快速中断模式(fiq)：用于高速数据传输或通道处理。 10001 <br/>外部中断模式(irq)：用于通用的中断处理。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10010<br/>管理模式(svc)：操作系统使用的保护模式。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10011<br/>数据访问终止模式(abt)：当数据或指令预取终止时进入该模式，可用于虚拟存储及存储保护。10111 <br/>系统模式(sys)：运行具有特权的操作系统任务。 11111<br/>定义指令中止模式(und)：当未定义的指令执行时进入该模式，可用于支持硬件协处理器的软件仿真。 11011<br/><br/>ARM正常工作一般工作在用户模式和系统模式，复位的时候进入管理模式<br/><br/>对于ARM指令集来说，PC指向当前指令的下两条指令的地址<br/><br/>注意pc，在调试的时候显示的是当前指令地址，而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址<br/><br/>假设反汇编代码：&nbsp;&nbsp;0x000001 :&nbsp;&nbsp;mov lr pc&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>(此时查看PC寄存器的值是0x000001,但实际PC值是0x000003, lr里面保存的就是0x000003)<br/><br/> <br/><br/>fields 指定传送的区域(psr&nbsp;&nbsp;CPSR或SPSR)<br/>c 控制域屏蔽字节(psr[7..0])<br/>x 扩展域屏蔽字节(psr[15..8])<br/>s 状态域屏蔽字节(psr[23..16])<br/>f 标志域屏蔽字节(psr[31..24])<br/><br/>例如：MSR cpsr_c, #0xD3 ;&nbsp;&nbsp;CPSR[7...0] = 0xD3<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.cnsos.net/article.asp?id=204</link>
			<title><![CDATA[用VB制作自己的IE浏览器]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Wed,30 Dec 2009 23:12:27 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=204</guid>
		<description><![CDATA[　　自己做浏览器？有没有搞错？不要说像IE这样的庞然大物，就是小巧的Opera，我们大多数普通人也决计搞不出来。但如果你的机器里装有VB5.0专业版，那么事情就好办多了，想试试吗？那好，Let`s go!<br/>　　程序的主角是一个ActiveX控件：WebBrowser。当然，缺省状态下VB的工具箱中并没有它，我们得手工加入，方法是：右击工具箱，在出现的快捷菜单中选择“部件...”，确保在弹出的对话框中选中“控件”标签，找到Microsoft Internet Controls，在它前面的小框中打钩，然后确定。此时你会发现工具箱中多了两个小图标，其中，地球图标代表的控件正是我们需要的WebBrowser。<br/>　　由于许多人对WebBrowser控件不是很熟悉，VB的帮助中也没有有关它的内容（反正我没有找到），因此有必要介绍一下它的属性、方法和事件，限于篇幅，我们只涉及程序中用到的：<br/>　　属性：LocationURL 返回控件显示WEB页面的URL。<br/>　　方法：Navigate 转移到指定的URL或打开指定HTML文件。<br/>　　事件：<br/>　　1．DownloadBegin 下载操作开时触发。<br/>　　2．DownloadComplete 下载操作完成、终止或失败时触发。<br/>　　3．ProgressChange WebBrowser控件跟踪下载操作的过程，并定期触发此事件。其语法为：Sub WebBrowser_ProgressChange (ByVal Progress As Long, ByVal ProgressMax As Long)。Progress变元是当前已下载的数据总量，ProgressMax变元是将要下载的数据总量。<br/>　　4．TitleChange 当前文档标题改变时触发<br/>　　除了WebBrowser控件外，程序还需要一个Label控件：Label1；一个ComboBox控件：combo1，用来显示URL地址；一个StatusBar控件：StatusBar1；一个ProgressBar控件：ProgressBar1，用来显示下载进度（StatusBar控件和ProgressBar控件是ActiveX控件Microsoft Windows Common Controls5.0的成员，加入工具箱的方法同WebBrowser控件），这些控件的属性值都用缺省值。<br/>　　以下是程序清单：<br/>Option Explicit On<br/><br/>Private Sub Form_Load()<br/>&nbsp;&nbsp;&nbsp;&nbsp;Me.Caption = &#34;My Explorer&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Label1.Caption = &#34;URL&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Combo1.Text = &#34;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Combo1.Top = Label1.Height<br/>&nbsp;&nbsp;&nbsp;&nbsp;Combo1.Left = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;WebBrowser1.Top = Combo1.Top + Combo1.Height<br/>&nbsp;&nbsp;&nbsp;&nbsp;WebBrowser1.Left = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;Form_Resize()<br/>&nbsp;&nbsp;&nbsp;&nbsp;StatusBar1.Style = sbrSimple<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProgressBar1.Zorder()<br/>End Sub<br/><br/>Private Sub Form_Resize()<br/>&nbsp;&nbsp;&nbsp;&nbsp;On Error GoTo a<br/>&nbsp;&nbsp;&nbsp;&nbsp;Combo1.Width = Form1.Width - 100<br/>&nbsp;&nbsp;&nbsp;&nbsp;WebBrowser1.Width = Combo1.Width<br/>&nbsp;&nbsp;&nbsp;&nbsp;WebBrowser1.Height = Form1.Height - Combo1.Height - 1000<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProgressBar1.Top = Me.Height - StatusBar1.Height - 330<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProgressBar1.Left = 0.25 * StatusBar1.Width<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProgressBar1.Width = 0.75 * Me.Width - 250<br/>a:<br/>End Sub<br/><br/>Private Sub Combo1_Click()<br/>　　`转到指定网址<br/>&nbsp;&nbsp;&nbsp;&nbsp;WebBrowser1.Navigate(Combo1.Text)<br/>End Sub<br/><br/>Private Sub Combo1_KeyDown(ByVal KeyCode As Integer, ByVal Shift As Integer)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim I As Long<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim existed As Boolean<br/>&nbsp;&nbsp;&nbsp;&nbsp;If KeyCode = 13 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Left(Combo1.Text, 7) &lt;&gt; &#34;<a href="http://" target="_blank" rel="external">http://</a>&#34; Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combo1.Text = &#34;<a href="http://" target="_blank" rel="external">http://</a>&#34; + Combo1.Text<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebBrowser1.Navigate(Combo1.Text)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For I = 0 To Combo1.ListCount - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Combo1.List(I) = Combo1.Text Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;existed = True<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit For<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;existed = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Not existed Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combo1.AddItem(Combo1.Text)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;End If<br/>End Sub<br/><br/>Private Sub WebBrowser1_DownloadBegin()<br/>　　`下载开始时状态栏显示“Now Linking...”<br/>&nbsp;&nbsp;&nbsp;&nbsp;StatusBar1.SimpleText = &#34;Now Linking...&#34;<br/>End Sub<br/><br/>Private Sub WebBrowser1_DownloadComplete()<br/>　　`下载完成时状态栏显示“Link Finished”<br/>&nbsp;&nbsp;&nbsp;&nbsp;StatusBar1.SimpleText = &#34;Link Finished&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProgressBar1.Value = 0<br/>End Sub<br/><br/>Private Sub WebBrowser1_ProgressChange(ByVal Progress As Long,<br/>　　ByVal ProgressMax As Long)<br/>　　`下载进行时进度条变化<br/>&nbsp;&nbsp;&nbsp;&nbsp;If ProgressMax = 0 Then Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProgressBar1.Max = ProgressMax<br/>&nbsp;&nbsp;&nbsp;&nbsp;If Progress &lt;&gt; -1 And Progress &lt;= ProgressMax Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProgressBar1.Value = Progress<br/>&nbsp;&nbsp;&nbsp;&nbsp;End If<br/>End Sub<br/><br/>Private Sub WebBrowser1_TitleChange(ByVal Text As String)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Combo1.Text = WebBrowser1.LocationURL<br/>End Sub]]></description>
		</item>
		
			<item>
			<link>http://www.cnsos.net/article.asp?id=203</link>
			<title><![CDATA[五子棋算法浅析]]></title>
			<author>wzwyc@yeah.net(aci)</author>
			<category><![CDATA[编程开发]]></category>
			<pubDate>Wed,30 Dec 2009 20:37:28 +0800</pubDate>
			<guid>http://www.cnsos.net/default.asp?id=203</guid>
		<description><![CDATA[　　近来随着计算机的快速发展，各种棋类游戏被纷纷请进了电脑，使得那些喜爱下棋，又常常苦于没有对手的棋迷们能随时过足棋瘾。而且这类软件个个水平颇高，大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表；其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱；而我们今天将向大家介绍的是五子棋的算法。<br/>　　当我们与电脑对战时，您知道这些软件是怎样象人脑一样进行思考的吗？前不久我曾编写过一个五子棋的游戏，在这里就以此为例和大家一起探讨探讨。<br/>　　总的来说（我们假定您熟悉五子棋的基本规则），要让电脑知道该在哪一点下子，就要根据盘面的形势，为每一可能落子的点计算其重要程度，也就是当这子落下后会形成什么棋型（如：“冲四”、“活三”等），然后通览全盘选出最重要的一点，这便是最基本的算法。当然，仅靠当前盘面进行判断是远远不够的，这样下棋很容易掉进玩家设下的陷阱，因为它没有考虑以后的变化。所以在此基础上我们加入递归调用，即：在电脑中预测出今后几步的各种走法，以便作出最佳选择，这也是我们下棋时常说的“想了几步”。如此一来您的程序便具有一定的水平了。<br/>　　什么？不信！过来试试吧！<br/>　　总体思路弄清之后，下面进行具体讨论：<br/>　　一：数据结构先来看看数据结构，我们需要哪些变量？<br/>　　首先得为整个棋盘建立一张表格用以记录棋子信息，我们使用一个15*15的二维数组 Table[15][15] （15*15是五子棋棋盘的大小），数组的每一个元素对应棋盘上的一个交叉点，用‘0’表示空位、‘1’代表己方的子、‘代表对方的子；这张表也是今后分析的基础。<br/>　　在此之后还要为电脑和玩家双方各建立一张棋型表Computer[15][15][4]和Player[15][15][4]，用来存放棋型数据，就是刚才所说的重要程度，比如用&#39;20’代表“冲四”的点，用‘15’代表“活三”的点，那么在计算重要性时，就可以根据20&gt;15得出前者比后者重要，下子时电脑便会自动选择“冲四”的点。那为什么棋型表要使用三维数组呢？因为棋盘上的每一个点都可以与横、竖、左斜、右斜四个方向的棋子构成不同的棋型，所以一个点总共有4个记录；这样做的另一个好处是可以轻易判断出复合棋型，例如：如果同一点上有2个‘15’就是双三、有一个‘15’和一个‘20’就是四三。<br/>　　怎么样！3个数组构成了程序的基本数据骨架，今后只要再加入一些辅助变量便可以应付自如了。应该不会太难吧？OK！有了这么多有用的数据，我们就可以深入到程序的流程中去了。<br/>　　二：程序流程我们主要讨论五子棋的核心算法，即：人工智能部分，而其他像图形显示、键盘鼠标控制等，因较为简单，所以就不作过多介绍了。<br/>　　我们看到本程序由六个基本功能模块构成，各模块的详细分析如下：<br/>　　（1）初始化：首先，建立盘面数组Table[15][15]、对战双方的棋型表Computer[15][15][4]和并将它们清零以备使用；然后初始化显示器、键盘、鼠等输入输出设备并在屏幕上画出棋盘。<br/>　　（2）主循环控制模块：控制下棋顺序，当轮到某方下子时，负责将程序转到相应的模块中去，主要担当一个调度者的角色。<br/>　　（3）玩家下子：当轮到玩家下时，您通过键盘或鼠标在棋盘上落子，程序会根据该点的位置，在数组的相应地方记录‘2’，以表明该子是玩家下的。<br/>　　（4）盘面分析填写棋型表：本程序核心模块之一，人工智能算法的根本依据！其具体实现方法如下：您在下五子棋时，一定会先根据棋盘上的情况，找出当前最重要的一些点位，如“活三”、“冲四”等；然后再在其中选择落子点。但是，电脑不会像人一样分析问题，要让它知道哪是“活三”、哪是“冲四”，就得在棋盘上逐点计算，一步一步的教它。<br/>　　先来分析己方的棋型，我们从棋盘左上角出发，向右逐行搜索，当遇到一个空白点时，以它为中心向左挨个查找，如果遇到己方的子则记录然后继续，如果遇到对方的子、空白点或边界就停止查找。左边完成后再向右进行同样的操作；最后把左右两边的记录合并起来，得到的数据就是该点横向上的棋型，然后把棋型的编号填入到Computer[x][y][n]中就行了（x、y代表坐标，n=0、1、2、3分别代表横、竖、左斜、右斜四个方向）。而其他三个方向的棋型也可用同样的方法得到，当搜索完整张棋盘后，己方棋型表也就填写完毕了。然后再用同样的方法填写对方棋型表。<br/>　　注意：所有棋型的编号都要事先定义好，越重要的号数越大！<br/>　　OK! 怎么样？有点累了吧？不过千万别泄气！因为好戏还在后头。<br/>　　Let&#39;s go！<br/>　　（5）电脑下子：有了上面填写的两张棋型表，现在要作的就是让电脑知道在哪一点下子了。其中最简单的计算方法，就是遍历棋型表Computer[15][15][4]和Player[15][15][4]找出其中数值最大的一点，在该点下子即可。但这种算法的弱点非常明显，只顾眼前利益，不能顾全大局，这就和许多五子棋初学者一样犯了“目光短浅”的毛病。要解决这个问题，我们引入‘今后几步预测法’，具体方法是这样的： 首先， 让电脑分析一个可能的点，如果在这儿下子将会形成对手不得不防守的棋型（例如：‘冲四’、‘活三’）；那么下一步对手就会照您的思路下子来防守您，如此一来便完成了第一步的预测。这时再调用模块4对预测后的棋进行盘面分析，如果出现了‘四三’、‘双三’或‘双四’等制胜点，那么己方就可以获胜了（当然对黑棋而言‘双三’、‘双四’是禁手，另当别论）；否则照同样的方法向下分析，就可预测出第二步、第三步……等一等，要是盘面上没有对手必须防的棋型，哪该怎么办呢？进攻不成的话就得考虑防守了，将自己和对手调换一下位置，然后用上面的方法来预测对手的棋，这样既可以防住对手巧妙的攻击，又能侍机发动反击，何乐而不为呢！<br/>　　但是必须告诉大家的是：预测法的运算量相当之大，据我的经验，用Pentium-100预测3步的走法平均需要秒以上时间，所以建议预测量在5步以内。可别小瞧了这5步，有时它甚至会走出让您拍手叫绝的妙着呢！<br/>　　（6）胜负判断：务须多言，某方形成五子连即获胜；若黑棋走出‘双三’、‘双四’或长连即以禁手判负。<br/>　　到现在为止，整个五子棋软件就基本完成了，其水平大约在中级上下。当然，这种算法并不是最好的，但我相信它的基本思路是正确的。]]></description>
		</item>
		
</channel>
</rss>

