EDN首页   博客首页

最新日志

发表于:2008-1-6 23:48:54
标签:无标签

2

VC常用数据类型使用转换详解(转载)

VC常用数据类型使用转换详解(转载)

Posted on 2007-01-14 16:10 黄金海岸 阅读(1365) 评论(0)  编辑  收藏 所属分类: 其他

CString ,BSTR ,LPCTSTR之间关系和区别

CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。

CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。
typedef OLECHAR FAR* BSTR;
typedef const char * LPCTSTR;

vc++中各种字符串的表示法

首先char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。

LP的含义是长指针(long pointer)。LPSTR是一个指向以‘\0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。
而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。
1.LP表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位.所以这里的LP和P是等价的.
2.C表示const
3.T是什么东西呢,我们知道TCHAR在采用Unicode方式编译时是wchar_t,在普通时编译成char.

为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。

LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。

然后为了实现两种编码的通用,提出了TCHAR的定义:
如果定义_UNICODE,声明如下:
typedef wchar_t TCHAR;
如果没有定义_UNICODE,则声明如下:
typedef char TCHAR;

LPTSTR和LPCTSTR中的含义就是每个字符是这样的TCHAR。

CString类中的字符就是被声明为TCHAR类型的,它提供了一个封装好的类供用户方便地使用。

LPCTSTR:
     #ifdef _UNICODE
        typedef const wchar_t * LPCTSTR;
     #else
        typedef const char * LPCTSTR;
     #endif

VC常用数据类型使用转换详解
 
先定义一些常见类型变量借以说明
int i = 100;
long l = 2001;
float f="300".2;
double d="12345".119;
char username[]="女侠程佩君";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;

一、其它数据类型转换为字符串

短整型(int)
       itoa(i,temp,10);     //将i转换为字符串放入temp中,最后一个数字表示十进制
       itoa(i,temp,2);      //按二进制方式转换
长整型(long)
       ltoa(l,temp,10);


二、从其它包含字符串的变量中获取指向该字符串的指针

CString变量
str = "2008北京奥运";
buf = (LPSTR)(LPCTSTR)str;
BSTR类型的_variant_t变量
v1 = (_bstr_t)"程序员";
buf = _com_util::ConvertBSTRToString((_bstr_t)v1);

三、字符串转换为其它数据类型
strcpy(temp,"123");

短整型(int)
      i = atoi(temp);
长整型(long)
      l = atol(temp);
浮点(double)
      d = atof(temp);

四、其它数据类型转换到CString

使用CString的成员函数Format来转换,例如:

整数(int)
      str.Format("%d",i);
浮点数(float)
      str.Format("%f",i);
字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值
      str = username;

五、BSTR、_bstr_t与CComBSTR

CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。
char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据");     //使用前需要加上头文件comutil.h
反之可以使用char *p=_com_util::ConvertBSTRToString(b);


六、VARIANT 、_variant_t 与 COleVariant

VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
VARIANT va;
int a="2001";
va.vt=VT_I4;    //指明整型数据
va.lVal=a;      //赋值

对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:

unsigned char bVal; VT_UI1
short iVal; VT_I2
long lVal;  VT_I4 
float fltVal;  VT_R4
double dblVal;  VT_R8 
VARIANT_BOOL boolVal;  VT_BOOL
SCODE scode;  VT_ERROR
CY cyVal;  VT_CY
DATE date;  VT_DATE
BSTR bstrVal;  VT_BSTR
IUnknown FAR* punkVal;  VT_UNKNOWN
IDispatch FAR* pdispVal;  VT_DISPATCH
SAFEARRAY FAR* parray;  VT_ARRAY|*
unsigned char FAR* pbVal;  VT_BYREF|VT_UI1
short FAR* piVal;  VT_BYREF|VT_I2
long FAR* plVal;  VT_BYREF|VT_I4
float FAR* pfltVal;  VT_BYREF|VT_R4
double FAR* pdblVal; VT_BYREF|VT_R8
VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL
SCODE FAR* pscode;  VT_BYREF|VT_ERROR
CY FAR* pcyVal;  VT_BYREF|VT_CY
DATE FAR* pdate; VT_BYREF|VT_DATE
BSTR FAR* pbstrVal;  VT_BYREF|VT_BSTR
IUnknown FAR* FAR* ppunkVal;  VT_BYREF|VT_UNKNOWN
IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH
SAFEARRAY FAR* FAR* pparray;  VT_ARRAY|*
VARIANT FAR* pvarVal;  VT_BYREF|VT_VARIANT
void FAR* byref;  VT_BYREF

_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
例如:
long l="222";
ing i="100";
_variant_t lVal(l);
lVal = (long)i;

COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
COleVariant v3 = "字符串", v4 = (long)1999;
CString str =(BSTR)v3.pbstrVal;
long i = v4.lVal;

七、其它

对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:
LPARAM lParam;
WORD loValue = LOWORD(lParam);     //取低16位
WORD hiValue = HIWORD(lParam);     //取高16位
对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:
WORD wValue;
BYTE loValue = LOBYTE(wValue);     //取低8位
BYTE hiValue = HIBYTE(wValue);     //取高8位 

如何将CString类型的变量赋给char*类型的变量
1、GetBuffer函数:
使用CString::GetBuffer函数。
char *p;
CString str="hello";
p=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();

将CString转换成char * 时
CString str("aaaaaaa");
strcpy(str.GetBuffer(10),"aa");
str.ReleaseBuffer();
当我们需要字符数组时调用GetBuffer(int n),其中n为我们需要的字符数组的长度.使用完成后一定要马上调用ReleaseBuffer();
还有很重要的一点就是,在能使用const char *的地方,就不要使用char *

2、memcpy:
CString mCS=_T("cxl");
char mch[20];
memcpy(mch,mCS,20);

3、用LPCTSTR强制转换: 尽量不使用
char *ch;
CString str;
ch=(LPSTR)(LPCTSTR)str;

CString str = "good";
char *tmp;
sprintf(tmp,"%s",(LPTSTR)(LPCTSTR)str);

4、
CString Msg;
Msg=Msg+"abc";
LPTSTR lpsz;
lpsz = new TCHAR[Msg.GetLength()+1];
_tcscpy(lpsz, Msg);
char * psz;
strcpy(psz,lpsz);


CString类向const char *转换
char a[100];
CString str("aaaaaa");
strncpy(a,(LPCTSTR)str,sizeof(a));
或者如下:
strncpy(a,str,sizeof(a));
以上两种用法都是正确地. 因为strncpy的第二个参数类型为const char *.所以编译器会自动将CString类转换成const char *.

CString转LPCTSTR (const char *)
CString cStr;
const char *lpctStr=(LPCTSTR)cStr;

LPCTSTR转CString
LPCTSTR lpctStr;
CString cStr="lpctStr";

将char*类型的变量赋给CString型的变量
可以直接赋值,如:
CString myString = "This is a test";
也可以利用构造函数,如:
CString s1("Tom");

将CString类型的变量赋给char []类型(字符串)的变量
1、sprintf()函数
CString str = "good";
char tmp[200] ;
sprintf(tmp, "%s",(LPCSTR)str);  
(LPCSTR)str这种强制转换相当于(LPTSTR)(LPCTSTR)str
CString类的变量需要转换为(char*)的时,使用(LPTSTR)(LPCTSTR)str

然而,LPCTSTR是const char *,也就是说,得到的字符串是不可写的!将其强制转换成LPTSTR去掉const,是极为危险的!
一不留神就会完蛋!要得到char *,应该用GetBuffer()或GetBufferSetLength(),用完后再调用ReleaseBuffer()。

2、strcpy()函数
CString str;
char c[256];
strcpy(c, str);

char mychar[1024];
CString source="Hello";
strcpy((char*)&mychar,(LPCTSTR)source);


关于CString的使用
1、指定 CString 形参
    对于大多数需要字符串参数的函数,最好将函数原型中的形参指定为一个指向字符 (LPCTSTR) 而非 CString 的 const 指针。
当将形参指定为指向字符的 const 指针时,可将指针传递到 TCHAR 数组(如字符串 ["hi there"])或传递到 CString 对象。
CString 对象将自动转换成 LPCTSTR。任何能够使用 LPCTSTR 的地方也能够使用 CString 对象。

2、如果某个形参将不会被修改,则也将该参数指定为常数字符串引用(即 const CString&)。如果函数要修改该字符串,
则删除 const 修饰符。如果需要默认为空值,则将其初始化为空字符串 [""],如下所示:
void AddCustomer( const CString& name, const CString& address, const CString& comment = "" );

3、对于大多数函数结果,按值返回 CString 对象即可。


串的基本运算
    对于串的基本运算,很多高级语言均提供了相应的运算符或标准的库函数来实现。
为叙述方便,先定义几个相关的变量:
    char s1[20]="dir/bin/appl",s2[20]="file.asm",s3[30],*p;
    int result;
    下面以C语言中串运算介绍串的基本运算
1、求串长
        int strlen(char *s);         //求串s的长度
    【例】printf("%d",strlen(s1));    //输出s1的串长12

2、串复制
    char *strcpy(char *to,*from);//将from串复制到to串中,并返回to开始处指针
    【例】strcpy(s3,s1);  //s3="dir/bin/appl",s1串不变


3、联接
    char *strcat(char *to,char *from);//将from串复制到to串的末尾,
                                      //并返回to串开始处的指针
    【例】strcat(s3,"/");    //s3="dir/bin/appl/"
         strcat(s3,s2);     //s3="dir/bin/appl/file.asm"

4、串比较
    int strcmp(char *s1,char *s2);//比较s1和s2的大小,
     //当s1<s2、s1>s2和s1=s2时,分别返回小于0、大于0和等于0的值
    【例】result=strcmp("baker","Baker");    //result>0
            result="strcmp"("12","12");       //result=0
            result="strcmp"("Joe","joseph")   //result<0

5、字符定位
    char *strchr(char *s,char c);//找c在字符串s中第一次出现的位置,
                                 //若找到,则返回该位置,否则返回NULL
    【例】p=strchr(s2,'.');      //p指向"file"之后的位置
     if(p) strcpy(p,".cpp");     //s2="file.cpp"

  注意:
     ①上述操作是最基本的,其中后 4个操作还有变种形式:strncpy,strncath和strnchr。
     ②其它的串操作见C的<string.h>。在不同的高级语言中,对串运算的种类及符号都不尽相同
     ③其余的串操作一般可由这些基本操作组合而成

    【例】求子串的操作可如下实现:
    void substr(char *sub,char *s,int pos,int len){
         //s和sub是字符数组,用sub返回串s的第pos个字符起长度为len的子串
         //其中0<=pos<=strlen(s)-1,且数组sub至少可容纳len+1个字符。
        if (pos<0||pos>strlen(s)-1||len<0)
            Error("parameter error!");
        strncpy(sub,&s[pos],len);      //从s[pos]起复制至多len个字符到sub

系统分类: 软件开发   |    用户分类:    |    来源: 转贴

评论(4) | 阅读(698)
发表于:2008-1-2 15:20:56
标签:无标签

0

protel99常用元件的电气图形符号和封装形式

protel99常用元件的电气图形符号和封装形式
1.电阻原理图中常用的名称为RES1-RES4;引脚封装形式:
AXIAL系列从AXIAL-0.3到AXIAL-1.0,后缀数字代表两焊盘的间距,单位为Kmil.
2.电容原理图中常用的名称为CAP(无极性电容)、ELECTRO(有极性电容);
引脚封装形式:无极性电容为RAD-0.1到RAD-0.4,有极性电容为RB.2/.4到RB.5/1.0.
3.电位器原理图中常用的名称为POT1和POT2;
引脚封装形式:VR-1到VR-5.
4.二极管原理图中常用的名称为DIODE(普通二极管)、DIODE SCHOTTKY(肖特基二极管)
DUIDE TUNNEL(隧道二极管)DIODE VARCTOR(变容二极管)ZENER1~3(稳压二极管)
5.引脚封装形式:DIODE0.4和DIODE 0.7;
引脚封装形式:无极性电容
6.三极管原理图中常用的名称为NPN,NPN1和PNP,PNP1;
引脚封装形式TO18、TO92A(普通三极管)TO220H(大功率三极管)TO3(大功率达林顿管)
7.场效应管原理图中常用的名称为JFET N(N沟道结型场效应管),JFET P(P沟道结型场效应管)
MOSFET N(N沟道增强型管)MOSFET P(P沟道增强型管)引脚封装形式与三极管同。
8.整流桥原理图中常用的名称为BRIDGE1和BRIDGE2,引脚封装形式为D系列,如D-44,D-37,D-46等。
9.单排多针插座原理图中常用的名称为CON系列,从CON1到CON60,引脚封装形式为SIP系列,从SIP-2到

SIP-20。
10.双列直插元件原理图中常用的名称为根据功能的不同而不同,引脚封装形式DIP系列。
11.串并口类原理图中常用的名称为DB系列,引脚封装形式为DB和MD系列。

 


零件封装是指实际零件焊接到电路板时所指示的外观和焊点的位置。是纯粹的空间概念因此
不同的元件可共用同一零件封装,同种元件也可有不同的零件封装。像电阻,有传统的针插
式,这种元件体积较大,电路板必须钻孔才能安置元件,完成钻孔后,插入元件,再过锡炉
或喷锡(也可手焊),成本较高,较新的设计都是采用体积小的表面贴片式元件(SMD)这
种元件不必钻孔,用钢膜将半熔状锡膏倒入电路板,再把SMD元件放上,即可焊接在电路板
上了。
关于零件封装我们在前面说过,除了DEVICE。LIB库中的元件外,其它库的元件都已经有了
固定的元件封装,这是因为这个库中的元件都有多种形式:以晶体管为例说明一下:
晶体管是我们常用的的元件之一,在DEVICE。LIB库中,简简单单的只有NPN与PNP之分,但
实际上,如果它是NPN的2N3055那它有可能是铁壳子的TO—3,如果它是NPN的2N3054,则有
可能是铁壳的TO-66或TO-5,而学用的CS9013,有TO-92A,TO-92B,还有TO-5,TO-46,TO-5
2等等,千变万化。
还有一个就是电阻,在DEVICE库中,它也是简单地把它们称为RES1和RES2,不管它是100Ω
还是470KΩ都一样,对电路板而言,它与欧姆数根本不相关,完全是按该电阻的功率数来决
定的我们选用的1/4W和甚至1/2W的电阻,都可以用AXIAL0.3元件封装,而功率数大一点的话
,可用AXIAL0.4,AXIAL0.5等等。现将常用的元件封装整理如下:
电阻类及无极性双端元件 AXIAL0.3-AXIAL1.0
无极性电容 RAD0.1-RAD0.4
有极性电容 RB.2/.4-RB.5/1.0
二极管 DIODE0.4及 DIODE0.7
石英晶体振荡器 XTAL1
晶体管、FET、UJT TO-xxx(TO-3,TO-5)
可变电阻(POT1、POT2) VR1-VR5
当然,我们也可以打开C:\Client98\PCB98\library\advpcb.lib库来查找所用零件的对应封
装。
这些常用的元件封装,大家最好能把它背下来,这些元件封装,大家可以把它拆分成两部分
来记如电阻AXIAL0.3可拆成AXIAL和0.3,AXIAL翻译成中文就是轴状的,0.3则是该电阻在印
刷电路板上的焊盘间的距离也就是300mil(因为在电机领域里,是以英制单位为主的。同样
的,对于无极性的电容,RAD0.1-RAD0.4也是一样;对有极性的电容如电解电容,其封装为R
B.2/.4,RB.3/.6等,其中“.2”为焊盘间距,“.4”为电容圆筒的外径。
对于晶体管,那就直接看它的外形及功率,大功率的晶体管,就用TO—3,中功率的晶体管
,如果是扁平的,就用TO-220,如果是金属壳的,就用TO-66,小功率的晶体管,就用TO-5
,TO-46,TO-92A等都可以,反正它的管脚也长,弯一下也可以。
对于常用的集成IC电路,有DIPxx,就是双列直插的元件封装,DIP8就是双排,每排有4个引
脚,两排间距离是300mil,焊盘间的距离是100mil。SIPxx就是单排的封装。等等。
值得我们注意的是晶体管与可变电阻,它们的包装才是最令人头痛的,同样的包装,其管脚
可不一定一样。例如,对于TO-92B之类的包装,通常是1脚为E(发射极),而2脚有可能是
B极(基极),也可能是C(集电极);同样的,3脚有可能是C,也有可能是B,具体是那个
,只有拿到了元件才能确定。因此,电路软件不敢硬性定义焊盘名称(管脚名称),同样的
,场效应管,MOS管也可以用跟晶体管一样的封装,它可以通用于三个引脚的元件。
Q1-B,在PCB里,加载这种网络表的时候,就会找不到节点(对不上)。
在可变电阻上也同样会出现类似的问题;在原理图中,可变电阻的管脚分别为1、W、及2,
所产生的网络表,就是1、2和W,在PCB电路板中,焊盘就是1,2,3。当电路中有这两种元
件时,就要修改PCB与SCH之间的差异最快的方法是在产生网络表后,直接在网络表中,将晶
体管管脚改为1,2,3;将可变电阻的改成与电路板元件外形一样的1,2,3即可。

 

 

 

 

 

 

 

电阻:RES1,RES2,RES3,RES4;封装属性为axial系列
  无极性电容:cap;封装属性为RAD-0.1到rad-0.4
  电解电容:electroi;封装属性为rb.2/.4到rb.5/1.0
  电位器:pot1,pot2;封装属性为vr-1到vr-5
  二极管:封装属性为diode-0.4(小功率)diode-0.7(大功率)
  三极管:常见的封装属性为to-18(普通三极管)to-22(大功率三极管)to-3(大功率达林顿管)
  电源稳压块有78和79系列;78系列如7805,7812,7820等
  79系列有7905,7912,7920等常见的封装属性有to126h和to126v
  整流桥:BRIDGE1,BRIDGE2: 封装属性为D系列(D-44,D-37,D-46)
  电阻:AXIAL0.3-AXIAL0.7  其中0.4-0.7指电阻的长度,一般用AXIAL0.4
  瓷片电容:RAD0.1-RAD0.3。  其中0.1-0.3指电容大小,一般用RAD0.1
  电解电容:RB.1/.2-RB.4/.8 其中.1/.2-.4/.8指电容大小。一般<100uF用RB.1/.2,100uF-470uF用RB.2/.4,>470uF用RB.3/.6
  二极管:DIODE0.4-DIODE0.7 其中0.4-0.7指二极管长短,一般用DIODE0.4
  发光二极管:RB.1/.2
  集成块:DIP8-DIP40, 其中8-40指有多少脚,8脚的就是DIP8
贴片电阻
      0603表示的是封装尺寸 与具体阻值没有关系,但封装尺寸与功率有关通常来说如下:
      0201 1/20W
  0402 1/16W
  0603 1/10W
  0805 1/8W
  1206 1/4W
      电容电阻外形尺寸与封装的对应关系是:
      0402=1.0mmx0.5mm
  0603=1.6mmx0.8mm
  0805=2.0mmx1.2mm
  1206=3.2mmx1.6mm
  1210=3.2mmx2.5mm
  1812=4.5mmx3.2mm
  2225=5.6mmx6.5mm
      零件封装是指实际零件焊接到电路板时所指示的外观和焊点的位置。是纯粹的空间概念因此不同的元件可共用同一零件封装,同种元件也可有不同的零件封装。像电阻,有传统的针插式,这种元件体积较大,电路板必须钻孔才能安置元件,完成钻孔后,插入元件,再过锡炉或喷锡(也可手焊),成本较高,较新的设计都是采用体积小的表面贴片式元件(SMD)这种元件不必钻孔,用钢膜将半熔状锡膏倒入电路板,再把SMD元件放上,即可焊接在电路板上了。关于零件封装我们在前面说过,除了DEVICE。LIB库中的元件外,其它库的元件都已经有了固定的元件封装,这是因为这个库中的元件都有多种形式:
      以晶体管为例说明一下:晶体管是我们常用的的元件之一,在DEVICE。LIB库中,简简单单的只有NPN与PNP之分,但实际上,如果它是NPN的2N3055那它有可能是铁壳子的TO—3,如果它是NPN的2N3054,则有可能是铁壳的TO-66或TO-5,而学用的CS9013,有TO-92A,TO-92B,还有TO-5,TO-46,TO-52等等,千变万化。
      还有一个就是电阻,在DEVICE库中,它也是简单地把它们称为RES1和RES2,不管它是100Ω还是470KΩ都一样,对电路板而言,它与欧姆数根本不相关,完全是按该电阻的功率数来决定的我们选用的1/4W和甚至1/2W的电阻,都可以用AXIAL0.3元件封装,而功率数大一点的话,可用XIAL0.4,AXIAL0.5等等。
      现将常用的元件封装整理如下:
      电阻类及无极性双端元件AXIAL0.3-AXIAL1.0;/无极性电容 RAD0.1-RAD0.4/有极性电容RB.2/.4-RB.5/1.0/
      二极管 DIODE0.4及 DIODE0.7/石英晶体振荡器 XTAL1/晶体管、FET、UJT TO-xxx(TO-3,TO-5)/
      可变电阻(POT1、POT2) VR1-VR5.
      当然,我们也可以打开C:\Client98\PCB98\library\advpcb.lib库来查找所用零件的对应封装.这些常用的元件封装,大家最好能把它背下来,这些元件封装,大家可以把它拆分成两部分来记如电阻AXIAL0.3可拆成AXIAL和0.3,AXIAL翻译成中文就是轴状的,0.3则是该电阻在印刷电路板上的焊盘间的距离也就是300mil(因为在电机领域里,是以英制单位为主的。
      同样的,对于无极性的电容,RAD0.1-RAD0.4也是一样;对有极性的电容如电解电容,其封装为RB.2/.4,RB.3/.6等,其中“.2”为焊盘间距,“.4”为电容圆筒的外径。对于晶体管,那就直接看它的外形及功率,大功率的晶体管,就用TO—3,中功率的晶体管,如果是扁平的,就用TO-220,如果是金属壳的,就用TO-66,小功率的晶体管,就用TO-5,TO-46,TO-92A等都可以,反正它的管脚也长,弯一下也可以。对于常用的集成IC电路,有DIPxx,就是双列直插的元件封装,DIP8就是双排,每排有4个引脚,两排间距离是300mil,焊盘间的距离是100mil。SIPxx就是单排的封装。等等。
      值得我们注意的是晶体管与可变电阻,它们的包装才是最令人头痛的,同样的包装,其管脚可不一定一样。例如,对于TO-92B之类的包装,通常是1脚为E(发射极),而2脚有可能是B极(基极),也可能是C(集电极);同样的,3脚有可能是C,也有可能是B,具体是那个,只有拿到了元件才能确定。因此,电路软件不敢硬性定义焊盘名称(管脚名称),同样的,场效应管,MOS管也可以用跟晶体管一样的封装,它可以通用于三个引脚的元件。Q1-B,在PCB里,加载这种网络表的时候,就会找不到节点(对不上)。在可变电阻上也同样会出现类似的问题;在原理图中,可变电阻的管脚分别为1、W、及2,所产生的网络表,就是1、2和W,在PCB电路板中,焊盘就是1,2,3。当电路中有这两种元件时,就要修改PCB与SCH之间的差异最快的方法是在产生网络表后,直接在网络表中,将晶体管管脚改为1,2,3;将可变电阻的改成与电路板元件外形一样的1,2,3即可。
      封装的处理是个没有多大学问但是颇费功夫的“琐事”,举个简单的例子:DIP8很简单吧,但是有的库用DIP-8,有的就是DIP8.  即使对同一封装结构,在各公司的产品Datasheet上描述差异就很大(不同的文件名体系、不同的名字称谓等);还有同一型号器件,而管脚排序不一样的情况,等等。对老器件,例如你说的电感,是有不同规格(电感量、电流)和不同的设计要求(插装/SMD)。真个是谁也帮不了谁,想帮也帮不上,大多数情况下还是靠自己的积累。这对,特别是刚开始使用这类软件的人都是感到很困惑的问题,往往很难有把握地找到(或者说确认)资料中对应的footprint就一定正确-- 心中没数!其实很正常。我觉得现成“全能“的库不多;根据电路设计确定选型、找到产品资料,认真核对封装,必要时自己建库(元件)。这些都是使用这类软件完成设计的必要的信息积累。这个过程谁也多不开的。如果得以坚持,估计只需要一两个产品设计,就会熟练的。所谓“老手”也大多是这么“熬“过来的,甚至是作为“看家”东西的。这个“熬”不是很轻松的,但是必要。
      电阻类及无极性双端元件    AXIAL0.3-AXIAL1.0
  无极性电容          RAD0.1-RAD0.4
  有极性电容          RB.2/.4-RB.5/1.0
  二极管            DIODE0.4及 DIODE0.7
  石英晶体振荡器        XTAL1
  晶体管、FET、UJT       TO-xxx(TO-3,TO-5)
  可变电阻(POT1、POT2)    VR1-VR5

系统分类: PCB   |    用户分类:    |    来源: 转贴

评论(1) | 阅读(1201)
发表于:2008-1-2 14:00:13
标签:无标签

1

上拉电阻

上拉电阻

上拉电阻实际上是集电极输出的负载电阻。不管是在开关应用和模拟放大,此电阻的选则都不是拍脑袋的。工作在线性范围就不多说了

,在这里是讨论的是晶体管是开关应用,所以只谈开关方式。找个TTL器件的资料单独看末级就可以了,内部都有负载电阻根据不同驱动

能力和速度要求这个电阻值不同,低功耗的电阻值大,速度快的电阻值小。但芯片制造商很难满足应用的需要不可能同种功能芯片做许

多种,因此干脆不做这个负载电阻,改由使用者自己自由选择外接,所以就出现OC、OD输出的芯片。由于数字应用时晶体管工作在饱和

和截止区,对负载电阻要求不高,电阻值小到只要不小到损坏末级晶体管就可以,大到输出上升时间满足设计要求就可,随便选一个都

可以正常工作。但是一个电路设计是否优秀这些细节也是要考虑的。集电极输出的开关电路不管是开还是关对地始终是通的,晶体管导

通时电流从负载电阻经导通的晶体管到地,截止时电流从负载电阻经负载的输入电阻到地,如果负载电阻选择小点功耗就会大,这在电

池供电和要求功耗小的系统设计中是要尽量避免的,如果电阻选择大又会带来信号上升沿的延时,因为负载的输入电容在上升沿是通过

无源的上拉电阻充电,电阻越大上升时间越长,下降沿是通过有源晶体管放电,时间取决于器件本身。因此设计者在选择上拉电阻值时

,要根据系统实际情况在功耗和速度上兼顾。  
  
   扇入系数--门电路允许的输入端数目。一般门电路的扇入系数Nr为1—5,最多不超过8。若芯片输入端数多于实际要求的数目,可将

芯片多余输入端接高电平(+5V)或接低电平(GND)。
扇出系数--一个门的输出端所驱动同类型门的个数,或称负载能力。一般门电路的扇出系数Nc为8,驱动器的扇出系数Nc可达25。Nc体现

了门电路的负载能力。
 
 


 
什么时候要求上拉呢?  发布时间: 2005-12-16 上午10:36  
 
 


   在什么情况下要上拉或下拉,它上拉是把电压拉高保持高1状态吗,在有脉冲跳变时有影响吗? 
 

  我来打分       回复主题      引用本帖  
 
一个IC设计工程师的回答  发布时间: 2005-12-16 下午3:41 
 
 
   
 

提问者: roland
等级: 初入江湖
积分: 110分


   从IC(MOS工艺)的角度,分别就输入/输出引脚做一解释:
1. 对芯片输入管脚, 若在系统板上悬空(未与任何输出脚或驱动相接)是比较危险的.因为此时很有可能输入管脚内部电容电荷累积使之

达到中间电平(比如1.5V), 而使得输入缓冲器的PMOS管和NMOS管同时导通, 这样一来就在电源和地之间形成直接通路, 产生较大的漏电

流, 时间一长就可能损坏芯片. 并且因为处于中间电平会导致内部电路对其逻辑(0或1)判断混乱. 接上上拉或下拉电阻后, 内部点容相

应被充(放)电至高(低)电平, 内部缓冲器也只有NMOS(PMOS)管导通, 不会形成电源到地的直流通路. (至于防止静电造成损坏, 因芯片管

脚设计中一般会加保护电路, 反而无此必要).
2. 对于输出管脚:
1)正常的输出管脚(push-pull型), 一般没有必要接上拉或下拉电阻.
2)OD或OC(漏极开路或集电极开路)型管脚,
这种类型的管脚需要外接上拉电阻实现线与功能(此时多个输出可直接相连. 典型应用是: 系统板上多个芯片的INT(中断信号)输出直接

相连, 再接上一上拉电阻, 然后输入MCU的INT引脚, 实现中断报警功能).
其工作原理是:
在正常工作情况下, OD型管脚内部的NMOS管关闭, 对外部而言其处于高阻状态, 外接上拉电阻使输出位于高电平(无效中断状态); 当有

中断需求时, OD型管脚内部的NMOS管接通, 因其导通电阻远远小于上拉电阻, 使输出位于低电平(有效中断状态). 针对MOS 电路上下拉

电阻阻值以几十至几百K为宜.

(注: 此回答未涉及TTL工艺的芯片, 也未曾考虑高频PCB设计时需考虑的阻抗匹配, 电磁干扰等效应.) 
 
上拉:
1TTL驱动CMOS时,如果TTL输出最低高电平低于CMOS最低高电平时,提高输出高电平值
2 OC门必须加上拉,提高电平值
3 加大输出的驱动能力(单片机较常用)
4 CMOS芯片中(特别是门的芯片),为防静电干扰,不用的引脚也不悬空,一般上拉,降低阻抗,提供泄荷通路
5 提高输出电平,提高芯片输入信号的噪声容限,增强抗干扰
6 提高总线抗电磁能力,空脚易受电磁干扰
7 长线传输中加上拉,是阻抗匹配抑制反射干扰
原则:
1 从节约功耗和芯片的电流、能力应是电阻尽量大,R大,I小啊
2 从确保驱动能力,应当电阻足够小,R小,I大啊
3 对高速电路,加上拉可能边沿平缓(上升时间延长)
建议可以在1K---10K之间选(可根据实际情况)

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(636)
发表于:2008-1-1 2:14:04
标签:无标签

0

可以参考的硬件国外网站

0
可以参考的硬件国外网站
发表于 2007-12-14 21:45:36
可以参考的硬件国外网站(从http://www.edn21.cn/weburl/MSP430.htm看到,你可以把你认为好的网站留下):

1.EG3
关于嵌入式开发的站点,提供非常多关于嵌入式开发的资料。包括开发公司,技术文档,免费资源等等。版面包括busses & boards,embedded software,dsp,embedded systems,open source,rtos,embedded chips,system-on-a-chip 等等。
强烈推荐

http://www.eg3.com/ - 外文

2. The First Stop for the Latest ICs and Components
非常好的关于微处理器,DSP,可以编程控制器资讯的网站,更新非常快。强烈推荐一些领导级别的人常去,了解行业动态!
http://www.eeproductcenter.com/ - 外文
3. 美国Cornell University课程ECE476所完成的项目。
这些项目都具有详细学习资料。共有200多个项目,看看这些东西,就能感觉国内与国外教学实践的差别。我们国家很多高校的电子相关专业的设计就是搞个键盘,搞个MAX7219显示,搞个DS1302时钟,'一百年不变'。看了它是我记得很不舒服。大家好好研究研究吧。特别是老师们,一定要深思。
一毛

http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/ - 外文

4. Programmers Heaven - Assembler programming zone
大量的源代码,分类清晰,强烈推荐。但是有很多好像已经不再更新了。
http://www.programmersheaven.com/zone5/http://www.edn21.cn/?action-channel-name-weburl - 外文

5
. Build Your Own Microcontroller Projects
This page provides schematic and software for hobbyists to practice "learn by doing", build a simple microcontroller projects at home. For those who would like to contribute projects, please prepare HTML files whatever you like to see but keep all files small and informative. I shall provide for others. DIY的好地方,强烈推荐.
http://www.kmitl.ac.th/~kswichit/ - 外文

6


. The GCC toolchain for the Texas Instruments MSP430 MCUs
Here you will find a port of the GCC toolchain for the Texas Instruments MS4P430 family of ultra low power MCUs, This includes the GNU C compiler (GCC), the assembler and linker (binutils), the debugger (GDB), and some other tools needed to make a complete development environment for the MSP430. These tools can be used on Windows, Linux, BSD and most other flavours of Unix. However, the full debug environment is currently limited to Windows, Linux and BSD. MSP430 development is no longer limited to Windows!
http://mspgcc.sourceforge.net/ - 外文

7. MCUserver
一个比较专业的关于电子开发的网站,但是我也不知道网站是什么语言,但看一勉强看懂。它的下载区有很多实用资料,需要注册才可以下载。它提供很多DIY电路,比如PIC,AVR,MSP430,FPGA,ARM,8051等等编程电路。推荐
http://www.mcu.cz/modules/news/ - 外文

8. PIC,AVR,ARM,MSP430开发DIY
该网站提供很多的PIC,AVR,ARM,MSP430的开发资料,特别适合自己制作开发系统,它的ARM开发(利用LPC21**系列)是非常号的资料。推荐。
http://www.olimex.com/dev/http://www.edn21.cn/?action-channel-name-weburll - 外文

关于投票

系统分类: 资源共享   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(543)
发表于:2007-12-20 18:22:32
标签:无标签

1

ARM开发工具综述

ARM开发工具综述

ARM应用软件的开发工具根据功能的不同,分别有编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统、函数库、评估板、JTAG仿真器、在线仿真器等,目前世界上约有四十多家公司提供以上不同类别的产品。
用户选用ARM处理器开发嵌入式系统时,选择合适的开发工具可以加快开发进度,节省开发成本。因此一套含有编辑软件、编译软件、汇编软件、链接软件、调试软件、工程管理及函数库的集成开发环境(IDE)一般来说是必不可少的,至于嵌入式实时操作系统、评估板等其他开发工具则可以根据应用软件规模和开发计划选用。
使用集成开发环境开发基于ARM的应用软件,包括编辑、编译、汇编、链接等工作全部在PC机上即可完成,调试工作则需要配合其他的模块或产品方可完成,目前常见的调试方法有以下几种:
1、指令集模拟器
部分集成开发环境提供了指令集模拟器,可方便用户在PC机上完成一部分简单的调试工作,但是由于指令集模拟器与真实的硬件环境相差很大,因此即使用户使用指令集模拟器调试通过的程序也有可能无法在真实的硬件环境下运行,用户最终必须在硬件平台上完成整个应用的开发
2、驻留监控软件
驻留监控软件(Resident Monitors)是一段运行在目标板上的程序,集成开发环境中的调试软件通过以太网口、并行端口、串行端口等通讯端口与驻留监控软件进行交互,由调试软件发布命令通知驻留监控软件控制程序的执行、读写存储器、读写寄存器、设置断点等。
驻留监控软件是一种比较低廉有效的调试方式,不需要任何其他的硬件调试和仿真设备。ARM公司的Angel就是该类软件,大部分嵌入式实时操作系统也是采用该类软件进行调试,不同的是在嵌入式实时操作系统中,驻留监控软件是作为操作系统的一个任务存在的。
驻留监控软件的不便之处在于它对硬件设备的要求比较高,一般在硬件稳定之后才能进行应用软件的开发,同时它占用目标板上的一部分资源,而且不能对程序的全速运行进行完全仿真,所以对一些要求严格的情况不是很适合。
3、JTAG仿真器
JTAG 仿真器也称为JTAG调试器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器比较便宜,连接比较方便,通过现有的JTAG边界扫描口与 ARM CPU 核通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控软件所必需的。另外,由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接口问题,如高频操作限制、AC和DC参数不匹配,电线长度的限制等被最小化了。使用集成开发环境配合JTAG仿真器进行开发是目前采用最多的一种调试方式。
4、在线仿真器
在线仿真器使用仿真头完全取代目标板上的CPU,可以完全仿真ARM芯片的行为,提供更加深入的调试功能。但这类仿真器为了能够全速仿真时钟速度高于100MHz的处理器,通常必须采用极其复杂的设计和工艺,因而其价格比较昂贵。在线仿真器通常用在ARM的硬件开发中,在软件的开发中较少使用,其价格高昂也是在线仿真器难以普及的因素。
在以下的章节中,我们选取了ARM SDT、ARM ADS、MULTI 2000、Hitools for ARM、Embest IDE for ARM五种集成开发环境向读者作一个简单的介绍,这些产品在国内有相对较畅通的销售渠道,用户容易购买。前三种由国外厂商出品,历史比较悠久,在全球范围内应用较为广泛,后两种由国内厂商推出,具有很高的性价比。另外选取了国际市场上较流行的两种JTAG仿真器:EPI公司的JEENI和ARM公司的 Multi-ICE。
二、 ARM SDT
ARM SDT的英文全称是ARM Software Development Kit ,是ARM公司(www.arm.com)为方便用户在ARM芯片上进行应用软件开发而推出的一整套集成开发工具。ARM SDT经过ARM公司逐年的维护和更新,目前的最新版本是2.5.2,但从版本2.5.1开始,ARM公司宣布推出一套新的集成开发工具ARM ADS 1.0,取ARM SDT而代之,今后将不会再看到ARM SDT的新版本。
ARM SDT由于价格适中,同时经过长期的推广和普及,目前拥有最广泛的ARM软件开发用户群体,也被相当多的ARM公司的第三方开发工具合作伙伴集成在自己的产品中,比如美国EPI公司的JEENI仿真器。
ARM SDT(以下关于ARM SDT的描述均是以版本 2.50为对象)可在Windows95、98、NT以及Solaris 2.5/2.6、HP-UX 10上运行,支持最高到ARM9(含ARM9)的所有ARM处理器芯片的开发,包括StrongARM
ARM SDT包括一套完整的应用软件开发工具:
Ä armcc ARM的C编译器,具有优化功能,兼容于ANSI C。
Ä tcc THUMB的C编译器,同样具有优化功能,兼容于ANSI C。
Ä armasm 支持ARM和THUMB的汇编器。
Ä armlink ARM连接器,连接一个和多个目标文件,最终生成ELF格式的可执行映像文件。
Ä armsd ARM和THUMB的符号调试器。
以上工具为命令行开发工具,均被集成在SDT的两个Windows开发工具ADW和APM中,用户无需直接使用命令行工具。
Ä APM Application Project Manageer,ARM工程管理器,完全图形界面,负责管理源文件,完成编辑、编译、链接并最终生成可执行映像文件等功能,见下图。

Ä ADW Application Debugger Windows,ARM调试工具,ADW提供一个调试C、C++和汇编源文件的全窗口源代码级调试环境,在此也可以执行汇编指令级调试,同时可以查看寄存器、存储区、栈等调试信息。

ARM SDT还提供一些实用程序,如fromELF、armprof、decaxf等,可以将ELF文件转换为不同的格式,执行程序分析以及解析ARM可执行文件格式等。
ARM SDT集成快速指令集模拟器,用户可以在硬件完成以前完成一部分调试工作;ARM SDT提供ANSI C、C++、Embedded C函数库,所有库均以lib形式提供,每个库都分为ARM指令集和THUMB指令集两种,同时在各指令集中也分为高字节结尾(big endian)和低字节结尾(little endian)两种。
用户使用ARM SDT开发应用程序可选择配合Angel驻留模块或者JTAG仿真器进行,目前大部分JTAG仿真器均支持ARM SDT。
ARM SDT 2.50的零售价一般在4000美元到4500美元。
三、 ARM ADS
ARM ADS的英文全称为 ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具,用来取代ARM公司以前推出的开发工具ARM SDT,目前ARM ADS的最新版本为1.2。
ARM ADS起源于ARM SDT,对一些SDT的模块进行了增强并替换了一些SDT的组成部分,用户可以感受到的最强烈的变化是ADS使用CodeWarrior IDE集成开发环境替代了SDT的APM,使用AXD替换了ADW,现代集成开发环境的一些基本特性如源文件编辑器语法高亮,窗口驻留等功能在ADS中才得以体现。
ARM ADS支持所有ARM系列处理器包括最新的ARM9E和ARM10,除了ARM SDT支持的运行操作系统外还可以在Windows2000/Me以及RedHat Linux上运行。
ARM ADS由六部分组成:
Ä 代码生成工具(Code Generation Tools)
代码生成工具由源程序编译、汇编、链接工具集组成。ARM公司针对ARM系列每一种结构都进行了专门的优化处理,这一点除了作为ARM结构的设计者的ARM 公司,其他公司都无法办到,ARM公司宣称,其代码生成工具最终生成的可执行文件最多可以比其他公司工具套件生成的文件小20%。
Ä 集成开发环境(CodeWarrior IDE from Metrowerks)
CodeWarrior IDE是Metrowerks公司一套比较有名的集成开发环境,有不少厂商将它作为界面工具集成在自己的产品中。CodeWarrior IDE包含工程管理器、代码生成接口、语法敏感编辑器、源文件和类浏览器、源代码版本控制系统接口、文本搜索引擎等,其功能与Visual Studio相似,但界面风格比较独特。ADS仅在其PC机版本中集成了该IDE。

Ä 调试器(Debuggers)
调试器部分包括两个调试器:ARM扩展调试器AXD(ARM eXtended Debugger )、ARM符号调试器armsd(ARM symbolic debugger)。
AXD基于Windows9X/NT风格,具有一般意义上调试器的所有功能,包括简单和复杂断点设置、栈显示、寄存器和存储区显示、命令行接口等。
Armsd作为一个命令行工具辅助调试或者用在其他操作系统平台上。

Ä 指令集模拟器(Instruction Set Simulators)
用户使用指令集模拟器无需任何硬件即可在PC机上完成一部分调试工作。
Ä ARM 开发包(ARM Firmware Suite)
ARM开发包由一些底层的例程和库组成,帮助用户快速开发基于ARM的应用和操作系统。具体包括系统启动代码、串行口驱动程序、时钟例程、中断处理程序等,Angel调试软件也包含在其中。
Ä ARM应用库(ARM Applications Library)
ADS的ARM应用库完善和增强了SDT中的函数库,同时还包括一些相当有用的提供了源代码的例程。
用户使用ARM ADS开发应用程序与使用ARM SDT完全相同,同样是选择配合Angel驻留模块或者JTAG仿真器进行,目前大部分JTAG仿真器均支持ARM ADS。
ARM ADS的零售价为5500美元,如果选用不固定的许可证方式则需要6500美元。

四、 Multi 2000
Multi 2000是美国Green Hills软件公司(www.ghs.com)开发的集成开发环境,支持C/C++/Embedded C++/Ada 95/Fortran编程语言的开发和调试,可运行于Windows平台和Unix平台,并支持各类设备的远程调试。
Multi 2000支持Green Hills公司的各类编译器以及其它遵循EABI标准的编译器,同时Multi 2000支持众多流行的16位、32位和64位处理器和DSP,如PowerPC、ARM、MIPS、x86、Sparc、TriCore、SH-DSP 等,并支持多处理器调试。
Multi 2000包含完成一个软件工程所需要的所有工具,这些工具可以单独使用,也可集成第三方系统工具。Multi 2000各模块相互关系以及和应用系统相互作用如下图所示:

l 工程生成工具(Project Builer)
工程生成工具实现对项目源文件、目标文件、库文件以及子项目的统一管理,显示程序结构,检测文件相互依赖关系,提供编译和链接的图形设置窗口,并可对编程语言的进行特定环境设定。

l 源代码调试器(Source-Level Debugger)
源代码调试器提供程序装载、执行、运行控制和监视所需要的强大的窗口调试环境,支持各类语言的显示和调试,同时可以观察各类调试信息。

l 事件分析器(EventAnalyzer)
事件分析器提供用户观察和跟踪各类应用系统运行和RTOS事件的可配置的图形化界面,它可移植到很多第三方工具或集成到实时操作系统中,并对以下事件提供基于时间的测量:任务上下文切换、信号量获取/释放、中断和异常、消息发送/接受、用户定义事件。

l 性能剖析器(Performance Profiler)
性能剖析器提供对代码运行时间的剖析,可基于表格或图形显示结果,有效的帮助用户优化代码。

l 实时运行错误检查工具(Run-Time Error Checking)
实时运行错误检查工具提供对程序运行错误的实时检测,对程序代码大小和运行速度只有极小影响,并具有内存泄漏检测功能。
l 图形化浏览器(Graphical Brower)
图形化浏览器提供对程序中的类、结构变量、全局变量等系统单元的单独显示,并可显示静态的函数调用关系以及动态的函数调用表。

l 文本编辑器(Text Editor)
Multi 2000的文本编辑器是一个具有丰富特性的用户可配置的文本图形化编辑工具,提供关键字高亮显示、自动对齐等辅助功能。
l 版本控制工具(Version Control System)
Multi 2000的版本控制工具和Multi 2000环境紧密结合,提供对应用工程的多用户共同开发功能。Multi 2000的版本控制工具通过配置对支持很多流行的版本控制程序,如Rational公司的ClearCase等。
五、 Embest IDE
Embest IDE英文全称是Embest Integrated Development Environment,是深圳市英蓓特信息技术有限公司(www.embedinfo.com)推出的一套应用于嵌入式软件开发的新一代集成开发环境。
Embest IDE是一个高度集成的图形界面操作环境,包含编辑器、编译器、汇编器、链接器、调试器等工具,其界面同Microsoft Visual Studio类似(见下图)。Embest IDE支持ARM、Motorola等多家公司不同系列的处理器,对于ARM系列处理器,目前支持到ARM9系列,包括ARM7、ARM5等低系列芯片。

Embest IDE运行的主机环境为Windows95/98/NT/Me/2000,支持的开发语言包括标准C、Embedded C和汇编语言。
Embest IDE包括编辑器、编译器、连接器、调试器、工程管理器等功能模块,用户同时可选配Embest JTAG仿真器。Embest IDE的所有与处理器和调试设备相关模块采用即插即用方式,可在同一个工作区中同时管理多个应用软件和库工程,各工程均可配置不同的处理器和仿真器,用户可在各工程中无缝切换。
Embest IDE主要特性:
l 工程管理器:图形化的工程管理工具,负责应用源程序的文件组织和管理,提供编译、链接、库文件的设置窗口。
l 源码编辑器:标准的文本编辑功能,支持语法关键字、关键字色彩显示等。
l 编译工具:集成著名优秀自由软件GNU的GCC编译器,并经过优化和严格测试。
l 调试器:源码级调试,提供了图形和命令行两种调试方式,可进行断点设置、单步执行、异常处理,可查看修改内存、寄存器、变量等,可查看函数栈,可进行反汇编等。
l 调试设备:Embest JTAG仿真器,一端是一个DB25的接口,连接到主机的并行口,另外一端是IDC插头,连接到目标板的JTAG接口。
l 联机帮助:中、英文两种版本在线帮助文档。
用户可以使用Embest IDE配合Embest JTAG仿真器进行应用软件的开发,Embest IDE同时也支持一些国内外常用的Jtag Cable线。
Embest IDE的零售价格为9600人民币(包括Embest JTAG仿真器)。
六、 Hitool for ARM
由Hitool International Inc.( www.hitoolsys.com)出品,是一种较新的ARM嵌入式应用软件开发系统,主要包括Hitool ARM Debugger、GNU Compiler(内建)、JTAG cable、评估板以及嵌入式实时操作系统ThreadX等。其中编译器模块可以替换成ARM ADS Compiler或ARM SDT Compiler。
其主要特点如下:
1) 近似MS Visual Studio的调试界面风格,可以在Win98/ME/NT等多种Win32环境下运行;
2) 优秀的工程管理器、源代码和二进制代码编辑器、字符串搜索引擎以及调试目标的自由拖放等功能;
3) 支持汇编、C以及C++源码级调试,不仅可以通过串口和并口进行本地调试,也可以通过TCP/IP进行远端调试;
4) 集成了S-Record、Binary和DISAssembly格式的内存上下载工具,Flash编程工具;
5) 支持多种常用的Jtag Cable,具备通过宏和脚本实现的自动化调试功能。
有关Hitool for ARM的详细资料见附录和本书附带光盘。
七、 JEENI仿真器
JEENI仿真器是美国EPI公司(www.epitools.com) 生产的专门用于调试ARM7系列的开发工具。它与PC之间通过以太网口或串口连接,与ARM7目标板之间通过JTAG口连接。该仿真器使用独立电源。
JEENI 仿真器支持ARM/THUMB指令,支持汇编/高级语言调试。用户应用程序通过JEENI仿真器下载到目标RAM中。通过JEENI仿真器,用户可以观察 /修改ARM7的寄存器和存储器的内容,用户可以在所下载的程序上设置断点,用户可以以汇编/高级语言单步执行程序,也可以全速运行程序,用户可以观察高级语言变量的数据结构及内容并对变量的内容在线修改。
JEENI 内部使用了一片带有高速缓存的 ARM 处理器,支持对调试操作的快速响应,比如:单步、读写存储器、读写寄存器和下载应用程序到目标板。JEENI 的这种结构,允许以太网接口在处理器执行JTAG指令的同时访问存储器。这种设计极大的提高了下载速度。
JEENI 仿真器能够很好地与SDT2.5工具连接,用户可使用SDT的编译器和调试界面。JEENI 对那些正在使用ARM BlackICE/EmbeddedICE JTAG接口的用户来说是即插即用的替代品。JEENI 可用于ARM SDT 2.11a 或 SDT 2.5,另外大多数第三方的调试器也都支持 JEENI。
八、 Multi-ICE
Multi-ICE是ARM公司自己的JTAG在线仿真器,目前的最新版本是2.1版。
Multi -ICE的JTAG链时钟可以设置为5 kHz到10 MHz,实现JTAG操作的一些简单逻辑由FPGA实现,使得并行口的通信量最小,以提高系统的性能。Multi-ICE硬件支持低至1V的电压。 Multi-ICE 2.1还可以外部供电,不需要消耗目标系统的电源,这对调试类似手机等便携式、电池供电设备是很重要的。
Multi-ICE 2.x支持该公司的实时调试工具MultiTrace,MultiTrace包含一个处理器,因此可以跟踪触发点前后的轨迹,并且可以在不终止后台任务的同时对前台任务进行调试,在微处理器运行时改变存储器的内容,所有这些特性使延时降到最低。
Multi-ICE 2.x支持ARM7、ARM9、ARM9E、ARM 10和Intel Xscale微结构系列。它通过TAP控制器串联,提供多个ARM处理器以及混合结构芯片的片上调试。它还支持低频或变频设计以及超低压核的调试,并且支持实时调试。
Multi-ICE提供支持Windows NT4.0、Windows95/ 98/2000/Me、HPUX 10.20 和 Solaris V2.6/7.0的驱动程序。
Multi-ICE主要优点:
l 快速的下载和单步速度。
l 用户控制的输入/输出位。
l 可编程的JTAG位传送速率。
l 开放的接口,允许调试非ARM的核或DSP。
l 网络连接到多个调试器。
l 目标板供电,或外接电源。

系统分类: 汽车电子   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(772)
发表于:2007-12-20 18:20:35
标签:无标签

1

嵌入式Linux开发资源大全

嵌入式Linux开发资源大全
(华恒科技版权所有)
1.Linux资源
Linux以其开源、免费的特点而成为嵌入式系统的优选操作系统,然而它还有一个巨大的优势就是其浩瀚无限的资源!即无数各色的maillist,下面给出各个嵌入式Linux的站点资源:

(1)uClinux:所有NOMMU的处理器都跑uClinux
uClinux发行包下载点:
http://www.uclinux.org/
MAILLIST搜索引擎:
http://mailman.uclinux.org/htdig/
一个搞uClinux的开发人员都应该关注的地方:
http://www.ucdot.org/

(2)ppclinux:PowerPC系列处理器平台都跑ppclinux
ppclinux发行包下载点:
http://penguinppc.org/dev/kernel.shtml
http://www.denx.de/
MAILLIST搜索引擎:
http://lists.linuxppc.org/ 选择linuxppc-embedded
软件下载点:
ftp://ftp.denx.de/pub/LinuxPPC/usr/src/

(3)armlinux:除ARM7 NOMMU的处理器外,其它的ARM9/XSCALE等ARM系列处理器都跑armlinux
armlinux发行包下载:
通用的下载方式
ftp://ftp.uk.kernel.org/pub/linux/kernel/v2.4/
还有可以是CVS的方式:一般的都在sourceforge.net
http://sourceforge.net/cvs/?group_id=33360
CVS命令如下: (这是你的Redhat Linux PC必须能够接通Internet)
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/armlinux login
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/armlinux co linux-2.4
ARM开发大全:http://www.arm.linux.org.uk/developer/
ARM内核移植编译的文章: http://www.arm.linux.org.uk/docs/kerncomp.shtml
MAILLIST搜索引擎:
http://www.arm.linux.org.uk/armlinux/mailinglists.php

(4)bootloader的资源
u-boot:http://www.denx.de/

其它常用东东:
microwin开发maillist
http://www.linuxhacker.org/cgi-bin/search.cgi
minigui开发
http://www.minigui.org/cgi-bin/lb5000/leoboard.cgi
rtai实时性补丁
http://www.aero.polimi.it/~rtai/
http://www.denx.de/
GNU CC(gcc)英文资源(文档,非常好)
http://gcc.gnu.org/onlinedocs/gcc/
http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html#Option%20Summary

2. 处理器PDF手册下载(请右键点击,选择“目标另存为(A)”)
MCF5249处理器手册
MCF5272处理器手册
MPC852T处理器手册:它是MPC866的"ethernet only version",所以就是MPC866的手册
MPC7410处理器手册
MPC7457处理器手册
MPC8540处理器手册
MPC8245/8241处理器手册
MPC860处理器手册
MPC823E处理器手册
MPC8260处理器手册
WINBOND W90N740处理器手册
S3C2410处理器手册
S3C2440处理器手册
S3C4510处理器手册
S3C44B0处理器手册
AT9140800处理器手册
AT91RM9200处理器手册
HMS30C7202处理器手册
Xscale IXP425处理器手册

3. 其它资源
华恒冷火HHCF系列嵌入式Linux开发平台常见问题解答
华恒PowerPC系列产品常见问题解答
华恒ARM系列产品常见问题解答

4.Redhat Linux 光盘映像下载点
http://www.linuxiso.org/

5.常用资源
串口通信:
http://www-900.ibm.com/developerWorks/cn/linux/l-serials/index.shtml#1
AT&T嵌入式汇编
http://www.32mcu.com/linux1.htm
BDM+GDB调试
http://www.ucdot.org/article.pl?sid=03/01/30/0548223

6.宿主机Linux安装注意事项及NFS的配置
建议都采用RedHat系列
目前华恒所有产品的宿主机平台以RedHat9.0为标准平台。
有些手册上所建议的RedHat7.2,现在都建议采用RedHat9.0,当然RedHat7.2/7.3的系统也都是可以用的,但鉴于市面上目前能买到的都是RedHat9.0,所以建议采用RedHat9.0
宿主机配置中一个常见的问题就是NFS的配置,这里介绍一种较为直接简单的方法:
首先在RedHat Linux PC机上执行setup,弹出菜单界面后,选中: System services,回车进入系统服务选项菜单,在其中选中 [*]nfs ,
然后退出setup界面返回到命令提示符下。
vim /etc/exports
将这个默认的空文件修改为只有如下一行内容:(注意中间有空格)
/ ???(rw)
然后保存退出(:wq),然后执行如下命令:
/etc/rc.d/init.d/nfs restart
Shutting down NFS mountd: [ OK ]
Shutting down NFS daemon: [ OK ]
Shutting down NFS quotas: [ OK ]
Shutting down NFS services: [ OK ]
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
这样就一切OK了!
【注意】
因NFS不会每次自动启动,即无法像linuxconf命令那样设置成Automatic启动方式,执行如下命令重启NFS服务:
/etc/rc.d/init.d/nfs restart
(最好把上面一句写入/etc/rc.local文件中,这样每次计算机重新启动就省去每次都要执行上面的命令来启动NFS服务)
配置完成后,可用如下办法简单测试一下NFS是否配置好了:
在宿主机上自己mount自己,看是否成功就可以判断NFS是否配好了。例如在宿主机/目录下执行:
mount -o nolock 192.168.2.32:/???/mnt(有时若根目录不让读写,执行chmod 777 / 试试)
然后到/mnt/目录下看是否可以列出/目录下的所有文件和目录,可以则说明mount成功,NFS配置成功。
但实际上,RedHat Linux PC自己mount自己成功也不能完全说明NFS就可以工作了,因为还有一个防火墙的问题,一般的我们建议客户在安装RedHat Linux时就默认选择No Firewall,但若客户没有这样选择的话,RedHat 启动时会加载防火墙规则,这样你自己能 mount 自己,但其它PC和板子也无法mount这台PC。所以这时要运行setup关闭防火墙。注意!setup里面的防火墙显示永远都是High,这个是RedHat一直的一个小BUG,即使你安装时默认选择了NO FIREWALL,setup里面也照样会显示防火墙设置是HIGH的,这个可以不必理会。只要你选择了一次NO Firewall 就可以了。关于防火墙等问题,请参见您的光盘里面的PDF手册。另外,建议对LINUX操作不是非常熟悉的客户,务必请阅读我们手册附录的“Linux常用命令”。

还有,就是RedHat还有这样一个问题,就是加入网关设置后,网络建立TCP链接非常慢,例如FTP/TELNET/NFS等都是,建立链接后,以太网通信还是很快的。若您安装网络时加入了网关,就会出现你在板子NFS mount REDHAT PC时,敲入mount -o nolock pcip:/ /mnt后非常长的时间不返回SHELL提示符,就一直停在那里,这就是建立连接的时间非常的长。一般的,遇到这种情况,建议在RedHat Linux PC上执行
route del default
即去掉网关,然后再进行NFS mount等操作就会非常快了。
再有,若您用的不是华恒的开发板,那么可能您的busybox可能没有加入NFS mount的支持,这样您就需要重新编译busybox,加入NFS mount支持,然后更新ramdisk,重新烧写即可。

当然了,测试NFS你必须用以太网将板子和REDHAT LINUX PC连接起来才行,连接的方式有两种:一是板子和PC都用普通的网线接到HUB或者交换机上;二是用交叉网线将板子和PC直连起来,注意!这种网线是特制的,内部收发交换的!

测试板子和PC网络是否连通的方式是:板子正常启动LINUX后,在minicom里面ping PC看是否能通即可,当然了,用PC来ping板子看是否通也是可以的。 注意:板子必须启动到LINUX后才能ping通,板子处在bootloader阶段一般是无法ping通的,即使这时板子的bootloader初始化了以太网也不行。

若板子跟PC的网络不通,mount报错信息为:
# mount -o nolock 192.168.2.211:/ /mnt
mount: RPC: Unable to receive; eNrno = No route Fo host
mount: Sfsmount failed::Bad file descriptor
mount program didn't pass remote address!
mount: Mounting 192.168.2.211:/ on /mnt failed: Invalid argument

关于tftp服务安装的问题
有些客户在安装RedHat Linux时,有时没有选Custom-->Packages里面选择everything,导致没有安装tftp服务(典型的就是安装完成后没有/tftpboot目录,setup-->system services里面也没有tftp选项 ),这时若要重新完全安装就太麻烦了,可如下单独安装改服务:
<感谢深圳客户廖代国先生和瘦网虫提供资讯>

安装tftp 的方法:
rpm -ivh tftp-server-0.32-4.i386.rpm.
其中tftp-server-0.32-4.i386.rpm在Redhat9的第3张光盘里面。

7.WEB SERVER boa的使用及配置
(1)、对于uClinux-dist而言,就是make menuconfig在应用程序选单中,在network application下面选择boa,然后到uClinux-dist目录下执行make编译即可。
对于有MMU的平台,如armlinux和ppclinux,都是到网上下载一个boa的tar包,随便找个主流的可用的版本即可,不要最新的也不要最旧的。下载到REDHAT宿主机上后,解压到任意目录,然后修改boa/src/Makefile里面的编译器,就只要加入两三行即可,例如:
CC = /LinuxPPC/CDK/bin/powerpc-linux-gcc -DHHTECH_PPC
CPP = /LinuxPPC/CDK/bin/powerpc-linux-g++
然后直接在boa/src目录下执行make即可生成boa可执行文件,将其复制到ramdisk加载mount的目录的bin里面,然后等一同加入后面的配置文件和HTML/CGI文件后,重做ramdisk即可。

(2)、编制配置文件boa.conf
Linux下的应用程序的配置都是以配置文件的形式提供的,一般的都是放在目标板/etc/目录下或者/etc/config目录下,但boa的配置文件boa.conf一般都放置在目标板/home/httpd/目录下。
例如一个典型的boa.conf文件格式如下:
ServerName HHCF5272-R1
DocumentRoot /home/httpd/html
ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
ScriptAlias /index.html /home/httpd/html/index.html

它指定了HTML页面(例如index.html必须放到/home/httpd/html目录下,cgi可执行文件必须放到/home/httpd/cgi-bin目录下)

(3)、编译uClinux-dist后或者重做ramdisk后,烧写后在一台WINDOWS的PC机上就可以用IE访问板子上的webserver,例如输入板子IP地址http://192.168.2.111,即可看到你用dreamweaver做的网页index.html了。但这里只能做到对静态页面的支持,若要支持FORM表单处理和动态页面,就必须用C代码编制CGI代码,uClinux-dist/user/cgi-generic目录下提供了样板代码,或者可以从华恒公司购买。注意:这个CGI的可执行文件必须放置到板子的/home/httpd/cgi-bin目录下。

建议阅读文章:
http://www.51eda.com/Article/embed_system/rtos/200405/806.html
关于auth选项

8.关于PPP拨号
(1)、首先是根据板子的串口2的信号定义制作串口线接MODEM,例如HHCF5249/5272系列