别说爱就一个字,你数数你说过几次; 别说程序员好干,你看看你年薪几万!~ 别说你爱的太真,伤的却太深——只要真心的投入就无悔、无怨恨 别说失去的太多,那是不懂得收获;别说爱了又错过,那是你没有去收获住那么硕果!~ 请真心你现在所拥有的一切——守侯住属于你的爱情!FOR ever

子若的本本——C语言

上一篇 / 下一篇  2007-12-09 23:32:47 / 个人分类:本本收藏家

查看( 139 ) / 评论( 51 )
C语言数组排序小结
/c4m0_aQ7@ J0
| l)p%vGkU-J0数组排序小结(for beginner) IXPUB技术博客p$[J Jvqphk
很多朋友是以谭浩强老师编的《c语言教程》作为学习C语言的入门教程的。书中涉及排序问题一般都以“冒泡法”和“选择法”实现。为了扩大视野,增加学习编程的兴趣,我参阅了有关书籍,整理了几种排序法,写出来同大家共勉。(高手们不要笑,这篇文章是写给出学者的,而且我自己也是只菜鸟,虽然内容陈旧,但值得初学者一看)。 IXPUB技术博客R3Ucb.j
让我们先定义一个整型数组a[n],下面用五种方法对其从小到大排序。 IXPUB技术博客#l(Uf'M?7C"E2N
(1)“冒泡法”
,h9[ Nlw%ai:[k0冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a,则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码: IXPUB技术博客,h*RYiKw

0D]K ]0i#ic0void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/
R6ACk Y6Mn0Uzf0{ IXPUB技术博客5[&J$@1{*T
int i,j,temp; IXPUB技术博客e`EW)V(pFv
for(i=0;i<n-1;i++) IXPUB技术博客LJ:\9F0|I9H}
for(j=i+1;j<n;j++) /*注意循环的上下限*/
y!K@-gxJ0if(a>a[j]) {
~P'R+[ `CrS0temp=a;
1gM%mB(AJN&B8}C0a=a[j]; IXPUB技术博客 YWe+L#E4aJ
a[j]=temp;
J KP n-w&aw(GHW0} IXPUB技术博客c2W(D"X*v8I']
} IXPUB技术博客_,B"ga4q)^
IXPUB技术博客P ]2_? DM
冒泡法原理简单,但其缺点是交换次数多,效率低。 IXPUB技术博客7|8I[#b0c$o-Tg:fw
下面介绍一种源自冒泡法但更有效率的方法“选择法”。 IXPUB技术博客S O C+Z2N'S0A.S

cMUK%|X2`0(2)“选择法”
@ o)zQ,oD ii0选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a[k]同后面元素比较,若a[k]>a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a,这样就比冒泡法省下许多无用的交换,提高了效率。
xF({1D9Bo+XO0IXPUB技术博客 |k:q)lQ
void choise(int *a,int n)
5~z+ms[zB0{
l;r H)QS)egj4}L0int i,j,k,temp;
"z*x^-AlaA0for(i=0;i<n-1;i++) {
~{Y)Qf0k=i; /*给记号赋值*/
\X1Z_B:C9[s)T E ec0for(j=i+1;j<n;j++) IXPUB技术博客[ fhg*^P
if(a[k]>a[j]) k=j; /*是k总是指向最小元素*/
"c;S$WG2^0if(i!=k) { /*当k!=i是才交换,否则a即为最小*/ IXPUB技术博客GK/v,Ui9XnP
temp=a;
%j`*|zL$z!F3~@0a=a[k]; IXPUB技术博客 qa5z9e'Ib-y9P
a[k]=temp; IXPUB技术博客|0Z-~.r$F#gp
}
!Z#Q~O2h-z0} IXPUB技术博客$C%Je%],vKz.xv;C/_| r
} IXPUB技术博客jz7Y&JnBx1V:S
IXPUB技术博客#M8A:Va?3c
选择法比冒泡法效率更高,但说到高效率,非“快速法”莫属,现在就让我们来了解它。
s-M,C5D_,V}/cl%o0IXPUB技术博客"?2n2_ W,F
(3)“快速法” IXPUB技术博客#?']vO6@;hJ
快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j). 它首先选一个数组元素(一般为a[(i+j)/2],即中间元素)作为参照,把比它小的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。下面分析其代码:
1b e#e VP wO#I)l8o0IXPUB技术博客'| x2_+~&SJ$kO
void quick(int *a,int i,int j) IXPUB技术博客p;@,R%`2m~8m5r$ez
{
"Q$S n%MS*JZ3\"[0int m,n,temp; IXPUB技术博客w!UE3A._Pc~ K
int k;
8C2k,r.Y8p6^0m=i; IXPUB技术博客;vN2Q V!NlZ,N$N
n=j;
|#xG'Hm0k=a[(i+j)/2]; /*选取的参照*/ IXPUB技术博客6thnb m&nK4P s K_
do { IXPUB技术博客n)uEpOp%^!K
while(a[m]<k&&m<j) m++; /* 从左到右找比k大的元素*/ IXPUB技术博客+EN'C d"aDu
while(a[n]>k&&n>i) n--; /* 从右到左找比k小的元素*/
n1L1K"foE%d0if(m<=n) { /*若找到且满足条件,则交换*/ IXPUB技术博客T:[ ^2R:Hh8jb-v
temp=a[m]; IXPUB技术博客U9?I;bWY
a[m]=a[n];
_d(yCU:Kx7imfN H(L0a[n]=temp;
"sF9_4jm3|%BI1D0m++;
{zI]a$M\0n--;
#ROh J P&Sg0} IXPUB技术博客$s!v0o1l7z
}while(m<=n);
'Z tx%D{0if(m<j) quick(a,m,j); /*运用递归*/ IXPUB技术博客#TLh/i$Q
if(n>i) quick(a,i,n); IXPUB技术博客_5yn#waF$u
} IXPUB技术博客ts&c c%ai v5d!BN
IXPUB技术博客tbCz"KQ(o8OF*zxQ/I
(4)“插入法” IXPUB技术博客0~]F3Nem"I1U
插入法是一种比较直观的排序方法。它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。 IXPUB技术博客cw c#L2O6Y
IXPUB技术博客p8I x!fh/tl$\
void insert(int *a,int n)
.U4^!\P7?0{ IXPUB技术博客!?.Jgl2g8I1d
int i,j,temp;
J V?2l7SF0for(i=1;i<n;i++) { IXPUB技术博客%{I? u4l{ _2g E;g
temp=a; /*temp为要插入的元素*/ IXPUB技术博客e@V v[$WX
j=i-1; IXPUB技术博客5k.P(L6I} a#OL
while(j>=0&&temp<a[j]) { /*从a[i-1]开始找比a小的数,同时把数组元素向后移*/
"qPJqu0a[j+1]=a[j]; IXPUB技术博客0j'pbGb'k y
j--;
"MJt)n-L0}
Y!{5DCc0a[j+1]=temp; /*插入*/
i9GWr.~H$[8v6rm0}
b#q%]lrP%AR$qKu0}
$]7H8|/X,t { w0IXPUB技术博客 l#eW[vP(esX*C
(5)“shell法” IXPUB技术博客JgBpJdQ4uK
shell法是一个叫 shell 的美国人与1969年发明的。它首先把相距k(k>=1)的那几个元素排好序,再缩小k值(一般取其一半),再排序,直到k=1时完成排序。下面让我们来分析其代码: IXPUB技术博客/lcY Z$bm
IXPUB技术博客| A&V&p(r"E
void shell(int *a,int n) IXPUB技术博客c+q5Q7s ~ a\k MWe
{ IXPUB技术博客-}M~/t7|:]dR|
int i,j,k,x; IXPUB技术博客+a0FL(d/R*i
k=n/2; /*间距值*/ IXPUB技术博客6nu4S2J0x(a
while(k>=1) {
F uA]2g)\]6^t:[0for(i=k;i<n;i++) {
2^v8nX:M0x=a;
@!eV`:M"gdC0j=i-k;
HekFCu0while(j>=0&&x<a[j]) { IXPUB技术博客4UhL)tBm6m
a[j+k]=a[j];
1q Z|-E~Ej$X0j-=k;
.^A zb;C6iv_0} IXPUB技术博客}Ob?-Ra EM
a[j+k]=x;
9` AdbV0} IXPUB技术博客kT\4J3s#|*[
k/=2; /*缩小间距值*/ IXPUB技术博客 y[x7C p m![^4I
} IXPUB技术博客6s(hM7X5k
} IXPUB技术博客Twk0~"FKl
IXPUB技术博客Hbx$s%w)D
上面我们已经对几种排序法作了介绍,现在让我们写个主函数检验一下。 IXPUB技术博客;N@,u0G-wa
IXPUB技术博客B%r"u [`(Y2~'fc Q
#include<stdio.h> IXPUB技术博客7{_c*M:A0W-e UM7?
IXPUB技术博客X@/g ]^I
/*别偷懒,下面的"..."代表函数体,自己加上去哦!*/
$t{"hnAP+w7s)F1P0void bubble(int *a,int n)
l j ~uG7k]g3A9f'[0{
u yI#|l0... IXPUB技术博客I.P#Z'a {u TV
} IXPUB技术博客9B9rG}&|:@ ojH3}
void choise(int *a,int n) IXPUB技术博客u/L|-S Y7I
{
!V E}'lR.n;HR^$V0... IXPUB技术博客;B;oi.y1H4|F$D _6k
}
M8I g7uh(fzX9J0void quick(int *a,int i,int j) IXPUB技术博客5t O,R ^"G:O4U
{
,S kjX7[&Nk.JK0K0...
WKMt$\:Q*rR v0}
RBM|"HG0void insert(int *a,int n) IXPUB技术博客;l*Kw$}{
{
%n zm*YTGs]f0... IXPUB技术博客qbTf KK\?,}!@&m
} IXPUB技术博客f|wY-^Ck#t'ze
void shell(int *a,int n) IXPUB技术博客Vz.TrEPrY
{
zp5Wp slHU0... IXPUB技术博客O$Y6zA4q&bH1T }"`
}
$y;P7?4Xvd9YN(Q!p0
!N3M0dO#Z'U0/*为了打印方便,我们写一个print吧。*/
y"Y;YJ e{0K0void print(int *a,int n) IXPUB技术博客foo\.Ei#E(Bu/iO
{ IXPUB技术博客&Jv-f*l9Yi.n$Nn7Z
int i;
g M0^$j#Ll0for(i=0;i<n;i++)
;~?0JY.Y2{\@|.w0printf("%5d",a);
NAD!`2g7F{0printf("\n");
Zc U2g?0}
8x&Tw9d8T:{0IXPUB技术博客(uQg4LbE9Cpk
main() IXPUB技术博客%Hl kH{"@8r'W
{ /*为了公平,我们给每个函数定义一个相同数组*/ IXPUB技术博客_;L-Q$s.aWk Ju&O~F
int a1[]={13,0,5,8,1,7,21,50,9,2};
3M_T2J[ F(Q0int a2[]={13,0,5,8,1,7,21,50,9,2}; IXPUB技术博客(T5w&\+Cx-|l#`
int a3[]={13,0,5,8,1,7,21,50,9,2};
3@6kbDjD/s[0int a4[]={13,0,5,8,1,7,21,50,9,2};
/G Tu)d L2oG P0int a5[]={13,0,5,8,1,7,21,50,9,2}; IXPUB技术博客:Y3^eWR H[

JhS r2n*N7|H0printf("the original list:");
G}U1u4Ls7pn;BP4i,c0print(a1,10);
1Z(c6C;A A(X.y0printf("according to bubble:"); IXPUB技术博客'~OJs\ Dx
bubble(a1,10); IXPUB技术博客{V"O qZ4pw6km
print(a1,10); IXPUB技术博客*z0XO:vRxS9M
printf("according to choise:"); IXPUB技术博客|F$_Q^T8iZ
choise(a2,10); IXPUB技术博客@n9c:s`v:@
print(a2,10);
OSK H|f t0printf("according to quick:");
r"A1Hq b ?7Uq0quick(a3,0,9); IXPUB技术博客4Bk'o4D)f#Xx?]`
print(a3,10);
q&R9HIn,QjLf!F0printf("according to insert:"); IXPUB技术博客1M|$D ]r rB"i
insert(a4,10);
H'T$k\t0print(a4,10);
A V `zVB8Z0printf("according to shell:");
0oH G!Sr&L"s'F|P0shell(a5,10);
h/j&\.R R.hA*}0print(a5,10);
Q2o$[4@%w0}

TAG:

我们都是只有一只翅膀的天使,无法割舍彼此 grjboy30 发布于2007-12-09 23:33:41
Python 与 C++ 程序的简单实例对比blog.ixpub.net4JA;`2qlm[(J6{`
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理`BhFs)aYE
if __name__=='__main__':IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。"Y8jnoY)m
    file_name = raw_input('Input the file you want to find in:')IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。/gp
v%]+]BQ

    try:blog.ixpub.net|C:rZc
        in_file = open(file_name,'r')dM#py
@Q

        lines = in_file.readlines()

I$}5\v
l
T;|IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理bt
H:b)\

        tag_tok = ''IXPUB技术博客 U        il8}j8n2A4L
        while tag_tok.upper() != 'Q':
?qku Ea1Jblog.ixpub.net            tag_tok = raw_input('Input the word you want to find(Q for quit):')
(A st L!`/\K            if tag_tok.upper() != 'Q': IXPUB技术博客9d+@1t0oRY3@R6L
                count = 0IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。Lj5`4u~i*e        O%`
                line_no = 0
gz7wdW'|IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。                for line in lines:8YL/Z4nQ&] X
                    line_no = line_no + 1$k;C*J,|(t$_"f'n)~5{
                    inline_cnt = line.count(tag_tok)
U;^L+z4b `N;in)MIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。                    count = count + inline_cnt
l/cH0T#yj4F:kR                    if inline_cnt > 0:blog.ixpub.netFRZ1E9k#p8S
                        print 'Find %s %d time(s) in line :%d'%(tag_tok,inline_cnt,line_no)IXPUB技术博客$C}z'M%?D
                        print lineIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。p:v*x0u e4etg'^
                print '---------------------------------'
H:Y/e6X&Tz
K?V)Y病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
                print 'Total fount %s %d time(s)'%(tag_tok, count)
(s"peG`.|%T/`    except:IXPUB技术博客s*Mr4bg        |(kC2er
        print "Can't open file %s"%(file_name)
blog.ixpub.net T-M2{4l4C^4Zf        w({
但是,这个网友还不满足非要一个 C++的程序,理由是他们老师不会python , 正好我也想试试用C++解决和python做下对比:
aSg:^_+R%[-zZd$^IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。#include <fstream>
+x8}gO%O7v;X;xIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。#include <iostream>
5}'vP*v^;s4L&{z&Pblog.ixpub.net#include <string>
X+G p{3~A病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理#include <vector>
!pbi6T
kJ(kscM ZIXPUB技术博客
#include <algorithm>
8pz9KC W3Nu
using namespace std;
2g%ny5Ww&MIXPUB技术博客int BruteFind(const char *x, int m, const char *y, int n ,vector<int>& colpos) { L)x0~HDw l7~1y
  int i, j, cnt=0;病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理+p-\d(`
l

  /* Searching */
_og;b
F(W6\
  for (j = 0; j <= n - m; ++j) {#eb(`3I
H Xg#ec

   for (i = 0; i < m && x
== y[i + j]; ++i);
)y5ia(igQ?4UL    if (i >= m){h
{In;{:D

     colpos[cnt++] = j;
souo)S2Wb病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理     if(cnt == colpos.size())
f(`V4vh3G"u      colpos.resize(cnt * 2);
M
jTK].S!V_2T3f8X{IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
    }
8|,[u$f~,Ublog.ixpub.net  }
t[&z$c4Ihz:b
Ex dvA
  return cnt; Vb `N&R%f
}
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理;p.e M E"S
int count_string(string source, string tag, vector<int>& colpos){IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。 J"N+v;a`F&h2U
  int find_cnt = 0; I8lK mf)q"w
  find_cnt = BruteFind(tag.c_str(), tag.size(), source.c_str(),source.size(),colpos);
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理"s?.v.W{T!@
  return find_cnt;blog.ixpub.net;y1Q {I.]_
}
IXPUB技术博客}\B3}5bryJ
int main(){B `.gm)U.}!M        }rry        ~b
string file_name, line;病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理"E~4]7f'`E
Ep'F

vector<string> lines;
fdU4m\&iblog.ixpub.net  lines.resize(10);
'B)I ww#b_病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理  
r/xwal(H6W病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理cout << "Input the file name:";
HNeX~T@Yi病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理cin  >> file_name;blog.ixpub.net.p]$@)N,a
blog.ixpub.netv zAo
V

ifstream in_file;
F5f5HG'J4U5VH;\try{A)R7`pcYD
     in_file.open(file_name.c_str()); blog.ixpub.neti,Hl~S
     if(!in_file)
?@'Oa6J+a5V#OIXPUB技术博客       throw(file_name);
Z%|?7P[C8Q  }IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。O3\&uv
JDQ-zEG

  catch(string file_name){IXPUB技术博客/d(r;]'kMi
     cout << "Fatal error: File not found."<<endl;IXPUB技术博客\,m*?yA
     exit(1);
$l4^^'a6F4}U  }

)sRZ|,i{int line_count = 0;
*zrhs.Ro
,y xF/D8}J[Fdo{病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理{b
M$p%C?A+l6B

    getline(in_file, lines[line_count]);*|{k^B!G K+x
    line_count ++;
H(K+uKN-_;f        IIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。    9tmz)b
v~$y7{

    if(line_count == lines.size()){
MFTU;q4w     lines.resize(line_count * 2);IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。-@]        [ [bO"QR
    }d/S7V]5k        z3C$jx,~
  }while(in_file.eof()==0);
l0LMsL/r'hblog.ixpub.net
.wg!tC4Q,{'pGIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。string tag_tok;r&tJ@]7CFX
vector<int> colpos;病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理D?v#V5r]~-Y
colpos.resize(10);IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
r2Vek@k


#o7?v"?6g病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理do{病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理r+L
z
Z/D5M
G@"B

  cout << "Input the word you want to find(Q for quit):";5G H&s7n3X
  cin >> tag_tok;vjLGii;W
  if(tag_tok == "Q"){
A+ppEE        E'[   break;病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理e        Lx2Z `(_9MY
  }
D#Rs|4|T

  
kwCOTS,cM  int count = 0, line_no = 0 , inline_count;blog.ixpub.net*S]$B%N9_;Kc
S_%l

  for(line_no = 0 ;line_no < line_count ; line_no++){
7Zoko(Vm)BJajY   inline_count = count_string(lines[line_no], tag_tok, colpos);
m7}.d5}ig8z
}*|blog.ixpub.net
   count += inline_count;
n)bXmD&U   if(inline_count > 0){blog.ixpub.netm5q-zN-Bw9q3N9w
    cout << "Find " << tag_tok << " " << inline_count << " time(s) in line " << line_no ;A$~4[P$]J4{4`,h&]%g
    cout << " , column pos is ( ";blog.ixpub.net)h
R9ZQ!I*C

   
!p6f'mUM2`&K{%{tblog.ixpub.net    for(int i = 0 ;i< inline_count ;i++){病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理h,o2q:h;i4~7A0H%j:tx
     cout << colpos
<< ' ';blog.ixpub.net3|:J ypp)G
    }病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理DC.N;syj`1_
    cout << " )" << endl;IXPUB技术博客U
V-d4~._x~

    cout << lines[line_no] << endl;
&mr3O:US)_{[*h1^   }
#Z-g/F&M5Z3D&c4uqIXPUB技术博客  }IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。-v~(f1v{5qJ
  cout << "--------------------------------" <<endl;IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。xR7W6GS9U|lFo@
  cout << "Total fount " << tag_tok << " " << count << " time(s)" << endl;
_ZB'Uo8T~;n;{`,j}while(tag_tok != "Q");IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。(z ?\F9at YDB
IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。;jd2sNoWnv
in_file.close();IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。 j7F h&{5V#R0v
Tn8A

return 0;IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。!MT(c8N(sI
}

,~Zu&n!Xio!y]0Y,lIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。这个程序用了30分钟。
WQ*l
wm.J(D        |3gIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
从程序长度和编程时间上,粗略对比下:
r+@Bi8B"m3s^WjOblog.ixpub.netPython  5 分钟 22行IXPUB技术博客y7y-R6^&if
C++       30 分钟 60多行

b~lxl9m,c
从这个简单的例子中可以大体看到 脚本语言与C++语言中在开发时的差异了。 病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理-v"f#fPYe:o

我们都是只有一只翅膀的天使,无法割舍彼此 grjboy30 发布于2007-12-09 23:34:11
c++ 数组与指针
TEl!?K5d,`h3R

IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。~(k3f"@e
有一天无意之间看到一篇文章很不错,里面总结了一些指针与数组的关系,概括性很强,文章在下面,看的时候发现有些问题,说的不是很好懂,我说说我的见解:blog.ixpub.net&{j"@`4Zch
首先指针和数组的名字表示的就是一个首地址,这一点可以肯定,但是数组是在堆里分配,而指针是在栈里分配,两者有者本质的区别,数组是有固定的地址,但是指针如果不使用new或者malloc的话,那么他就是处在一个“游离”的状态。
!f5ZSRm}先看下面的文章,我再说说一些要记住的,或者说要注意的!IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。mn-?UEI}H6C(b}
什么时候数组与指针相同;U$`5o'vI%v@

/gA;a1VA所有作为函数参数的数组名总是可以通过编译器转换为指针。&H"HdU,m7`;X"r7`.R
在其他所有情况下,数组的声明就是数组,指针的声明就是指针,两者不能混淆。blog.ixpub.netn@;KPTm$F9ZE

b lY%]*aP,qIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。但在语句或表达式中引用时,数组总是可以写成指针的形式,两者可以互换。病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
e|"rw9` z


$om/a,Lv!M0Fblog.ixpub.net然而,数组和指针在编译器处理时是不同的,在运行时的表示形式也是不一样的。
3R        FG|;Z$RC@*aIXPUB技术博客对编译器而言,一个数组就是一个地址,一个指针就是一个地址的地址,你应该根据情况做出选择。
K*MZ9l4u?
kIXPUB技术博客
6[M,\:i.ZW"Q"N;{
为什么会发生混淆
cC        u|[ vE5n%^-CIXPUB技术博客
'Nj5x&T:y&`S({Rblog.ixpub.net当人们学习编程时,一开始总是把所有的代码都放到一个函数里。病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理/lEX`_;m3}
随着水平的进步,他们把代码分别放在几个函数中。

CaL"T3rYIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
在水平继续提高后,他们最终学会了如何用几个文件来构造一个程序。
S$bA)ov]_8Kooblog.ixpub.netNF0|b?
什么时候数组和指针是相同的?C语言标准对此作了如下说明:
:`y
yM1iy%F[
规则1 表达式中的数组名(与声明不同)被编译器当作一个指向该数组第一个元素的指针。 Um%h4G}y
规则2 下标总是与指针的偏移量相同。
q!F/D1lV规则3 在函数参数的声明中,数组名被编译器当作指向该数组的第一个元素的指针。
3By{,s&LJ'K
2` i}!lUpC规则1:“表达式中的数组名”就是指针IXPUB技术博客sI
cB$WEh;X&}


!fx,{4tq4N's @规则1和2合在一起理解,就是对数组下标的引用总是可以写成“一个指向数组的起始地址的指针加上偏移量。”blog.ixpub.net\        jY|2d#yK
(个人认为,表述为“一个指向该数组第一个元素的指针加上偏移量”更明确。)blog.ixpub.nettX7[@&LX        Z| [
IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。`"D![        V%h9a%R:W
对数组的引用如a在编译时总是被编译器改写成*(a+i)的形式。IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。K};s&p"E+zm
C语言标准要求编译器必须具备这个概念性的行为。blog.ixpub.net\JD&w!YRt
于是,a[6]和6[a]都是正确的。#a/_sY_1x1B
blog.ixpub.net,PMb
S9f0AO/a

编译器自动把下标值的步长调整到数组元素的大小。病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理6l _:M"[8V
这就是为什么指针总是有类型限制,每个指针只能指向一种类型的原因,IXPUB技术博客5Ce&v#Fz|V)Tt
因为编译器需要知道对指针进行解除引用操作时应取几个字节,以及每个下标的步长应取几个字节。IXPUB技术博客;a+K2kaWLs9e
IXPUB技术博客 Wh9|k~
?lnV

规则2:C语言把数组下标作为指针的偏移量病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理*B]9I1`9QmK
\@s


`~T9XGp Id+{病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理事实上,下标范围检测被认为并不值得加入到C语言中。{
s5X        MQ E8m
V f



bs q&i[w$z
数组下标是定义在指针的基础上的,所以优化器常常可以把它转换为更有效率的指针表达式,
,Y?
z3Klu
并生成相同的机器指令。
QA8|4G_i-\        z+vl"Lu
[
Wv7Z"r$WIXPUB技术博客
C语言把数组下标改写成指针偏移量的根本原因是指针和偏移量是底层硬件所使用的基本模型。
(pJ,ky        VmaIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
G W
|#tm&{
为什么C语言把数组形参当作指针
y;fG_3P3\?IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理9fsA t!L!m!Z"CJ
之所以要把传递给函数的数组参数转换为指针是出于效率的考虑,blog.ixpub.neto&O|%[k] s%hl
这个理由常常也是对违反软件工程做法的辩解。病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理2TFUGeS-C1f

7O2r3Ga`-r+J5DV!m我们倾向于始终把参数定义为指针,因为这是编译器内部所使用的形式。IXPUB技术博客;Bg
mYI3h:z+B

但从另一方面,有些人觉得int table[]比int *table更能表达程序员的意图。IXPUB技术博客t7WR{R,g BU h

:Y$u1F;TKo:Y(ZIXPUB技术博客数组片段的下标
`!xb@d_IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
:KK!@:VH#UIXPUB技术博客向函数传递数组前面一个位置的地址(a[-1]),这样就可以使数组下标从1到N,而不是从0到N-1。St5V;De9y)zA
不幸的是,这个手段完全为标准所不容,所以你千万不要告诉别人是我告诉了你这个方法。
Lm,u!hhL

P U-r^3e        c.H;q2k$J病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
C语言的多维数组IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。\-Ka7~s!\O4c

] IsFp ~ N:V;c病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理但所有其他语言都把这称为“数组的数组”IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。y-Y9e1Q7f pe
u1f4M?;L8_z        n
C语言里有一种别的语言称为数组的数组的形式,但C语言称它为多维数组。
"a;qPgp,oJqblog.ixpub.netC语言中的数组就是一维数组,而这个数组的元素可以是另一个数组。IXPUB技术博客KJL#?z;b-@&jx
W:s:B$uE!^:w
编译器在编译时会把carrot[j]解析为*(*(carrot+i)+j)的形式。8o$ER
vc

blog.ixpub.nete4X%qLg
x t

如何分解多维数组
`N,pCC"N"A)Y)c病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
M5ef;f'qT
R1}:h
在“数组的数组的数组”中的每一个单独的数组都可以看作是一个指针。SpwY'u6k9e
这是因为在表达式中的数组名被编译器当作“指向数组第一个元素的指针”。(n,o/Rq8h1R9d7Ex;Z
IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。P
L{
n&eC

内存中数组是如何布局的
8]'t3f9\        LIXPUB技术博客
,WJ-A:b?Hblog.ixpub.net在C语言的多维数组中,最右边的下标是最先变化的,这个约定称为“行主序”。
'J5e;UNC4B~"[
iH
Sn0^xJ1Ds]IXPUB技术博客
如何对数组进行初始化blog.ixpub.netA:S8J pYX i

wa\N#aU病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理只能够在数组声明时对它进行整体的初始化。WJ^k*K
之所以存在这个限制,并没有过硬的理由。
Ma.|n:kD!w})ui
h4{kf/cjG0c4dblog.ixpub.net在IEEE754标准浮点数实现中,0.0和0的位模式是完全一样的。IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。_Y
Ki9`0u9k4a4IM

ZM+rf.xz0s
初始化二维字符串数组:
6]E8B[IDS(u!Z病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理char vegetables[][9] = )rX0?vbx6d
{
b EU)B,Q9U&^ os)aGblog.ixpub.net"beet",IXPUB技术博客J `B5N!zL
"barley",
我们都是只有一只翅膀的天使,无法割舍彼此 grjboy30 发布于2007-12-09 23:34:32
"basil",
#w mkf/a:pz        a"broccoli",IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。?3Yb+at'N
"beanes"
nq E X([O{}OIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。};blog.ixpub.netp _;[%n4D~8_a
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理P9m3EV
i9y}M:j

一种有用的方法是建立指针数组,字符串常量可以数组初始化值:IXPUB技术博客k
{!?-k
r`p][ h

char *vegetables[] = eT!^_3cB'Z
I

{IXPUB技术博客4sQ
Fch+WKQ

"beet",
/YibL M1KM|;F)fb病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理"barley",病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理        Vv3QM;Pw7X
"basil",blog.ixpub.net)T u
J8L[2|2N
N

"broccoli",
A!M@:Q y3QIXPUB技术博客"beanes"E3Q9M
El
Ay

};  IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。 u        ~%D.K [Zj
IXPUB技术博客N;ytM
i)@1b{

IXPUB技术博客k1D!n/Y&|ZI$S}
IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。h[])\K:Q9Vz
以上是人家的文章的内容,看完之后肯定感觉很不错吧,在上面的内容之余我再补充点东西:病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理'G6`0j*M7b
blog.ixpub.netCv!m.C7f"d&[
对于:blog.ixpub.net-xZH7_i+K


QB,b(O-^IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
char heart[] = "asdfasdf";
qDa
Ushj4_

;DGw~2lye
[
H病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
char *head = "gggggggggg";
)hVg        Od:@}
;x$@C D
fd%kRRo&@病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
由上面的文章我们可以知道,使用数组的方法和指针的方法都可以,即:可以用heart,head,又可以使用*(heart+i),*(head+i),但是是不是都可以自加或者自减 哦?
n~n Mi+FQg0D+lIXPUB技术博客
P#B2jO4V-A*K;cIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。不是IXPUB技术博客x        ~\P/]w,u.P+X
IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。6n5v|8bg
指针可以,开始我们说了指针可以认为是游离的,所以他本身的值可以变化,而自加就是让指针的首地址变化,但是数组是固定的,要变化一个数组的首地址就要用到双指针,如**heart,这里不说,试图用单指针变化数组的首地址是不行的。5K"}6Da.gC
blog.ixpub.net:i)Mp(?Or#w
另外,可以把一个数组赋值给指针,但是不可以把一个指针赋值给数组,也是这个道理!这也就是为什么指针申明和定义分开进行可以,如:IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。8QI&u5G_Mu _
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理3b"u+rx@
char *p;IXPUB技术博客"zTpu$w/Y6R
blog.ixpub.net t^"{G?ho
p = "asdf";
Ouo#`f:A2P/w


g5T&t        uNeblog.ixpub.net但是指针不可以如blog.ixpub.net        e@Fq(y*Tr


Ibi0Iw        ?(aLIXPUB技术博客
char p[5];
Ti%{^:A6{c]?dK%@:yu/tg#g
p = "asdf";//试图改变数组的首地址!wrong!
我们都是只有一只翅膀的天使,无法割舍彼此 grjboy30 发布于2007-12-09 23:35:06
C++中的内存管理(new、delete、内存泄漏)
Y$d9V+_4s9j8qzWs5[ blog.ixpub.net.e)Ep
mN0GDt(F{

1. 使用new动态分配内存:若没有足够内存,则new返回0(空值指针null pointer);IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。LYtj
hLS+v[ d

2. 不要使用delete释放不是new分配的内存,delete释放指针指向的内存,但不会删除指针本身;
N8uo9y&Yy[7B)EOIXPUB技术博客3、对空值指针应用delete是安全的;
4Xx
E AAKs
V,[.Qblog.ixpub.net
4、创建数组时的静态联编动态联编:数组声名int a[10], 静态联编,数组的长度在编译时确定;
"ka#R{-eUSIXPUB技术博客     用new[]创建数组,动态联编,运行时为数组分配内存空间。动态-运行时分配内存
~5H@;w#Q"xIXPUB技术博客blog.ixpub.net%C `ex#E,k;]5V
C++有3种管理数据内存的方式:自动存储、静态存储、动态存储(自由存储空间或堆)(三块独立的内存)IXPUB技术博客^8y[Gg0B

9U&z,[#n+?R c3oIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。自动存储:
(auto /  register ) 自动变量的持久性为自动的,在程序开始执行其所属的函数或代码块时创建,执行                     完后释放。
{$T9[1]9kZ
v%|IXPUB技术博客
                     auto: in stack LIFO  
z7d6S'M~0~osblog.ixpub.net                     register: in CPU register,使用寄存器处理变量,提高访问速度;没有内存地址,不能用&取地址。

0Ep;Y]aenh@']静态存储:(global / static ) 在程序整个运行期间都存在. (外部链接性、内部链接性、无链接性)IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。4\,Q*@?7f
                    初始化为0。
(kO6`coa.GBIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。     int  global = 1000;  //外部链接性,可在程序的其他文件使用, 使用时要用extern声名  (外部变量/全局变量)IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。c d J.Ld `IE+w0|
    static int one_file = 50; //内部链接性,只能在本文件使用   (函数如果为static也一样,只能在该文件中被调)
*i:_IRV
FIXPUB技术博客
    int main(){      ...  }病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理 yab/u9Oz.J
    void func(){
3t(n$L1S        Ldb病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理         static int count = 0;  //静态局部变量,只在该代码中可用,但它在该代码不活动时始终存在。
1LCtW x
bC ^f
   }&q:j9e8O%u2qV
    可用extern重新声名以前定义过的外部变量;
0p,zu8I fm,dy病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理    访问被隐藏的外部变量(被局部变量隐藏了):用作用域解析符::)::n 表示使用n的全局版本IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。 q"B:V,J\O%usx#^
   const char * const months[12] = {"Jan", "Feb", "Mar",...};
H:[z)POM\pIXPUB技术博客 //第一个const防止字符串被修改,第二个const确保数组中每个指针始终指向它最初指向的字符串。 jV C*I;p|;b6L8_6Tl
    mutable限定符:const/volatile/mutable  const禁止修改结构成员,但是mutable使const结构中的成员不受这种限制

S*`3h2E)dMcblog.ixpub.net
     struct data { char name[30];  mutable int accesses;  };blog.ixpub.net5v?7V.d:W"[C {
     const data  a = {....};   strcpy(a.name, "fdsf"); //not allowed     a.access++//allowed
M!RTKGh,S"R$[

     外部定义的const数据的链接性为内部的,跟static一样
3U1z m]7qy F'o病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
S-H {`1y(~g8JL
动态存储:(free store / heap)  new/delete,  malloc/free)\?i3Vn B
  1、使用new来设置指针的语句必须位于函数中,因为只能使用常量表达式来初始化静态存储变量:%GLU Z9iL`t.r
       float * p;
Gy2n'];B病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理       //float *p = new float[20]; //initialization with non-const not allowed hereIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。Sf        X6E2WQ
        main (){   p = new float[20];  }IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。xm+V,k+g
U

   2、布局new操作符 (placement new): 自己指定空间为placement new提供内存空间,而不是在heap中分配
1Ba'Z        `B)uhkIXPUB技术博客      #include<new>
M!\gJkWuw      char buffer[512];病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理Z pr*?6B*` BD
       ......double *pd1, *pd2;IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。5M:p8m1Nc'v#R
             pd1 = new double[N];IXPUB技术博客
ab#utB9An;?

             pd2 = new (buffer) double[N];
{X hT1U1q3sblog.ixpub.net注:不能用delete [] pd2; 来释放分配的内存,buffer指向的内存是静态的,delete只能用于指向常规new分配的堆        内存(free store)
h!F$Nes        p`0t       IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。.H@*k.?o
mh(Bl-\

/Y}"qL^t ED

Q|:S1f9x4Zvblog.ixpub.net内存泄漏(memory leak)- 被分配的内存再也不能使用了,也无法回收
%PXOT(} x&o*k病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理                                              (new和delete使用不恰当,没有配对使用而产生)IXPUB技术博客Tq{@4[
       如果使用new操作符在自由存储空间上创建变量后,没有调用delete,则即使包含指针的内存
L3ND7V/d0FIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。由于作用域和对象生命周期的原因而被释放,在自由存储区动态分配的变量或结构也将继续存在,病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理9m&xP n;@%Z|8RK:R
这样,将无法访问free store空间中的结构,因为指向这些内存的指针无效,因此这些被分配的内存
MU;@'a6X7Mc
B

将无法使用,从而导致内存泄漏。
I[A
@8r

w|}H:X(Jn w,d;S'\3JIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了
JC#{
X,}9Q Wf/bA

.As]f j检测内存泄漏的关键是要能截获住对分配内存和释放内存的函数的调用。截获住这两个函数,我们就能跟踪每一块内存的生命周期,比如,每当成功的分配一块内存后,就把它的指针加入一个全局的list中;每当释放一块内存,再把它的指针从list中删除。这样,当程序结束的时候,list中剩余的指针就是指向那些没有被释放的内存。这里只是简单的描述了检测内存泄漏的基本原理,详细的算法可以参见Steve Maguire的<<Writing Solid Code>>。 }5_E3_*t        j
如果要检测堆内存的泄漏,那么需要截获住malloc/realloc/free和new/delete就可以了(其实new/delete最终也是用malloc/free的,所以只要截获前面一组即可)。对于其他的泄漏,可以采用类似的方法,截获住相应的分配和释放函数。比如,要检测 BSTR的泄漏,就需要截获SysAllocString/SysFreeString;要检测HMENU的泄漏,就需要截获CreateMenu/ DestroyMenu。(有的资源的分配函数有多个,释放函数只有一个,比如,SysAllocStringLen也可以用来分配BSTR,这时就需要截获多个分配函数) Kyd%y W b0cse|

我们都是只有一只翅膀的天使,无法割舍彼此 grjboy30 发布于2007-12-09 23:35:42
如何用C语言开发DSP嵌入式系统
;F:VWz*p;z8xIXPUB技术博客 N/H!NR DE{-FY
如何用C语言开发DSP嵌入式系统
G)r#K GS#p+J1N)?blog.ixpub.net
|VRg$Wblog.ixpub.net肖宛昂 曾为民病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理CTwk#FKJ CFh
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理7NH)}P
[%JaUF K!L

Xiao,Wanang  Ceng,Weimin
:S-v;WI5_ V1ablog.ixpub.net
#_        A%~b#P
w"cE
(华东交通大学) 肖宛昂 曾为民
qm:`^$],[agk/mU3l
(b        dP(q        J,{7k摘要目前很多嵌入式系统以DSP为核心构建,但是,采用汇编语言开发DSP系统存在开发难度大、开发周期长、维护性差等缺点,应用C语言开发DSP系统是广大嵌入式开发者的迫切要求。有关单片机的C语言开发有相当多的资料可以参考,而DSP系统的C语言开发却很少见。本文以TI公司的DSP器件 TMS320F24X系列为例,讲述怎样用C语言开发一个完整的DSP嵌入式系统。'njp,wX.~,U-o
DMZ#f'F:t
`9^

关键词:嵌入式系统; DSP系统; C语言开发; TMS320F24X系列blog.ixpub.net+z7m:qeK

5u%S8f"w4I7E$O
iIXPUB技术博客
blog.ixpub.net^EDH,QO}]
引言
hD)VMyM.k3OO*l*G病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理!G{:M0au(H}
大家在开发嵌入式产品时首先会想到用控制器的汇编语言编写监控程序,主要原因是:①汇编语言生成的程序对应的二进制代码少,程序执行要比高级语言生成的程序快;②控制器刚问世时,没有相应的高级语言可供使用;③存储器的价格问题和寻址空间的限制。2U V5_.M%Zu0x3t
IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。4Z[2[ E8H"^z?)[F
以上所述问题目前已基本解决,在这就不阐述了。实际情况是:在单片机的应用领域,开发者已开始使用C语言进行开发。大家发现用高级语言开发嵌入式产品是如此轻松,并且C语言程序编译后的二进制代码也非常短小精练。l]:Q/hw*D^

s%|5@6_R病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理目前使用最多的数字信号处理器(DSP)是美国TI公司的TMS320家族,而工业控制上用得最多的又是TMS320F2XX系列。TI公司为每一个DSP 芯片提供了汇编语言和C语言供开发者选用。本人一直使用C语言进行产品开发,而目前很少见到这方面的介绍、所以特撰此文,以TMS320F240为例,向各位同行推荐用C语言开发DSP嵌入式系统。
8Rh        ?kTi
xHK)b'\:K3q u[N"H9jIXPUB技术博客1 DSP的C语言的特殊性
)cC3V
WF        F-h)tIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
blog.ixpub.net#| }@
m-f[,At `

大家在使用51系列C语言时已经注意到,控制器的C语言和PC机上使用的C有一个显著的特点:经常要对硬件操作,程序中有大量针对控制器内部资源进行操作的语句。所以,开发者要明白怎样用C语言来操纵控制器的内部资源,即怎样用C语句操作寄存器和内部存储器等。#I1XJwb4cV$_
IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。$F;fB6V9tX%q-S
举个例子:在51汇编中我们写 MOV A,#20H;汇编程序能够识别A是指累加器;而在51的C程序中我们写ACC=32;,编译器能够识别ACC是指累加器而不是一般的变量。即每一个寄存器都有一个专有名字供开发者使用,它们定义在一个头文件reg51.h中,程序员只需在程序的开始部分用#include“reg51.h”语句将该文件包含进来即可。注意:这些寄存器的名字不能用作变量名。-iO-vW3~z:t
blog.ixpub.netj!PF)rq~%K+`
同样,在TMS320F240的C语言中也有一个头文件C240.H定义各个寄存器的名称,这里摘录几条语句进行介绍。blog.ixpub.netYU-g6?!p

,g7v;F%|2g2|IIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。比如:#define IMR((PORT)0x0004)
t3q4Q.g z wD)L病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
5E9Ws~} EA#C4hIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。#define XINTI_CR((PORT) 0x07070)
5n-C vyh        V9[4Qblog.ixpub.net
-T{G0p[%c&s^IXPUB技术博客IMR、XINT1_CR就对应两个寄存器,实际是寄存器的地址,用高级语言的说法是指针。我们也在程序的开始部分用#include“c240.h”语句将该文件包含进来。这样,在DSP的C语言中使用它们只需在前面加一个星号(*),例如,
5A5LCcc1m7N'x_[ yO"{6y
*IMR=0X1010;/*将十六进制数1010H赋给IMR寄存器*/
a@M6l,mIXPUB技术博客
4q Wr'vE5h4H        JQTo]病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理*XINT1_CR=0X0A0B0;/*将十六进制数A0B0H赋给XINT1_CR寄存器*/
.h.lt"b$}IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
I9r,t5Y4CVRIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。开发者最好将c240.h这个文件打印出来,弄清楚各个寄存器的定义名称。至于不涉及硬件的语法和ANSI语法一样。需要注意的是,有些ANSI标准中的函数在DSP的编译器中不提供,读者可以参考DSP编译器的C语言手册。搞清楚了这些特殊性,由汇编语言转到C语言开发是很容易的事。当然,没有汇编语言编程基础的人同样可以用C语言开发DSP应用系统。
m"y$_/G n)GB!wblog.ixpub.netblog.ixpub.net[4[-`cfG\m v-f+o
有关嵌入式系统的C语言编程可参考《单片机与嵌入式系统应用》2001年1~6期《嵌入式C编程技术》,本文不作讨论。下面只针对以TMS320F240芯片为处理器的嵌入式C语言编程进行阐述,希望能够指导读者进行具体操作。病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理!R#\(I)e'?X/i}0O
%q*eCD|
2 TMS320F240芯片的C语言开发过程IXPUB技术博客D0bs!weS!U
H


w!`KV+Bt"V'M        T/iIXPUB技术博客简单地说,整个过程包括以下5个步骤:病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理A*?4['k#|jhQ
+c;fh trhE
①编辑C语言源程序;
b
f_'["K病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理


r&@!|*dje-q
YIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
②编译源程序(注意编译参数);
/J?M]T/m"e        [jc!lblog.ixpub.netblog.ixpub.net"dEJ
K9N*M$h

③链接目标文件(注意用CMD文件);
tdgD3N L]r病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理blog.ixpub.net'y9s5Cbq
④在线仿真;
GLqw#B+lD
C
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理py:V7|QDd
⑤固化程序。
q"l        Pdx'b病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
:@PEj1K8vV病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理2.1源程序的编辑病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理'Q2F~oI6yvNp

NpoJ4Iblog.ixpub.net可以用任何一个编辑器书写源程序,如EDIT。NOTEPAD等,最后以.C为后缀存盘。源代码可以写在一个C文件中,也可写在多个C文件中;有些预定义变量和函数原型声明可以集中放在一个头文件中。IXPUB技术博客bw
m(mI ]p+?

gct        u$\f
注意事项:不要忘记在C程序的前面用 #in-clude “c240.h”将寄存器定义文件包括进来。,buW'f/f9tV3m/N^@
blog.ixpub.net!k }#c9GO$xOgO
2.2源程序的编译
6wv|Z ~YIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。blog.ixpub.netJ xg9I%V
源程序编辑好后可以用DSPCL编译程序进行编译,生成OBJ文件。
`7Bi'Mo,c,Nblog.ixpub.net病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理$`
Y-L.vg6_        d
mD;]

使用格式:DSPCL源文件名 参数
0Ju{K7C gGF病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
$D        DNW]%g        K"PP J病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理例如: DSPCL EX1.C-V2XX-GK-MNIXPUB技术博客9i xe9~`:\ il*Di
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理}Q*['v/^
常用参数的意义:
%MUp OP/J        S;^*NIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
Bd([8@;uB9QIXPUB技术博客V2XX——表示C编译器选择处理器2XX系列;
k]8G8~
R PS jIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。 [ k\X+Fz8H
wF

GK——保留编译生成的汇编文件(.ASM文件);病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理"vD1}\        o(b

'S"L6Nq
Wz5Z
MN——进行正常优化。
7?`-M        D DC8u6s病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
E5f.U+\}o%CIIXPUB技术博客其它参数请参考DSP编译器的手册。如果有多个源文件分别编译,每一个源文件经编译后产生一个OBJ文件和ASM文件。blog.ixpub.netFKf@}*pJ

qx,Y6^JH$e5],e2.3  目标文件的链接IXPUB技术博客j$`2Jsfj'V/L+f5J

/i|VY&?2.3.1 TI公司的COFF文件格式 Q2~8g I%},k.R-N.k
blog.ixpub.netG*\X3]/^C*_
TI 公司新的汇编器和编译器创建的目标文件采用COFF(Common Object File Format)的目标文件格式。采用COFF格式有利于模块化编程,为管理代码段和目标系统存储器提供更加有力和灵活的方法。基于COFF格式编写汇编程序或C语言程序时,不必为程序代码和变量指定目标地址;为程序编写和程序移植提供了极大的方便。
$[| @?{&Byblog.ixpub.net7J#M]5y/u@
COFF格式的基本思想是:鼓励程序员在用汇编语言或C语言编程时运用代码块和数据块的概念。这种块称为SECTION,是目标文件中的最小单位。
9[t|
ifH4X病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理e
F6q6x)[g

所有的块分为两大类:已初始化块和未初始化块。已初始化块包含程序代码和数据,未初始化块是为未初始化的数据在存储器中的保留块。C编译器对C程序编译后产生已初始化块和未初始化块,已初始化块如.text块、.const块、.cinit块;未初始化块如.bss块。BY2HpN$X
IXPUB技术博客!MJ
{*I%@

举个例子,当程序员用C语句float data[100];定义一个数组时,不需要指定这100个数组元素的具体位置,编译器会在数据区预留所需空间。到链接时链接器会具体定位。

l5o(R@LFX/T8`

mM9aq)X{IXPUB技术博客2.3.2  链接器对块的处理;pL{oz2q.N

^.kto%^7F+BGnGUQ病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理链接器对块的处理有两个功能:其一,将COFF目标文件中的块用来建立程序块和数据块,并将这些块组合成可以被DSP芯片执行的COFF输出模块;其二,链接器为输出块指定存储位置。ps3t*a.HaRG

lHSge(B%_IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。链接器提供两个命令实现上述功能:MEMORY和SECTIONS。MEMORY命令定义目标系统的存储器,程序员可以定义每一块存储器并指定起始地址和长度;SECTIONS命令用来定义输入块的组合和输出块在存储器中的存放位置。若不用MEMORY和SECTIONS命令,链接器采用缺省的分配算法。推荐使用这两个命令,但要注意这两个命令在CMD文件(链接器命令文件)中使用。IXPUB技术博客7A\q]#G&T
fI

blog.ixpub.net+z"TrE7Al
下面分析一个TMS320F240芯片的典型CMD文件。(假设文件名 EX1.CMD。)blog.ixpub.net
S(J7E$V.L


i
jB3T'Er&S;Gm u7wXblog.ixpub.net
(1)CMD文件的构成及其详细解释IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。a;t
geOm%d
H

e} ch$a8GrA
BOOT.OBJ  /*F240的中断矢量表,参见后面的说明*/病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理&Z+V[ke$j:DU6u?
L{

IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。9@3xE,bf4nDSo
EX1.OBJ  /*源程序编译后对应的目标文件*/病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
\r+I/h&_1j

IXPUB技术博客&BHl+}Pz*r5bq
/*若程序有多个目标文件,一块写在这里*/ 病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
x']0r*S*@'r|;sU

IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。:J8OPGe
-STACK 0X400       /*设定系统堆栈*/
j0jN6Y P,u4_
qIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。

V*UNZiblog.ixpub.net-C                /*ROM初始化*/
_ ^;WTb'X
ud'?t6Jo-O EX1.OUT     /*输出的文件名*/
EsN        r]
#^(K        l$E)k$\
b-nblog.ixpub.net
-M  EX1.MAP      /*输出映像文件名*/blog.ixpub.net2l^gj%p%]{a2s

Z+uc9z*?6mM^?-L RTS2XX.LIB    /*涟接RTS2XX.LIB库*/病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理@wJ*H Ka,o
%C.P0J1Sx `+t7^
MEMORY /*MEMORY命令规定系统的存储器配置*/@3O_:w)j/^'k-s(R U

N!|T)hg{ v


9Mw2SwlA%zIXPUB技术博客IXPUB技术博客9lij"a\r        nG
PAGEO:ROM0:origin=0000h,length=003fh病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理*g        o$BEt
|]'I

IXPUB技术博客R8{}        f u}
/*FLASH ROM*/病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理 Z"`"E
HQI

IXPUB技术博客~@e"Ws(K
PAGE0:ROM1:origin=0040h,length=0200hblog.ixpub.net4A#R0T~o        Q+m
blog.ixpub.net&A8svO2TiM
/*FLASH ROM*/IXPUB技术博客{,wx$W}5GwD
C


-P8@{%De~/n5VIXPUB技术博客PAGEO:ROM2:origin=0240h,length=3000h
N
];`JUnblog.ixpub.net

,H/tp6GqhT'OjIXPUB技术博客/*FLASH ROM*/
!|4qpQH3QcZ7D;qblog.ixpub.netm?
z^D Sx
m

PAGE1:RAM_B2:origin=0060h,length=0020h2NIKg:c1G;I,u:@

7JY'XP*h^/Os:u病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理/*内部RAMB2*/
5_U.rs$_
|:fHDIXPUB技术博客
iy&g
Z6cH1A;r

PAGE1:RAM_B1:origin=0300h,length=0100hblog.ixpub.net9dI \(ge:_(vU)b2P

q[_u        ?%V:|q\病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理/*内部RAM B1*/!X-[0S&ZR@

        S]:Rxe-_KPAGE1:RAM_B0:origin=0100h,length=0100hIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。??#BN:_+jU

8J]!N'}lY1WTIXPUB技术博客/*内部RAM B0*/IXPUB技术博客;t~N3^;f?nJ

i)b{C;BT)iYy8FIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。PAGE1:RAM_EX:origin=0d000h,length=2800h病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理:\!Au!k
Qy0t


,w UdTG D;q.P.ablog.ixpub.net/*外部扩展RAM*/IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。 P
@AU^-xtpi

病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理I;k? d a1D2f~
}
:O        L$\NgvIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。IXPUB技术博客 |!F.yD!Cc`1V6k
SECTIONS  /*SECTIONS命令规定了程序中块的具体分配方法*/IXPUB技术博客#PaCDR2u o
blog.ixpub.netZG0utG/`fv
{

j1V(D5k1Aw t!gL病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理4L]&P-KAc,I
.vectors:load=ROM0  /*规定矢量表的存放位置*/
1l.IVhMR_c;ExkIXPUB技术博客2_N `DjlIC
.cinit:load=rom1   /*C初始化表的存放位置*/
E [3V.Y$db病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理blog.ixpub.net*V vgFwy?of
  .text:    load=ROM2          /*系统程序的存放位置*/
}b_^/FD'R病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理l,pqai'A;D
.bSS   load=RAM_B0    /*未初始化数据的存放位置*/
5V(ppC
S
I/J1C-?7qHIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理Ya+GzR*XT0W
.const  load=RAM_B1   *已初始化数据的存放位置*/病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理w(@5`'ek/b2]9`
q;A!m:nH])}1P

M!n)g
R4j$dBw[8EIXPUB技术博客
S7x1` Z{
(2)TMS320F240链接时所需的中断矢量表文件0TFO&~n
xf&q*B

病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理v@\        cY*O
TMS320F240的目标文件在链接时要用到中断矢量表。中断矢量表用汇编语言编写,和具体的DSP芯片有关。假设TMS320F240的中断矢量表对应的汇编程序为BOOT.ASM,汇编后的文件名为BOOT.OBJ。
x0R;yeD^+\7wIXPUB技术博客
F(}*^l,_O"P5f u病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理下面是一个典型的矢量表文件。(假设程序名为BOOT.ASM。)IXPUB技术博客9\wd}7PN P
IXPUB技术博客3f,LJE-m6nv
.port /*定义中断函数的名字*/
C"} W4P#d0Msx病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理3v&z+pW2D7r*h
.globl_c_int0 /*中断0对应的函数名*/IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。"^ yWl{

"K jH*}&h D病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理.globl_c_int1    /*中断1对应的函数名,以下语句的意义相同*/blog.ixpub.net-l^[Mg|

~u&L3K#A[IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。.globl_c_int2   /*可以将中断函数名看作中断入口地址*/IXPUB技术博客D9].]^Z/C,u;`
V6M

IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。^9{] [-fz1T$D(w
.globl_c_int3    /*矢量表的存放不需程序员干预*/IXPUB技术博客2jU'?Xs
Y-g:K

3B2`9o U.|X
.globl_c_int4IXPUB技术博客7?4eO:k5~.D

?
XX6\S|7gn0nIXPUB技术博客
.globl_c_int5blog.ixpub.net+_t3[x5f_5D
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理/|(G3y]ez@!E
.globl_c_int6
-S9By        n1OS:g
N g_EU.~#hhblog.ixpub.net.globl_c_int7
,B
auPFRE._病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。        K}$Ge0R${ F+a/~ {
.globl_c_int8
3_h,Q!h%iG T病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理2G5Wq
eq t2A"Y1[~

·sect“.vectors”/*用.sect命令自定义一个块,用于存放中断矢量表*/IXPUB技术博客zn x!t~Dqt

tVDr'h)Y['pqwdIXPUB技术博客RSVECT B  _c_int0    /*中断0发生后,程序的跳转目的地址*/
|        v,}#p[!D_x
#@
r AE$MS7Ei
FP        Q病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理
INT1  B  _c_int1 /*中断1发生后,则跳到c_int1()函数处*/病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理'Rt @)f1G
:Gz
qf4G6U
f

INT2  B  _c_int2 /*意义同上,下同*/Yrn*g*p9v-C
IXPUB技术博客(_!a/{{U;|(O
INT3 B  _c_int3病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理!AN[ {h/d/Yl
j

$HL"g,L*P
K

INT4 B  _c_int4IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。7a{5d2o J
blog.ixpub.net*ih0kd)r
INT5 B  _c_int5blog.ixpub.net]}.]'I+Lsu
Lo

IXPUB技术博客2l4bEy\iq        H!q;K
INT6 B  _c_int6病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理[9i3_G,Z

{z+e)`dg9xIXPUB技术博客用汇编器汇编该程序,命令形式:DSPABOOT.ASM-V2XX生成BOOT.OBJ文件供链接器使用。这样,就可以按如下形式在C源程序中编写中断函数:blog.ixpub.net5m \,|$k6SY5ci

"_Rq] X4Pk{voidc_inx() /*x为1~8中之一*/病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理 m2Yk(pAr2U        TV:Sp
.Y        F;Ft]@
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理$i^NN
Fx
Q9C


JP%u2z-S        J中断程序的C语句系列;blog.ixpub.net/I5y~(R'a.HKW
0t+s'}R*S8X:TH
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理rRElVh"O2j

F&qprWx9kNblog.ixpub.net注意事项:c_int0()是系统入口函数,用户不能编写。
-[_m~X t V!h-o
bfAAHt

经过上面对命令文件(CMD文件)和中断矢量表的介绍,接下来可以链接命令文件来生成所需要的OUT文件供DSP芯片执行或进行软仿真。
_-u](X0S0kop`m\病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理 V,i)A)Ww3?
\:i

命令形式:DSPLNK CMD文件名
$Z.E:O@7pj
-V0awAU c0u病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理例如:DSPLNK EX1.CMD
!F/Y8}.}-go [kblog.ixpub.net
$q2q;Q1Be;@,oa另一种情况是,不使用CMD文件,使用缺省配置,简单介绍如下:c0A$EF;g+k+Y+n$U'F:_
blog.ixpub.netG,ty5KS*w        q
命令形式:DSPLNK OBJ文件名参数
C$hE xLv1CRcwIXPUB技术博客
C7ga,B3K3zblog.ixpub.net例如:DSPLNK EX1.OBJ BOOT.OBJ-O XX1.OUT-M XX1.MAP
L8HXL\IXPUB技术博客
7K7e5|kFi        F:C/P以上三步可以用图1描述。IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。T5q7\/|A+c7m7rv

gh']
aF:Q病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理

#Ff_#x?#zblog.ixpub.net
DF0XI L~o2.4程序的仿真
v-c3cM-NIXPUB技术博客blog.ixpub.net$i:DAJ
ep

用EMURST仿真器复位命令
q
Rv%O-b]
IXPUB技术博客J&i^ V${B
EMU2XXW EX1.OUTIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。-e5_W|W3s;u{c
病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理$]0|*|s&]3_
载入COFF格式的二进制代码仿真运行。有关调试器的使用略。
*jy        v&@-d/Pz7a%Xv病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理blog.ixpub.netK'z]b2a"rI;xQj+w
2.5程序的固化
uH6B_:K8\6?IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。$b DY%qsP u|e
程序仿真运行正确后,需要固化到Flash ROM中。TMS320F240内部有16K字的Flash ROM可以用来固化程序,而不需要外扩EPROM(程序不大于16K字的情况下)。
Y3OrPj4pK&d}\SpL.~        J*X-e
TI公司提供有固化程序的软件,可以通过仿真器经JTAG口将程序写入芯片内、目前发展了一种新的固化技术,可以通过串口写入DSP芯片,特别适合于现场调试。下面介绍通过JTAG口的固化方法。病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理5XxswP!F|9}

#t#B
o$G3icnLIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
首先用EMURST命令复位调试器,然后执行下面三个批处理文件。blog.ixpub.netg#K6OM/bi~"mj

#H$`"N%B/b x9goIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。第一步,执行BCO.BAT批处理文件,将FlashROM清除(CLEAR),使全为0。
0@
Gm
lA

u4F6gp-Rk!cQIXPUB技术博客第二步,执行BE0.BAT批处理文件,将FlashROM擦除(ERASE),使全为1。
6L;]&Vr%r7XD
?!?7q0t p2M mM-CdIXPUB技术博客(以上两步不需要修改软件包中自带的这两个BAT文件。)
6uIa$l^(\.q PIXPUB技术博客
x;|~-\8E第三步,执行BP16K.BAT批处理文件,将自己的OUT文件写入到DSP内部的Flash ROM中。执行这一步之前,要先修改BP16K,BAT,将待写入的OUT文件替换成自己的OUT文件。下面看一下这个批处理文件。假设软件包的安装目录为C:\DSP,该目录下有一个子目录SRC。 CRvH.?\,b

        l&FVoA!y
E?
OB
prg2xx-p240-m0x0006-w6src\c2xx_bpx.out要写入的OUT文件 |        bK1v(P(QK`@


UEMl]        nblog.ixpub.net
如果要将EX1.OUT写入到DSP的Flash中,则执行下面的命令:!S$P%vp
SNE}Pq

oY;e/v!i
s6D

prg2xx-p240-m0x0006-w6src\c2xx_bpX.out c:\dsp\EX1.out
8iG!`
mWE#cV;?IXPUB技术博客
blog.ixpub.net;|F!Vk4GgF'`],vR
经过以上步骤即完成了程序固化,可以将系统放到现场实验了。
M`        y ete*Mblog.ixpub.net
?&Js)tZ2QNN病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理注意:固化程序时,CPU一定要工作在20MHz的频率下。在SRC子目录下有一个配置文件C240_CFG.I,读者可以根据程序说明并结合自己系统的外部晶振频率将CPU的工作频率设为20MHz(写入时的频率)。
$o        s NJ|$\8hIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。

o2| P H.U~4v5`K
本文以TMS320F240的开发为例,介绍了怎样用C语言开发DSP系统的全过程。希望对读者会有所启发和帮助。2D-hP!k0k!?G9T

Sm*AlLD:gblog.ixpub.net参考文献
j;mPp0c `IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
/B-N*R.^N `3nZ,Cblog.ixpub.net[1]Texas Instruments. TMS320F/C24XDSP Con-trollers Peripheral Library And Specific Devive.1999

`U;\K`9\

)o3A]E%Jo+{IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。[2]Texas Instrument.TMS320C2X/C5X OptimizingC Compiler User’s Guide.1994
H0WJ+ByZw+_blog.ixpub.netIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
Z4u"a$|z-Vm4_ B

[3]张雄伟.DSP芯片的原理与开发应用.北京:电子工业出版社,  2001

J NJzb X:@
H"eZ|&n:X5`U,e
[4]章云.DSP控制器及其应用.北京:机械工业出版社, 2001blog.ixpub.net
es1F.j3?T


(f        m _VH
U`$P        XIXPUB技术博客
(华东交通大学) 肖宛昂 曾为民
ynu7k_9PihIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。
(xCS,hE;I+u"q
我们都是只有一只翅膀的天使,无法割舍彼此 grjboy30 发布于2007-12-09 23:36:29
Linux下C语言编程
.gf%|:\^7Ablog.ixpub.net
R.q2\cJcSblog.ixpub.net
<!--  [/td][td][/td][/tr][/table]在Linux 开发C语言需要这些IDE文本编辑器:']pB5M!]3Z        u
vi IXPUB技术博客T*PN%sK2c
C编译器: gcc
        [1T%B9L7eOC++编译器: g++ 病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理X[ng{e6px
项目控制: make hYk.nH^
版本控制: cvs
Xhif"qCi        rOIXPUB技术博客Shell: bash
;J P.QF"Rn5J5|IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。我们假设你知道基本的UNIX系统使用方法。如果你对此一无所知, blog.ixpub.netO{del\
你可以先阅读一些相应的参考资料。也可以通过在命令行敲入
W Z2pM4F)QIXPUB技术博客man <需要帮助的内容> 获得相关的帮助信息,例如:man bash IXPUB技术博客D2iFtf
可获得与shell bash相关的帮助信息。 IXPUB技术博客+x8]Ax*b
j;n

同时我们也假设你已经在你的LINUX系统上安装了开发环境。当你
.p%hgHXlblog.ixpub.net在安装RED HAT LINUX的过程中你可以选择安装开发工具包。如果
Ex$GG!i|e你没有,你可以现在添加所需的开发工具包。(具体方法参见注释1)
A DqHCK!j1HN/dWIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。现在,开始第一个LINUX项目。
{8A7h]
Ti yd1U1b0Q6S
x        JHBS*D[P1r8|"r
注释1:怎样添加开发工具包?
6@5z4_'{|\T{/E&m病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理在系统安装完成后,有很多种方法来添加开发工具包。建议仅
R4s2Ti Ne:~yIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。安装所需的RPM文件。你必须以ROOT登录,并进入RED HAT LINUX IXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。        p        E+z)V"y        Yks
}2B

CD-ROM光碟的RedHat/RPMS目录。接着敲入以下命令:
wTnfRrpm -i *egcs*
N.Y:j#B%QIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。rpm -i *glibc-devel* nUi%Vr;sFL*I4n
rpm -i *cvs* IXPUB技术博客q'oo`4Oo1l
rpm -i *make*
Vx:N
y.erhJ@
rpm -i *gdb*
Q9nE!M&f Y,SOIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。blog.ixpub.netV a(_/mF2\8O

我们都是只有一只翅膀的天使,无法割舍彼此 grjboy30 发布于2007-12-09 23:37:00
学习arm的话先看哪本书? 病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理6fMD|SU

S}s/{,{V*f:}.E
L xblog.ixpub.net

S"k"Q&v8a+Nblog.ixpub.net在有C语言的基础情况下,可以看IXPUB技术博客(b.P4S
[ s*{$Le
S

数据手册,unix,uclinux操作系统
LsX P{-m"R Ri;coIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。LPC2214,ADS这样的平台
4X*c0Wf'`blog.ixpub.net
我们都是只有一只翅膀的天使,无法割舍彼此 grjboy30 发布于2007-12-09 23:37:30
C++初学者应该关心的优秀图书一览 e6|{ YK1vn

#uISj-CP8M8Kblog.ixpub.net
<!--  [/td][td][/td][/tr][/table]1.The C++ Programming Lanuage, by Bjarne Stroustrup, Speical 3rd edition,Addison Wesley   
#F;rNp4b&w5M        ta)TIXPUB技术社区,交流各种操作系统、服务器、网管技术,网管资源下载,企业网管的天堂,网吧网管的乐园。`Z,W\Jlj
  这是C++创始人B教主之力作,描述C++语言之经典一书。这本书第三版是97年出的,B教主老人家给这本书开了个网页http://www.research.att.com/~bs/3rd.html,2000年,又出了个Special 3rd edition,和97年的第三版相比,多了两个Appendix,这两章在网页上可以下载,除此之外,还改了1000多个小错误。我说B教主你老人家小错误犯的也太多了吧,为什么不像Knuth老人家学习学习,人家多严谨那。要把这本书当参考手册,还得去买2000年那个版本的。病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理\2Tq%~p na!?
  B教主总共写了三本书,The C++ Programming Language,The Design and Evolution of C++,The Annotated C++ Reference Manual,加上翻译本合起来卖了上百万多份那,厉害厉害。
%q4D!mT `6E9j  2. The C++ Standard, Wiley,ISBN:0-470-84674-7blog.ixpub.netxs"`!mT
I

  病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理&@.B{$o#C
  这本书是C++语言标准,C++的语法太繁琐,所以有些吃不准的地方,还是得翻这本书。厚厚一本书,700多页,但是用的纸非常轻,拿起来不沉。就是装订的不好,书脊有点松松散散,让人担心看多了某天书会散架。IXPUB技术博客&U!i5U~#J.\/\
  3. C++ Templates, The Complete Guide,by Vandevoorde, Josuttis,Addison Wesley, ISBN:0-201-73484-2blog.ixpub.netLg_]V(~%gy
  病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理yxx;mZ+v B
~v

  之所以这么重视这本书,是因为自1987年以来,C++的开发重点就不是面向对象了,而是templates, static polymorphism, generic programming, multiparadigm programming. 掌握好了,C++的template的威力是巨大的。blog.ixpub.net.@#ia6G:mu
  这本书的文笔非常简洁易懂,书的排版也很好,读起来非常舒服。病毒,木马,下载,服务器,操作系统,数据库,路由器,交换机,防火墙,网络工程,布线,网络编程,游戏,网络基础,硬件,网页制作,网管,网管论坛,网管软件,网管下载,网管技术,网络技术,网管社区,网管博客,企业网管,网吧网管,网吧管理+V{zo&@Y\H
  4. The C++ Standard Library,A Tutorial and Reference,by Josuttis,Addison Wesley,ISBN: 0-201-37926-0
-p#~8q.ZQ1@(j+u$X  IXPUB技术博客g|3A4roDaF
  这本书的作者,也是上本书的作者之一,写的非常易懂。可能因为作者是个德国人,英语非母语者写的英语最好懂。+p ]\L+K\ x NSG
  个人认为是讲STL最好的一本书,C++的标准库全是用template设计的,没多少OO的影子。任何一个学C++的,必须学习STL,学习STL,这本书最好.
9F,C
Ut!u&HH
  5.Modern C++ Design,Generic Programming and Design Patterns Applied, by Andrei Alexandrescu,Addison Wesley, ISBN: 0-201-70431-5
gnej2_"_&t  
/e,p%k8lNL(K%Ai+[Vm  这本书用了很多玄之又玄的技术,读起来很吃力,有不少技术在C++ Templates The Complete Guide一书中都讲过,建议还是先读C++ Templates。作者的名气是很大的,一个极为优秀的程序员,