rtnet-0.9.12.tar.bz2 (Rtnet源码)
RTnet是Halmover大学开发的一个开源项目。该项目建立于2001年,它的目标是提供一个独立于硬件环境、灵活的通信平台。RTnet借鉴了Llnux的模块化设计方案,可以根据需要加载相应的模块。标准以太网中,网络节点之间的地位是平等的,为了保证数据的传输以确定的方式
进行。RTnet采用主从的方式实现以太网通信。由于TCP采用的三次握手协议会造成很大的开销,在传输层中RTnet仅使用了UDP协议来进行数据传输,在标准以太网中用
来进行动态地址转换的ARP协议,在RTnet中也改为使用静态的方式实现,在RTnet中MAC层使用时分多路访问仃DMA)策略访问媒体。在TDMA策略中网络的每一个成员只有在一个预先定义好的时间槽内才能发送实时数据。这样实时数据就能够以确定的方式发送。非实时数据可以在相对松散的时间槽内发送。在RTnet中有一个服务器节点和一个或多个客户端节点。在每个时间帧的开始,服务器节点发送一个SOF。所有的客户端节点都知道节点发送数据的时间槽与SOF的偏移量。客户端节点只有在属于自己的时间槽内才能发送数据。在RTnet中需要传输的数据包包含在发送任务的任务堆栈中,而接收的数据包首先从实时以太网驱动程序中放到一个栈管理器中,栈管理器根据数据包的协议类型。把数据送到相应的处理函数中。为了避免优先级翻转,堆栈管理器的优先级应该比所有使用RTnet服务的应用程序都要高。
Real-Time and Embedded Guide(pdf)
linux以其良好的稳定性、灵活的可裁剪性、强大的功能,在嵌入式领域有着广泛的应用。然而linux是一个软实时的操作系统,对于对实时性能要求很高的工控领域,实时性不能满足硬实时的要求。这篇文档介绍了硬实时系统在进程调度、内存管理等方面的要求。是硬实时嵌入式linux不可多得的资料。在文档中还介绍了RTAI的编程实例以及RTAI的实现细节。
This Guide covers the fundamentals of (i) real-time and embedded operating systems (focusing mostly on the
differences with general purpose operating systems such as Linux), and (ii) real-time programming. The emphasis is
on Free Software and Open Source Software examples: RTAI, RTLinux, eCos, RT-EMS, uCLinux, . . . , with a more
than proportional focus on RTAI.
This text also talks about design issues, software patterns and frameworks for real-time applications. That is, the
“high-level” aspects of these software projects. These higher levels are often poorly dealt with in publications on
real-time programming, which leads to the unfortunate situation that still too many real-time programmers use only
the powerful but dangerously unstructured API of their RTOS. Missing the chance to develop more structured, and,
hence, more deterministic and more portable software systems.
Understanding Linux Network Internals(chm)
If you've ever wondered how Linux carries out the complicated tasks assigned to it by the IP protocols -- or if you just want to learn about modern networking through real-life examples -- Understanding Linux Network Internals is for you.
Like the popular O'Reilly book, Understanding the Linux Kernel, this book clearly explains the underlying concepts and teaches you how to follow the actual C code that implements it. Although some background in the TCP/IP protocols is helpful, you can learn a great deal from this text about the protocols themselves and their uses. And if you already have a base knowledge of C, you can use the book's code walkthroughs to figure out exactly what this sophisticated part of the Linux kernel is doing.
实用电源电路锦集大全
详细介绍了各种电源的结构、原理、器件选择、使用方法等。电源有:稳压直流电源、可调直流电原、开关电源、交流稳压电源、变换电源、逆变电源、充电电源、应急电源等等
lint-nt C代码分析工具
代码静态分析工具PC-LINT安装配置
PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。
C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。PCLint识别并报告C语言中的编程陷阱和格式缺陷的发生。它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,等等。软件除错是软件项目开发成本和延误的主要因素。PClint能够帮你在程序动态测试之前发现编码错误。这样消除错误的成本更低。
使用PC-Lint在代码走读和单元测试之前进行检查,可以提前发现程序隐藏错误,提高代码质量,节省测试时间。并提供编码规则检查,规范软件人员的编码行为。
由于PC-LINT对于一般程序员来说可能比较陌生,有好多人安装了也不知道怎样配置和使用。
下面我就根据自己的安装和配置心得对PC-Lint的安装、配置及使用进行下详细说明.本人主要介绍了将PC-Lint集成到VC++6.0和SourceInsight的方法和步骤。
(一)Windows下C/C++开发工具中,VC6使用较为普遍,因此这里先讲下VC6.0环境中集成pclint的步骤.
首先, 当然要下载软件,正版软件要200多$呢,买不起!所以只好网上找免费的拉。从http://www.61ic.com/down/othe/pclint.rar处可以下载到一个8.0版本的pclint.
1.将pclint.rar解压至c:\, 这样lint文件就位与c:\pclint(安装目录)下了。
2.将c:\pclint\lnt 下的3个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt拷贝至c:\pclint下, 再在安装目录下创建std.lnt和options.lnt两个文件,其中std.lnt的内容如下
// contents of std.lnt
c:\pclint\co-msc60.lnt
c:\pclint\lib-w32.lnt
c:\pclint\options.lnt -si4 -sp4
-i"D:\Program Files;D:\Program Files\Microsoft Visual Studio\VC98\Include"
//end
其中-i后面的路径名为VC的安装路径和VC Include 文件路径,根据自己的修改便可。
options.lnt 内容可为空,为定制内容,以后需要时再添加。
准备工作做完了,下一步就是要将pclint集成到VC6中去,先配置lint使之能对单个C或C++文件进行检查。
1.打开VC6,tools--->customize-->tools 新建一个名为pclint的项,在下面填入
command: C:\pclint\lint-nt.exe
arguments: -u c:\pclint\std.lnt c:\pclint\env-vc6.lnt "$(FilePath)"
Use Output Window 打上勾
close 完成。 这个在你VC窗口tools菜单下应该多了一个pclint选项,可以用它来运行lint程序,对你的c/c++代码进行静态检查了。
现在就可以用个小程序测试一下pclint了
//test1.cpp
#include <string.h>
class X
{
int *p;
public:
X()
{ p = new int[20]; }
void init()
{ memset( p, 20, 'a' ); }
~X()
{ delete p; }
};
编译这个文件,看下你的编译器给你多少警告,再运行下lint, 可以自己对比一下。
我的机器上,VC产生0 errors 0 warnings, 而lint程序产生了如下8条警告信息,有些还是很有用处的提示,这里就不一一分析了.
test.cpp(12): error 783: (Info -- Line does not end with new-line)
test.cpp(7): error 1732: (Info -- new in constructor for class 'X' which has no assignment operator)
test.cpp(7): error 1733: (Info -- new in constructor for class 'X' which has no copy constructor)
{ memset( p, 20, 'a' ); }
test.cpp(9): error 669: (Warning -- Possible data overrun for function 'memset(void *, int, unsigned int)', argument 3 (size=97) exceeds argument 1 (size=80) [Reference: test.cpp: lines 7, 9])
test.cpp(7): error 831: (Info -- Reference cited in prior message)
test.cpp(9): error 831: (Info -- Reference cited in prior message)
{ delete p; }
test.cpp(11): error 424: (Warning -- Inappropriate deallocation (delete) for 'new[]' data)
--- Wrap-up for Module: test.cpp
test.cpp(2): error 753: (Info -- local class 'X' (line 2, file test.cpp) not referenced)
Tool returned code: 8
2.通常一个VC项目中包含多个C或C++文件,有时需要同时对这一系列的文件进行lint检查,我们可以通过配置一个pclint_project来达到目的。
和前面第一步中的方法基本一样,不过这里我们需要用到unix中的find等命令来查找当前目录下的C和C++文件,然后再将它们送给lint程序处理,所以得先从http://www.weihenstephan.de/~syring/win32/UnxUtils.zip下载UnxUtils.zip.
接着按下列步骤进行:
(i)解压UnxUtils.zip至c:\unix下, 可以看到C:\unix\usr\local\wbin有很多unix下的命令,等下会用到
(ii)打开VC6,tools--->customize-->tools 新建一个名为pclint_project的项,只不过下面的commands和arguments内容不同。
commands: C:\unix\usr\local\wbin\find.exe
arguments: $(FileDir) -name *.c -o -name *.cpp | C:\unix\usr\local\wbin\xargs lint-nt -i"c:\unix\usr\local" -u c:\pclint\std.lnt c:\pclint\env-vc6.lnt
(iii)Use Output Window打上勾,close退出。好了,这时VC tools菜单下应该又多了一个pclint_project项了,你以后可以用它来对一个VC项目运行lint检查程序了.
(二)SourceInsight中集成pclint程序的方法.
Windows平台下也有好多人都喜欢用SourceInsight编辑C/C++程序,如果将pclint集成到SourceInsight中,那就相当于给SourceInsight增加了一个C/C++编译器,而且它的检查更严格,能发现一些编译器发现不了的问题,可以大大减少程序中潜伏的BUG。这样的话,相信更多人会喜欢SourceInsight这个工具了。
下面简要地介绍下pclint集成到SourceInsight中的方法
有了上面VC中集成pclint的经验, 下面的事情就应该比较轻松了,
(a)打开你的SourceInsight, 选择Options-->Custom Commands-->Add, 输入pclint(当然名字可以随便).
(b) Run中输入: c:\pclint\lint-nt -u c:\pclint\std.lnt c:\pclint\env-vc6.lnt %f
(c)Dir留空,将Iconic Window, Capture Output, Parse Links in OutPut, File,then Line 四项前打上勾。
(d)然后点右侧 Menu--->Menu-->View--><end of menu>, 右侧Insert, OK.
(e)此时在SourceInsight中的View菜单下多了个pclint选项,可以用它来对单个C/C++文件进行静态检查。
用类似的方法可以配置对一个SourceInsight工程文件的lint检查。
(a)打开你的SourceInsight, 选择Options-->Custom Commands-->Add, 输入pclint_project(当然名字可以随便).
(b) Run中输入: C:\unix\usr\local\wbin\find.exe %d -name *.c -o -name *.cpp | C:\unix\usr\local\wbin\xargs lint-nt
-i"C:\unix\usr\local" -u c:\pclint\std.lnt c:\pclint\env-vc6.lnt
(c)Dir留空,将Iconic Window, Capture Output, Parse Links in OutPut, File,then Line 四项前打上勾。
(d)然后点右侧 Menu--->Menu-->View--><end of menu>, 右侧Insert, OK.
(e)此时在SourceInsight中的View菜单下多了个pclint_project选项,可以用它来一个工程中的C/C++文件进行静态检查。
本文主要对pclint集成到VC及SourceInsight环境中的方法根据本人安装和使用心得做了较详细介绍,希望对以前没使用过pclint的朋友们能有所帮助,不足之处还请多指正!
PC-Lint使用简介
用开发环境进行LINT也可以使用开发环境来执行LINT操作,一般开发环境都支持运行可执行文件,但不一定支持运行批处理文件,下面用Source Insight , Ultra Edit, MSVC 6.0 来举例说明如何在开发环境下进行LINT。
3.2.1 在Source Insight中集成
如果你在安装过程中选定了使用某个开发环境,安装程序会在你安装的目录下生成一个en
v-xxx.lnt的文件,例如选择了Source Insight就会有一个env-si.lnt文件。用编辑器打开
该文件,在该文件开始的注释中说明了如何将PC-LINT功能集成在开发环境中,集成在Sou
rce Insight中的过程如下:
1)从Options菜单中选择“Custom Commands”命令项。
2)在Name栏中输入“PC-lint ”,原则上这个名称可以随便起,只要你能搞清楚它的含义
就可以了。
3)在Run栏中输入“c:\lint\lint-nt -u -ic:\lint std env-si %f”其中c:\lint是你P
C-LINT的安装目录。
4)在Output栏中选择“Iconic Window”、“Capture Output”。
5)在Control栏中选择“Save Files First”。
6)在Source Links in Output栏中选择“Parse Links in Output”、“File,then Lin
e”。
7)在Pattern栏中输入“^\([^ ]*\) \([0-9]+\)”。
8)点Add键加入该命令。如下图:
9)使用时,在Source Insight下打开要LINT的文件,打开Options菜单中的“Custom Com
mands”命令项,在“Command”栏中选择“PC-lint unit check”命令运行即可。
注意到我的Run一栏的参数和上面的提示不一样,其实我的其他古怪参数都放到c:\lint\s
td.lnt中了。请注意,不论你怎样配置参数一定不要忘记了将si-env.lnt包含在你的配置
文件里,否则就无法进行错误信息和程序的自动对应了。
为了使用方便,你还可以配置一下Menu按钮,将它加到系统菜0单里,这属于一般性的
Source Insight应用,笔者就不在此赘述了。
第二笔者在NT中使用Source Insight时,好象集成不了,原因暂时不明了。上面的例子在
WIN 95下测试成功。
如果要修改LINT选项,可直接在Run栏中修改,也可专门编辑一个*.lnt文件放在c:\lint目
录下,并将该文件名加入Run栏中,和命令行方式是一样的。
3.2.2在Ultra Editor中集成
选取 Menu | Advanced | Tool Configuration ... , 显示如下图:
1)点按“Insert",
2)在command line:中填写:c:\lint\lint-nt c:\lint\std.lnt %f
3)在Menu Item中填写:PC-LINT
4)在Command Output中选择: (x) Output to List Box 和 (x) Capture Output
5)点按"OK"
如图所示的配置笔者在UE6.0 / NT 4.0 下测试成功。
3.2.3 在MSVC 6.0中集成
//这个好使过
基本原理是一样的:
1)选取 menu | tools | customize.....
2)选取 Tools Tab:
3)点按主对话框上方的虚线小方框 New a tool item
4)输入 name: PC-LINT
5)输入 Command: c:\lint\lint-nt.exe
6)输入 Arguments: c:\lint\std.lnt $(FilePath) //注:替std.lnt为lnt\env-vc6.lnt
7) 选择 (x) Use Output Window
8)Close
完成后,在tools菜单下就会有一项PC-LINT选项。
下面是笔者在VC6 / Win NT 4.0 的情况下的TOOL配置图:
3.3LINT选项
LINT选项可以放在注释中,例如:
/*lint option1 option2 ... optional commentary */
//lint option1 option2 ... optional commentary
选项间要以空格分开,lint命令一定要小写,并且紧跟在/*或//后面,不能有空格。如果
选项由类似于操作符和操作数的部分组成,例如-esym(534, printf, scanf, operat or
new),其中最后一个选项是operator new,那么在operator和new中间只能有一个空
格。
选项还可以放在宏定义中,例如:
#define DIVZERO(x) /*lint -save -e54 */ ((x) /o) /*lint -restore */
LINT的选项很多共有300多种,大体可分为以下几类:
1)错误信息禁止选项
该类选项是用于禁止生成某类错误信息的选项,最常用的是-e和+e,-e是禁止生成某类错
误信息,+e是恢复生成某类错误信息。运行lint目录下的msg.exe可以得到msg.txt文件,
这个长达5000行的文件包含了所有的错误信息号和解释。
-w 对于所有大于级别的告警信息都不显示。
-wlib()对于所有大于级别的关于库函数数的告警信息都不显示。我们可以用-wlib(0)来屏
蔽所有的库函数的告警信息,-wlib(1)只显示库函数中的句法错误。
-esym(#,) 可以屏蔽对于特定符号的某告警信息。
2)变量类型大小选项
不同的目标机、编译系统变量类型的的大小(如短整形变量、整形变量等)会有所不同,
该类选项用于为目标机设置变量类型的大小。由于默认的设置与大部分的编译器是匹配的
,这些专门的设置通常情况下是不需要的,只在特别的目标机结构中才用。例如一个M680
00目标机,它的int类型和指针类型通常是32bit的,这时你应该使用选项:-si4
-sp4。这些尺寸参数的当前值可以通过help屏来获得,例如可以输入以下命令行:
lin -si4 -sp4 ?
3)冗长信息选项
冗长信息指的是LINT过程中产生的一些与编译过程有关的信息,而不是真正的告警信息、
错误信息等。是否生成这些信息可以通过-v和+v选项来决定。+v是生成这些信息,-v是关
闭这些信息,这组选项中除+v外,其它所有选项都可以关闭+v选项。
4)标记选项
以+f、++f、-f和--f开头的选项是标记选项。他们的逻辑含义分别如下:
+f...:通过把标志置为1而把它置为ON
-f...:通过把标志置为0而把它置为OFF
++f...:标志增1
--f...:标志减1
后面两个用于你想在局部把一个标志置为ON的情况,而不影响全局设置。例如你可以这样
使用:
/*lint ++flb */
int printf( );
/*lint --flb */
标记选项的种类很多,基本含义是用于打开或关闭某类语法情况使用,例如允许使用缩写
结构体名称,允许使用无名联合体,把所有模块当作C++编译等。
5)消息显示选项
消息显示选项用于定义消息输出格式。主要有消息高度选项、消息宽度选项、消息格式选
项等。
6)其它选项
其它选项中的种类很多,各种类间差异很大,在这里就不一一介绍了,建议大家看一看《
PC-LINT》一书,第五章有对每种选项的详细说明。lint本身也有一些说明信息, lint-n
t 2> lint.txt 然后狂按几个回车就可以生成一个lint选项的说明文件。
PC-Lint是一个历史悠久,功能异常强劲的静态代码检测工具。
概述
PC -Lint是一个历史悠久,功能异常强劲的静态代码检测工具。它的使用历史可以追溯到计算机编程的远古时代(30多年以前)。经过这么多年的发展,它不但 能够监测出许多语法逻辑上的隐患,而且也能够有效地帮你提出许多程序在空间利用、运行效率上的改进点,在很多专业级的软件公司,比如Microsoft, PC-Lint检查无错误无警告是代码首先要过的第一关,我个人觉得,对于小公司和个人开发而言,PC-Lint也非常重要,因为基于开发成本考虑,小公 司和个人往往不能拿出很多很全面的测试,这时候,PC-Lint的强劲功能可以很好地提高软件的质量。
功能
1) PC-Lint是一种静态代码检测工具,可以说,PC-LINT是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。
2) PC-lint不但可以检测单个文件,也可以从整个项目的角度来检测问题,因为C语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而PC-Lint在检查当前文件的同时还会检查所有与之相关的文件,可想而知,它会对我们有很大的帮助。
3) PC-lint支持几乎所有流行的编辑环境和编译器,比如Borland C++从1.x到5.x各个版本、Borland C++ Build、GCC、VC,VC.net、watcom C/C++、Source insight、intel C/C++等等,也支持16/32/64的平台环境。
4) 支持Scott Meyes的名著(Effective C++/More Effective C++)中说描述的各种提高效率和防止错误的方法。
四步速成PC-Lint概述
这 么好的工具,当然是先拿起来用了再说,这里分为四步,保证你马上可以使用PC-Lint了,当然,如果你上手以后,想细致深入学习这个工具,可以在网上查 找相应的资料,另外在我的另一个系列文章《软件开发的七种武器》中有一篇是讲述 PC-Lint使用的,比这篇要深入细致一些,如有兴趣,也可以看看。
第一步:安装&设置
安装和通常的软件没有什么不同。安装结束后在PC-Lint安装目录下运行CONFIG.exe,各项设置简要解释如下:
a) 第一步,给出PC-Lint的安装路径和选择设置的保存文件。
b) 第二步,选择你所使用的C/C++编译器:比如Visual C++ 6.x。
c) 第三步,选择内存模式:比如32 bit Flat Model。
d) 第四步,选择所使用的库:比如MFC,OWL,等,可多选,在windows下开发的一般要选中windows 32 bit。
e) 第五步,C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开:比如Scott Meyers,可不选。
f) 第六步,头文件的设置:可在后面步骤中手工添加。
第二步:整合PC-Lint到选定的编译环境
当 你在上述第二步中选择了编译器后,可以在PC-Lint目录下找到一个"env-选用的编辑环境.lnt"文件,比如对于Source insight 是env-si.lnt,对于vc6是env-vc6.lnt。打开此文件,根据上面的描述,配置你的编译器,下面以VC6为例:
·选取菜单 tools | customize.....
·选取 Tools 标签
·点按主对话框上方的虚线小方框 New
·输入 name: PC-LINT
·输入 Command: c:\lint\lint-nt.exe,假设安装到此路径
·输入 Arguments: c:\lint\std.lnt ?(FilePath)?7)选择 (x) Use Output Window
·Close
第三步:Lint单个C文件
a) 打开一个C文件
b) 运行第2)步集成上的PC-Lint菜单项
c) LINT结果会在一两秒之内出来。告警的解释可参考LINT安装目录下MSG.TXT文件,打开文件,通过查找告警号码定位,就可以看到比较详细的说明。
第四步:Lint多个C文件
a) 在LINT软件目录下建立PRJLINT.LNT文件,文件的第一行是使用的LINT配置文件名,从第二行开始,列出想所有要LINT的*.C文件名,一 行一个。如果要把结果输出到文件,在前面加上一行"-os(文件名)"(例如:"-os(c:\lint\result.txt)")。样例: YF_Config.lnt
// 以下为自己想要进行Lint的.C文件,
G:\src\tt\tt1.c
G:\src\tt\tt2.c
…
b) 用2)介绍的方法在Source Insight"中介绍的方法增加一条"PC-LINT PROJECT"命令,所有设置与"PC-LINT"设置相同,除了
①"Custom Commands"对话框中"RUN"编辑框的文字由"C:\LINT\LINT-NT.EXE filename.lnt %f"改为"C:\LINT\LINT-NT.EXE PRJLINT.LINT",也就是把配置文件名改为PRJLINT.LNT,并去掉未尾的"%f"
②设置的快捷键与PC-LINT要区别开来
利用下面的DOS命令可以用来得到一堆*.C文件的清单。例如:
① 列出C:\SRC下所有*.C文件,并保存到C:\SRC\FILELIST.TXT:
DIR C:\SRC\*.C /B >C:\SRC\FILELIST.TXT
② 列出C:\SRC下,包括SRC的子目录下的所有的*.C文件,,并添加到C:\SRC\FILELIST.TXT的未尾:
DIR C:\SRC\*.C /S/B >>C:\SRC\FILELIST.TXT
PC-Lint 重要文件说明
Msg.txt :解释告警的内容。
选用的.lnt :包含头文件的路径,-i选项。
env-选用的编辑环境.lnt :讲述如何将PC-lint与对应的编辑环境结合起来。
co-xxx.lnt :选定的编译器。
STD.LNT :内存模型等全局性东西。
LIB-xxx.LNT :库类型的列表,包括标准C/C++库,MFC库,OWL库等等。
AU-xxx.LNT :C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开。
OPTIONS.LNT :反映全局编译信息显示情况的选项文件。
(作者: 楚云风 出处:C++学习资源网 作者: 楚云风 出处:C++学习资源网)
----------------------------------------------------------------------------------------------------------------------------------------
lint使用简介
来源 http://www.itisedu.com/08/200605112241165.asp
[关键字]软件质量保证 lint
LINT工具是一种软件质量保证工具,许多国外的大型专业软件公司,如微软公司,都把它作为程序检查工具,在程序合入正试版本或交付测试之前一定要保证通过了LINT检查,他们要求软件工程师在使用LINT时要打开所有的编译开关,如果一定要关闭某些开关,那么要给出关闭这些开关的正当理由。
可想而知,如果从我们编码后第一次编译程序时就使用LINT来检查程序,并且保证消除所有的LINT告警,我们就不会遇到象今天这么多的告警信息。即使在今天,我们如果能抽出一定的精力来消除程序中的LINT告警,以后再维持这种无告警状态就是很容易的了。我们程序质量的提高也是不言而喻的。
PC-LINT是GIMPEL SOFTWARE公司的产品,其中的内容是非常广泛的,光是选项就有300多个,涉及到程序编译及语法使用中的方方面面。本篇培训材料旨在引导读者入门,学会PC-LINT的基本使用方法,起抛砖引玉的作用,能让读者从这里起步继续去研究如何娴熟地使用PC-LINT的各种选项,能让它充分为我们的开发工作服务。
1.概述
如果要给LINT工具下一个形象点的定义,那就是:一种更加严格的编译器。它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。请看下面的例子:
1:
2:char *report( int m, int n, char *p )
3:{
4: int rESult;
5: char *temp;
6: long nm;
7: int i, k, kk;
8: char nAMe[11] = "Joe Jakeson";
9:
10: nm = n * m;
11: temp = p == "" ? "null" : p;
12: for( i = 0; i 13: {
14: k++;
15: kk = i;
16: }
17:
18: if( k== 1 ) result = nm;
19: else if( kk > 0 ) result = 1;
20: else if( kk < 0 ) result = -1;
21:
22: if( m == result ) return( temp );
23: else return( name );
24:}
上面的代码用一般的编译器编译是一段有效的代码,但是用PC-LINT编译就会有几个告警。首先第8行向name数组赋值时丢掉了nul字符,第10行的乘法精度会失准,第11行的比较有问题,第14行的变量k没有初始化,第15行的kk可能没有被初始化,第22行的result也有可能没有被初始化,第23行返回的是一个局部对象的地址。这段代码在大部分编译器下是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但PC-LINT只通过一次简单的编译就可做到,显然为我们节省了大量的开发时间。
下面就让我们看看如何安装使用PC-LINT。
2.如何安装PC-LINT
PC-LINT的软件的安装过程比较复杂,选项较多,下面根据安装过程,逐条说明每一步的含义。
0)如果是zip文件,将ZIP安装文件展开到目录C:\lint.ins下,进入COMMAND PROMPT,先进行目录映射 subST g: c:\lint.ins,然后转到G: , 执行install。其他步骤和下面的从软盘安装是一样的。
1)在A:驱插入PC-LINT安装盘,输入A:\>install命令,进入开始安装栏,按任意键继续,进入PC-LINT介绍栏,再按任意键继续。
2)进入环境选择栏,这一栏中有三个选项:
Windows NT/Windows 95
MS-DOS(DOS extended)
OS/2(32BIt)
如果计算机安装了WIN95、WIN97、WIN98或WINNT要选择Windows NT/Windows 95,如果
只有DOS则选择DOS。
3)进入安装目录选择栏,它推荐的是C:\>LINT,如不想安装在这个目录下,可输入自己想要安装的目录,然后按回车确认,如果要安装的目录不存在,它会提示为你建立这个目录。我们这里选C:\>LINT
4)选择安装盘所在的磁盘驱动器,我们这里选A:
5)判断是否要选择多种编译器或编译库的配置,如果要对不同编译环境下的程序进行L
INT,则选YES,否则选NO。然后回车确认。
6)这时看到一个编译器列表,在这个表中选择自己使用的编译器,如果表中没有自己使用的编译器,可选择通用编译器:Generic Compilers。按回车确认。这个选项会体现在co-xxx.lnt文件中。
7)接着安装程序会让你选择一个的内存模型,可以根据自己程序区和数据区的实际大小选择一个恰当的内存模型。如果CPU为32位68K系列,则要选择:32-bit Flat Module。
内存模型的选项会体现在STD.LNT文件中。
8)选完内存模型后,会看到一个库类型的列表,在这里选择一个或多个编译时使用的库。这个选项会体现在LIB-xxx.LNT文件中。
9)接着是让你选择为使用C++编程提出过重要建议的作者,选择的某作者后,他提出的编程建议方面的选项将被打开。与作者选择有关的选项会体现在AU-xxx.LNT文件中。
10)下一步是设置包含文件目录。有两种选项,第一种是使用环境变量INCLUDE,环境变量在批处理文件中设置,环境变量后每个目录用分号隔开,例如可设成 “INCLUDE=C:\MRI\MCC68K;D:\LAP\SRC\INC”。第二种选项是使用-i选项,-i选项体现在STD.LNT文件中,每个目录前以-I引导,目录间以空格分隔,例如可设成“-IC:\MRI\MCC68K -ID:\LAP\SRC\INC”。如果选择使用-I选项,安装程序会接着让你输入包含文件所在的目录。
11) 如果前面选择了使用多个编译环境,这里将会问你是否选择更多的编译环境,如果选YES,将会从第6步开使重复。如果选NO则会结束编译器选择。
12)接下来将会准备产生一个 反映全局编译信息显示情况的选项文件OPTIONS.LNT,该文件的产生方式有两种,一种是安装程序对几个核心选项逐一解释并提问你是否取消该选项,如果你选择取消,则会体现在OPTIONS.LNT文件中,具体体现方式是在该类信息编码前加-e,后面第13~18步是逐一选择核心选项的过程。如果选择第二种选择方式,安装文件会先生成一个空的OPTIONS.LNT文件,等你以后在实际应用时加入必要的选项。
13)是否关闭赋值时的布尔测试告警,如:if(a=f()){...
14)是否关闭赋值时的有符号量和无符号量间的不匹配告警,通常情况下,这种赋值不会带来问题,选择关闭该告警信息的同时,其他类型的有符号量和无符号量间混合操作的告警仍然是打开的。
15)当把一个整形量赋值给一个比它短的量时,后者会丢失精度,例如把一个INT量赋值给给一个CHAR量。本步是让你选择是否关闭该类告警。
16)是否关闭左移带符号量的告警。通常PC-LINT会对所有带符号量的移动产生告警,但右移一般是由不同的CPU来确定是否将符号位移入,左移一般是不会产生什么问题的,所以可以选择关闭该告警。
17)在一个C函数被定义或声明前调用它,并不总是会产生错误,在这里可以选择是否关闭该告警选项。该选项对C++程序不起作用。
18)是否关闭“调用不存在的函数原型”告警。有些程序员不愿遵守严格的函数原形定义约定,但PC-LINT会在调用一个没有定义的函数原型时产生一个告警,在这里可以选择关闭该告警。
19)通过上面的步骤确定OPTIONS.LNT文件的形式后,接着是选择编译环境。PC-LINT提供了集成在多种开发环境中工作的功能,例如可集成在VC、 BC、Source Insight中。假如我们在这里选择Source Insight。选择后安装程序会继续问你是否还选择其它的环境,可根据自己应用的实际情况选择一种或多种开发环境。开发环境的选择情况记录在env-xxx.lnt文件中。
20)安装程序会生成一个LIN.BAT文件,该文件是运行PC-LINT的批处理文件,为了使该文件能在任何路径下运行,安装程序提供了两种方法供你选择。第一种方法是让你选择把LIN.BAT拷贝到任何一个PATH目录下,在安装结束运行LCOPY.BAT文件时,会把LIN.BAT拷贝到你指定的目录。第二种方法是生成一个LSET.BAT文件,在每次使用PC-LINT前先运行它来设置路径,或者把LSET.BAT文件的内容拷贝到AUTOEXEC.BAT文件中。
21)在安装程序执行完后第一件事是在你安装的目录下执行LCOPY.BAT文件。它会从安装盘拷贝将一些文件拷贝到安装目录下,并根据你在安装过程中的选择来设置文件中的参数。
3.LINT 一个C文件
3.1用命令行方式进行LINT
如果使用LIN.BAT批处理文件进行LINT,在LINT前要先看一下该批处理文件中的内容,里面包含了LINT-NT命令和命令选项,可以根据自己的要求来修改、增减选项。我们看到,在这个批命令中嵌套了一个std.lnt文件,在std.lnt文件中还嵌套了co.lnt、options.lnt和 lib-stl.lnt文件,原则上*.lnt文件是可以无限制嵌套,该类文件中一般都是了LINT的选项,可通过修改这些文件来修改LINT选项,选项是按照从左到右的顺序执行的。可执行下面命令行:
C:\abc\src>lin alpha.c beta.c GAmma.c
通常对于由多个C模块组成的程序,最好先分别对每个C模块单元进行LINT检查,做单元LINT时可如下运行:
C:\abs\src>lin -u alpha.c
其中-u是单元选项,使用-u后可以关闭一些检查多模块时会产生的告警,例如“函数未被使用”或“函数没有定义”等。
也可以不使用LIN.BAT批处理文件,而直接使用LINT命令。在DOS环境下LINT命令为LINT.EXE,在Windows95/NT环境下为 LINT-NT.EXE,在OS2环境下为LINT-OS2.EXE。直接使用LINT命令要注意的一点是要在使用前预先设置LINT目录所在路径,最好的方法是把该路径加在AUTOEXEC.BAT文件中。其它的使用方法与使用批处理文件相同。例如:
C:\abs\src>lint-nt -ic:\lint\ std.lnt -os(_lint.tmp) *.c
3.2用开发环境进行LINT
也可以使用开发环境来执行LINT操作,一般开发环境都支持运行可执行文件,但不一定支持运行批处理文件,下面用Source Insight , Ultra EDIt, MSVC 6.0 来举例说明如何在开发环境下进行LINT。
3.2.1 在Source Insight中集成
如果你在安装过程中选定了使用某个开发环境,安装程序会在你安装的目录下生成一个env-xxx.lnt的文件,例如选择了Source Insight就会有一个env-si.lnt文件。用编辑器打开该文件,在该文件开始的注释中说明了如何将PC-LINT功能集成在开发环境中,集成在 Source Insight中的过程如下:
1)从Options菜单中选择“Custom Commands”命令项。
2)在Name栏中输入“PC-lint ”,原则上这个名称可以随便起,只要你能搞清楚它的含义就可以了。
3)在Run栏中输入“c:\lint\lint-nt -u -ic:\lint std env-si %f”其中c:\lint是你PC-LINT的安装目录。
4)在Output栏中选择“Iconic Window”、“Capture Output”。
5)在Control栏中选择“SAve Files First”。
6)在Source Links in Output栏中选择“Parse Links in Output”、“File,then Line”。
7)在pattern栏中输入“^\([^ ]*\) \([0-9]+\)”。
8)点Add键加入该命令。如下图:
9)使用时,在Source Insight下打开要LINT的文件,打开Options菜单中的“Custom Commands”命令项,在“Command”栏中选择“PC-lint unit check”命令运行即可。
注意到我的Run一栏的参数和上面的提示不一样,其实我的其他古怪参数都放到c:\lint\std.lnt中了。请注意,不论你怎样配置参数一定不要忘记了将si-env.lnt包含在你的配置文件里,否则就无法进行错误信息和程序的自动对应了。
为了使用方便,你还可以配置一下Menu按钮,将它加到系统菜0单里,这属于一般性的
Source Insight应用,笔者就不在此赘述了。
第二笔者在NT中使用Source Insight时,好象集成不了,原因暂时不明了。上面的例子在WIN 95下测试成功。
如果要修改LINT选项,可直接在Run栏中修改,也可专门编辑一个*.lnt文件放在c:\lint目录下,并将该文件名加入Run栏中,和命令行方式是一样的。
3.2.2在Ultra EDItor中集成
选取 Menu | Advanced | TOOl Configuration ... , 显示如下图:
1)点按“Insert",
2)在command line:中填写:c:\lint\lint-nt c:\lint\std.lnt %f
3)在Menu Item中填写:PC-LINT
4)在Command Output中选择: (x) Output to List BOx 和 (x) Capture Output
5)点按"OK"
如图所示的配置笔者在UE6.0 / NT 4.0 下测试成功。
3.2.3 在MSVC 6.0中集成
基本原理是一样的:
1)选取 menu | tools | customize.....
2)选取 Tools Tab:
3)点按主对话框上方的虚线小方框 New a tool item
4)输入 name: PC-LINT
5)输入 Command: c:\lint\lint-nt.exe
6)输入 Arguments: c:\lint\std.lnt $(FilePath)
7) 选择 (x) Use Output Window
8)Close
完成后,在tools菜单下就会有一项PC-LINT选项。
下面是笔者在VC6 / Win NT 4.0 的情况下的TOOL配置图:
3.3LINT选项
LINT选项可以放在注释中,例如:
/*lint option1 option2 ... optional commentary */
//lint option1 option2 ... optional commentary
选项间要以空格分开,lint命令一定要小写,并且紧跟在/*或//后面,不能有空格。如果选项由类似于操作符和操作数的部分组成,例如-esym (534, printf, SCAnf, operat or new),其中最后一个选项是operator new,那么在operator和 new中间只能有一个空
格。
选项还可以放在宏定义中,例如:
#define DIVZERO(x) /*lint -save -e54 */ ((x) /o) /*lint -restore */
LINT的选项很多共有300多种,大体可分为以下几类:
1)错误信息禁止选项
该类选项是用于禁止生成某类错误信息的选项,最常用的是-e和+e,-e是禁止生成某类错误信息,+e是恢复生成某类错误信息。运行lint目录下的msg.exe可以得到msg.txt文件,这个长达5000行的文件包含了所有的错误信息号和解释。
-w 对于所有大于级别的告警信息都不显示。
-wlib()对于所有大于级别的关于库函数数的告警信息都不显示。我们可以用-wlib(0)来屏蔽所有的库函数的告警信息,-wlib(1)只显示库函数中的句法错误。
-esym(#,) 可以屏蔽对于特定符号的某告警信息。
2)变量类型大小选项
不同的目标机、编译系统变量类型的的大小(如短整形变量、整形变量等)会有所不同,该类选项用于为目标机设置变量类型的大小。由于默认的设置与大部分的编译器是匹配的,这些专门的设置通常情况下是不需要的,只在特别的目标机结构中才用。例如一个M68000目标机,它的int类型和指针类型通常是32bit 的,这时你应该使用选项:-si4
-sp4。这些尺寸参数的当前值可以通过help屏来获得,例如可以输入以下命令行:
lin -si4 -sp4 ?
3)冗长信息选项
冗长信息指的是LINT过程中产生的一些与编译过程有关的信息,而不是真正的告警信息、错误信息等。是否生成这些信息可以通过-v和+v选项来决定。+v是生成这些信息,-v是关闭这些信息,这组选项中除+v外,其它所有选项都可以关闭+v选项。
4)标记选项
以+f、++f、-f和--f开头的选项是标记选项。他们的逻辑含义分别如下:
+f...:通过把标志置为1而把它置为ON
-f...:通过把标志置为0而把它置为OFF
++f...:标志增1
--f...:标志减1
后面两个用于你想在局部把一个标志置为ON的情况,而不影响全局设置。例如你可以这样使用:
/*lint ++flb */
int printf( );
/*lint --flb */
标记选项的种类很多,基本含义是用于打开或关闭某类语法情况使用,例如允许使用缩写结构体名称,允许使用无名联合体,把所有模块当作C++编译等。
5)消息显示选项
消息显示选项用于定义消息输出格式。主要有消息高度选项、消息宽度选项、消息格式选项等。
6)其它选项
其它选项中的种类很多,各种类间差异很大,在这里就不一一介绍了,建议大家看一看《PC-LINT》一书,第五章有对每种选项的详细说明。lint本身也有一些说明信息, lint-nt 2> lint.txt 然后狂按几个回车就可以生成一个lint选项的说明文件。
4.LINT一个工程下的多个C文件
4.1为何要LINT多个C文件
在程序编码初期,我们关心的可能只是单个C模块种中的语法问题,等到编程后期,对于由多个C模块组成的程序,我们希望了解当把多个模块连接在一起后是否还有存在于模块间的语法问题。这时编译器虽然能给出一些告警,但PC-LINT的连接能给出更多的告警。还有当我们能保证其中的几个模块相对稳定,而另外几个模块仍有问题时可以先将几个稳定的模块编译连接成一个目标文件,文件每次修改完成后先单独编译,然后连接入总的目标文件。
4.2如何LINT一个工程下的多个C文件
象我们平时使用的编译工具一样,PC-LINT在编译连接多个C文件时也会先把每个C文件编译生成中间的目标文件*.lob,然后再将所有的LOB文件连接在一起。LOB是Lint object Module的缩写。这个文件中包含了一个C或C++模块的所有外部信息。生成LOB文件时有三种选项要注意:第一种是-u,如果要LINT生成LOB文件,就一定要加-u选项;第二种是-zero或-zero(500)选项,为了保证LOB文件在模块存在错误的情况下也能生成,就一定要加这个选项;第三种是-oo[(filename)],filename是生成的LOB文件的名称,在-oo后面,可加,也可不加,如不加,则LOB文件名与原C模块的名称相同,例如:
lint -u alpha.c -oo(a1)
生成的LOB文件名为:a1.lob
lint -u alpha.c -oo
生成的LOB文件名为:alpha.lob
LINT一个工程下的多个C模块,在用户的源程序目录下一般需要三个文件: 一个选项文件(*.lnt)、一个批处理文件(*.bat)和一个MAKEFILE文件(*.mak)。下面一一讲述如何制作这些文件。
1)选项文件(*.lnt)
选项文件在前面也提到过,你可以把你LINT每个C文件时时用到的所有公共选项罗列在该文件中,选项生效的顺序按照从左到右,从上到下的原则。该类文件可以层层嵌套,嵌套的层数没有限制。例如make.lnt文件:
-iC:\lint
std.lnt
+os(temp)
-e46
+vm
-zero
2)批处理文件(*.bat)
制作批处理文件时要注意要在该文件中调用TCMAKE.EXE文件和MAKEFILE文件,例如lintmake.mak文件:
@echo Lint Making 'makelap':
tcmake -flintmake.mak
@echo End of making
3)MAKEFILE文件(*.mak)
MAKEFILE使用的TCMAKE的语法,和我们平时开发编译时使用的MAKEFILE文件语法格式一样,例如下面的lintmake.mak文件:
MCCPATH = c:\mcc68k
OPTION = -u make.lnt -oo
GLOBLE = os.h l2lap.h
mAIl_depend = $(GLOBLE) q931.h mail.h
lapmain_depend = $(GLOBLE) l1pubdef.h q931.h mail.h
lapos_depend = $(GLOBLE)
fhdlc1_depend = $(GLOBLE) cpuhdlc.h bd_prar.h q931.h
OBJ = mail.lob lapmain.lob lapos.lob fhdlc1.lob
project.lob : $(OBJ)
lint-nt make.lnt -e768 -e769 *.lob
mail.lob: mail.c $(mail_depend)
lint-nt $(OPTION) mail.c
lapmain.lob: lapmain.c $(lapmain_depend)
lint-nt $(OPTION) lapmain.c
lapos.lob: lapos.c $(lapos_depend)
lint-nt $(OPTION) lapos.c
fhdlc1.lob: fhdlc1.c $(fhdlc1_depend)
lint-nt $(OPTION) fhdlc1.c
4.3简单的LINT多个文件
假设我们的工程不复杂,我们可以负担起每次都将所有的文件都lint一遍的开销,也可以不使用上面的正规用法。笔者在实践中发现,将所有的*.c文件放在一个lint命令中,同样能完成lint整个工程的目的。
如:
lint-nt c:\lint\std.lnt AllMySource.lnt
在AllMySource.lnt中包括你的工程中的所有源文件:
a1.c a2.c a3.c
需要注意的是,在std.lnt文件中就不需要-u选项了。因为我们已经提供了所有的信息
Ucos_II2.52 源码中文译注.pdf
Ucos_II2.52 是一份非常完美的嵌入式开发系统,在学习 ARM 的基础上,嵌入 ucos系统
并增加自己的源码是一件不错的选择,目前在市面上已经有了大量的 ucos 嵌入案例,特别
是在 arm 和 dsp 的应用当中,已经成为一种主流,虽然和其它的嵌入式系统相比,ucos 不
是很完善,如没有内存分配、任务级别不多;但却是一个代码简短、条理清晰、实时性及安
全性能很高的嵌入式操作系统。
Ucos_II2.52 对比 2.8 版的 256 个任务而言,任务数量相比过少,但却是目前应用量最大
的一个版本,相对而言,能够满足我们的基本要求,而且增加了很多消息处理,特别是在优
先级别方面,具有不可比拟的优势;我曾试图阅读 ecos 的源码,但还是失败了,还有挑战
linux0.01 版源码的想法,最终我不能不被屈服;对于 Ucos 而言,很多入门者是一个福音,
因为它的代码非常的少,而且能够对应贝贝老师的书本直接参考,他的书本对结构方面讲解
的极为 xian详细。
在学习 Ucos的整个过程中,E文的理解是一个致命的打击,原因是我的 E文水平很差,
不过 Ucos 还是给了我尝试的动力,在作者的原基础上增加中文译码,也许是一件非常不错
的选择,相信在中国和我这种水平的人多不胜数,中文的注解对源码而言,能够具有极高的
理解价值,可以在极短的时间内,能够充分了解 ucos的真正含义。
整个翻译过程历时 4 个月,每每在寒冬腊月坐在计算机前面,不断的查阅贝贝老师的书来对
整个 Ucos 进行理解,对每个源码进行逐条翻译,也是一件非常需要勇气的事情,但 E 文的
翻译过程中很多变量是不能完全理解的,所以在翻译过程中不乏错误译文很多,于此带来的
错误还请读者纠正,相信克服种种困难一定会有所了解的。
对于经济窘迫的我来说,曾试图希望卖一点资料来养家糊口,但这种做法根本不现实,
很多的读者可能和我一样,习惯了拿不收费的资料,并对变相收费有一种深恶痛绝的感觉;
想了很多决定还是把它贡献出来,让更多的人来(更容易)了解 ucos,贡献自己的一点力
量。
希望更多的人能加入这种高尚的学习氛围当中来,共同的来把一套完整的 U 系列源码译文
早一日与我们分享,祝愿大家能够早日实现自己的梦想。
ADO开发指南.pdf
ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLEDB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、AO、RDO都要容易使用,并不失灵活性。本文将详细地介绍在VC下如何使用ADO来进行数据库应用程序开发,并给出示例代码。
linux技术内幕.pdf
linux技术内幕 linux技术内幕
EMI / EMC设计秘籍之电子产品设计工程师必备手册
一、EMC工程师必须具备的八大技能
二、EMC 常用元件
三、EMI/EMC 设计经典85问
四、EMC 专用名词大全
五、产品内部的 EMC 设计技巧
六、电磁干扰的屏蔽方法
七、电磁兼容(EMC)设计如何融入产品研发流程
对六自由度机械臂运动路径设计的探讨.pdf
本文讨论了关节式机器人的机械臂运动路径设计问题 考虑无障碍和有障碍两类不同运动情境 给出不同的算法 在无障碍运动中 通过讨论指尖到指定点和指尖沿指定曲线的不同运动情况 给出各自较为合适的模型使其达到便捷 有效的运动 在有障碍运动中 抛开了传统方法 提出一种新的实时运动规划方法 大大缩小了搜索空间 从而有效地提高了系统效率 最后 对连杆长度和最大旋转角等设计参数给出合理建议。
PLC在机械手控制系统上的应用.caj
机械手在工业生产中得到广泛的应用,传统工艺中采用继电器控制时,需要的继电器多,接线复杂,因此故障
多,维修困难,费时费工,不仅加大了成本,而且影响设备的工效。本文介绍了用日本三菱公司生产的F1/F2系列
可编程控制器,根据机械手的运动规律:左/右、上/下、夹/松等进行软件编程。实现了手动操作,即:用按钮操作,
对机械手的每一种运动单独进行控制;自动操作包括单步、单周期和连续操作。另外,对右工作台有工件的特殊情
况进行了处理。采用梯形控制直观易懂,为电气人员所熟悉;采用PLC控制使接线简化,安装方便,而且保证运行
的可靠性,减少维修量,提高了工效。
8751单片机在机械手控制器中的应用.pdf
机械手控制器是通过控制气动开关,进而间接控制气动活塞, 达到控制机械手运的运动长度,通过光栅尺把长度转换为一系列电脉冲, 输送到 8 7 5 1 单片机进行处理关动作, 达到控制机械手运动的目的。系统可以从键盘输入机械手的运动程, 即活塞运动的长度、 单步或多步运、每步运行的步长、 每步运行之间的间隔时、每步运行的速度及有关功能的命令等。系统的数据显示采用 6位 L E D数字显示,内容为: 从键盘输入的机械手的运动程序即用户指令( 由字母和数据组成),活塞的长度等。系统由 8 7 5 1 单片机系统, 气动开关,气动活,光栅尺组成了一个闭自动控制系统。
改进的中值滤波算法及其 FPGA快速实现
针对传统中值滤波算法带来的图像模糊问题,提出一种改进算法,加入阈值比较环节以便更好地保持图像细节。当用F P GA实现中值滤波算法时,传统方法需要较多的时钟周期,由此设计一种新的硬件实现电路,仅用 3个周期就能快速地取得中值。仿真结果说明,该改进算法不仅能够取得良好的滤波效果,而且使所处理的图像更加清晰,所设计的硬件电路能够快速、高效地对算法进行实现。
IEEE1588v1_vs_IEEE1588v2.pdf
目前,IEEE1588时钟同步协议有两个版本:IEEE1588-2002和IEEE1588-2008,一般习惯性称为IEEE1588V1、IEEE1588V2。这篇PDF文档简明扼要的介绍了两个版本之间的主要差异。
中文make v3.80手册
vision 3.80 make的中文手册,学习make工具的好资料。
Building Embedded Linux Systems(English version)
Building Embedded Linux Systems shows you how to design and build your own embedded systems using Linux® as the kernel and freely available open source tools as the framework. Written by an active member of the open source community, the book is structured to gradually introduce readers to the intricacies of embedded Linux, with detailed information and examples in each chapter that culminate in describing how Linux is actually put on an embedded device.
NTP 第三版标准电子档(英文)
NTP第三版电子档,英文。很不好找。
NTP第三版电子档,英文。很不好找。
linux多播程序(无需修改,可在x87平台和arm平台上面运行)
linux上面多播测试程序,无需修改,已经在x86平台和arm平台上面通过测试。程序代码风格良好,方便阅读。包括服务器程序、客户程序、和Makefile文件,下载后编译即可使用。如果是在arm平台上面运行,需要更改相应的arm-linux-gcc路径,如果有编译问题请阅读Makefile。
linux程序 能够自动获取ip地址
本程序在linux环境下使用。实现了自动获取ip的功能。程序编程风格良好,有相应的注释,方便查看。c文件的开头简明的介绍了使用方法,不需要更改就可以在linux下运行。
fpga最小系统,详细介绍FPGA的各部分电路组成,并对各个电路详细分析讲解
fpga最小系统,详细介绍FPGA的各部分电路组成,并对各个电路详细分析讲解
飞鸽源码 不可不读的经典代码
利用vc++6.0开发的飞鸽,已经通过了成千上万台电脑的测试,运行无误。这样的程序是如何开发出来的呢,阅读源码是最好的答疑手册。适合c++、vc++的初学者和想要在编程方面提高自己的人。
google c++ 编程规范
你想拥有更好的编程风格吗?想了解正规公司c++编程的规范要求吗?这份文档时你不可不读的文档,而不是之一。
Measurement,Control,and Communication Using IEEE 1588电子档
本书由PTPd第二版的作者撰写。全面、细致的分析了IEEE1588协议。为读者研究IEEE1588协议提供了坚实的基础。
ethercat-1.4.0源码
ethercat是目前使用较多的工业以太网解决方案。主站硬件无关,可以在通用的xp平台上面移植。ethercat-1.4.0源码,研究工业以太网不可缺少的研究对象。
EPL(Ethernet Powerlink)源码
openPOWERLINK_v1.7.1。openPOWERLINK是开源组织维护的EPL源代码。由于powerlink是硬件无关的工业以太网实现方案,用户可以方便的移植到目标系统上。
Linux常用命令全集电子版
详细的收录了Linux常用命令。可以按字母顺序排序,可以查询。是linux新手必备的工具,也可以作为linux命令的备忘录使用。
STM32F4DISCOVERY(中文)
本文档是STM32F4DISCOVERY的中文用户手册,帮助您快速的熟悉STM32F4DISCOVERY。
A STUDENT PLANNING GUIDE TO GRAD SCHOOL AND BEYOND
很多人在问念研究生能学到什么,短短的两年时间,上课学不到多少有用的,科研也没怎么搞,到底念研究生能学到什么?一开始念硕士博士的时间都是有这些迷惘的,甚至有些人连这些问题想也没想。如果用点心思,不管我们将来搞不搞科研,既然念了硕士博士,就该用心去念;即使是想混个学历,也该好好混!
也许念完本科,大多数人只拥有了该有的道德、情感和认识能力;但真正培养自己的理性和逻辑、学习能力、更强大的独立思考能力、创造力和想象力等等,还要从现在开始。念研究生连一个工作报告都不会做,这很普遍。但要从现在开始去培养!不要等到毕业时才问自己:我是否努力去做了?也许一开始时就应该清醒些。
A STUDENT PLANNING GUIDE TO GRAD SCHOOL AND BEYOND.pdf
很多人在问念研究生能学到什么,短短的两年时间,上课学不到多少有用的,科研也没怎么搞,到底念研究生能学到什么?一开始念硕士博士的时间都是有这些迷惘的,甚至有些人连这些问题想也没想。如果用点心思,不管我们将来搞不搞科研,既然念了硕士博士,就该用心去念;即使是想混个学历,也该好好混!
也许念完本科,大多数人只拥有了该有的道德、情感和认识能力;但真正培养自己的理性和逻辑、学习能力、更强大的独立思考能力、创造力和想象力等等,还要从现在开始。念研究生连一个工作报告都不会做,这很普遍。但要从现在开始去培养!不要等到毕业时才问自己:我是否努力去做了?也许一开始时就应该清醒些。
图解STM32F107VC+Keil v4.12+jlink v8在SRAM中调试(自创的全面文档)
本文档是自己在学习STM32F107的过程中的心得。参考了网上的相关资料,针对其中有疑问的部分做了详细的解答。本文档适用于所有的 STM32 开发板,但是在讲述这一设置过程的时候又必须选定其中的一款开发板来作为蓝本,其他的 STM32 MCU都可依此类推(对于不同的STM32 MCU实际上就是 SRAM的起始地址、用户将多少 SRAM作为 Flash多少 SRAM作为 RAM的分割不一样)。
LWIP-K.pdf(中文版)
LWIP是TCP/IP协议栈的一种实现。LWIP的主要目的是减少存储器利用量和代码尺寸,使LWIP适合应用于小的、资源有限的处理器如嵌入式系统。为了减少处理器和存储器要求, lwIP可以通过不需任何数据拷贝的API进行裁减。
本文叙述了lwIP的设计与实现。叙述了协议实现及子系统中所使用的算法和数据结构如存储和缓冲管理系统。还包括LWIP API的参考手册和使用LWIP 的一些代码例子。
c c++程序员面试宝典(CHM)
主要内容包括C、C++面试题目,面试技巧,以及华为、中兴、腾讯、百度、google、微软、金山等知名公司的历年笔试题目集锦。C/C++程序员找工作的好资料。
The sysfs Filesystem(pdf)
sysfs is a feature of the Linux 2.6 kernel that allows kernel code to export information to user
processes via an in-memory filesystem. The organization of the filesystem directory hierarchy
is strict, and based the internal organization of
kernel data structures. The files that are created
in the filesystem are (mostly) ASCII files with
(usually) one value per file. These features ensure that the information exported is accurate
and easily accessible, making sysfs one of the
most intuitive and useful features of the 2.6 kernel.
GCC_manual(pdf)
gcc中文手册,linux程序员必备的手册。
s3c2440中文芯片手册(PDF 中文)
S3C2440中文手册。包括了绝大部分章节,适合新手入门看。
GDB完全手册.txt
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等
IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所
谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工
具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功
能。让我们一一看来。
JFFS2(PDF)
JFFS是针对以闪存为介质的嵌入式系统,所以充分考虑了闪存的物理局限性,使用了尽可能高效的日志系统。
RTAI_Installation_Guide(PDF)
I started creating this guide, so that in the future I could remember all the steps I made to get
RTAI working on the RAC1 Development PC. I followed a very good Brazilian guide [Tutorial:Instalando RTAI, Renato Bensen], but still i had to make signicant modications to have it working. Also, it doesn't include a detailed explanation on how to congure the kernel. This step was very important to me because I will need to have a very compact kernel to t on an embedded system to fully run in the RAM. Because of this, I decided to include the tune up procedures to congure a kernel as light as possible, and still having the basic everyday needed services like USB
support and wireless communication. I noticed that in the kernel conguration that comes with
Ubuntu, a lot of functions are enabled to maximize the compatibility of Linux in several hardware
systems. The problem is that these options tend to raise the kernel size, its compilation time, slow
down the boot process to check for unnecessary services, and enable processes to check features
that will never exist, resulting in unnecessary CPU time consumption. So, to help people get a
light and working kernel with real time layer, I decided to go more deep on the detail through this
article.
LINUX+RTAI+RTNET使用说明(PDF)
介绍了X86平台上面linux+rtai+rtnet的整个安装过程。需要的人值得一看。
Linux内核设计的艺术(PDF)
本书配合大量生动的图表深入浅出的向您讲述linux的设计艺术。简单易懂,适合初学者和想要深入理解linux内核的读者。