音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

51的C程序能嵌套幾層?

作者:aceice 欄目:單片機(jī)
51的C程序能嵌套幾層?
嵌套4層有問題嗎?

2樓: >>參與討論
ht_chb
4層沒問題
 
3樓: >>參與討論
gyt
沒有限制
不要弄到?jīng)]有RAM用就行。

4樓: >>參與討論
xujunchen
無限制,只與堆棧大小有關(guān)
 
5樓: >>參與討論
maxking
我試過3層不行了。
就是main調(diào)用函數(shù),函數(shù)里面再調(diào)用函數(shù)。

6樓: >>參與討論
zhanglizcl

應(yīng)該不受限制,你可以試試看嘛

7樓: >>參與討論
后學(xué)
堆棧大小,~~
 
8樓: >>參與討論
xiangliwei
嵌套
   我們都知道的,作為一個(gè)程序來說他的嵌套的層數(shù)的多少是不重要的。關(guān)鍵在于你的算法要對(duì)。因此只要你的算法正確的話,嵌套的層數(shù)的多少不影響!

9樓: >>參與討論
aceice
深層次的嵌套之后發(fā)生了中斷或者低優(yōu)先中斷中嵌套高優(yōu)先中斷
低優(yōu)先中斷中調(diào)用了一個(gè)函數(shù),運(yùn)行時(shí)發(fā)生高優(yōu)先中斷,高優(yōu)先中斷中也調(diào)用了一個(gè)函數(shù)
會(huì)有問題嗎?


10樓: >>參與討論
gyt
同一個(gè)函數(shù)?
 
11樓: >>參與討論
32768Hz
如上



* - 本貼最后修改時(shí)間:2006-9-1 11:33:15 修改者:32768HZ

12樓: >>參與討論
mxh0506
先把函數(shù)調(diào)用時(shí)發(fā)生了什么搞明白吧
 
13樓: >>參與討論
aceice
不同的函數(shù)
 
14樓: >>參與討論
gfs0521
只與堆棧大小有關(guān)
 
15樓: >>參與討論
fluke56512
和堆棧有關(guān)系~
和堆棧有關(guān)系~
52的話嵌套可一多一些

16樓: >>參與討論
xc_cz
4層可能有問題,也有可能沒問題
這要看你調(diào)用的函數(shù)里需要多少堆棧。因此為了避免堆棧溢出,同屬于一層的函數(shù)之間不得相互調(diào)用。

17樓: >>參與討論
starlite_jason
中斷最好不要調(diào)用什么函數(shù)
除非是可重入的函數(shù),或者沒有其他地方調(diào)用,對(duì)于實(shí)時(shí)性要求不高的,完全沒有必要在中斷做很多事情。

18樓: >>參與討論
gyt
可以
不同的函數(shù),或者說相互沒有數(shù)據(jù)上的聯(lián)系的函數(shù),可以。

19樓: >>參與討論
yuchun0607
應(yīng)該和堆棧大小有關(guān)吧
 
20樓: >>參與討論
linwei1234
51中,中斷只能嵌套一次!最好別調(diào)別的程序!
 
21樓: >>參與討論
cgkdxx
我試過
不能調(diào)同一個(gè)函數(shù),其他嵌套如果不用堆棧隨便用RAM不沖突就行了

22樓: >>參與討論
hongjs
沒有限制
 
23樓: >>參與討論
ljxh401
我的見解
1 中斷跟外部程序都調(diào)用同一個(gè)程序是不行的,可能跟中斷的ram沖突
2 遞歸調(diào)用好像也不可以的 

24樓: >>參與討論
korfi
有限制的
keil是有限制的,具體層數(shù)在keil使用說明中有。
順便說明一下,C51的臨時(shí)變量并非都是用堆棧保存的,對(duì)于少量的是有寄存器或堆棧方式,多了馬上就給你分配到RAM地址中去了,這跟PC或其它單片機(jī)的有很大區(qū)別。注意了,否則光是子函數(shù)的臨時(shí)變量就把你有限從存儲(chǔ)器耗光。

25樓: >>參與討論
john_light
我終于被論壇這種你一言我一語給嚇出汗來
有興趣的同學(xué)請(qǐng)打開書\Keil\C51\HLP\C51.pdf(Cx51 Compiler Optimizing C Compiler and Library Reference for Classic and Extended 8051 Microcontrollers),翻到附錄Appendix D. Compiler Limits,我這里是Page 371。

當(dāng)然,沒有書的同學(xué)請(qǐng)參觀以下聯(lián)結(jié):
http://www.keil.com/support/man/docs/c51/c51_xd.htm

The Cx51 Compiler embodies some known limitations that are listed below. For the most PART, there are no limits with respect to components of the C language; for example, you may specify an unlimited NUMBER of symbols or NUMBER of case statements in a SWITCH block. If there is enough address space, several thousand symbols could be defined.

    * A maximum of 19 levels of indirection (access modifiers) to any STANDARD data type are supported. This includes array descriptors, indirection operators, and function descriptors.
    * Preprocessor symbols may be up to 255 characters LONG. All 255 characters are significant. Preprocessor symbols are case sensitive.
    * Names may be up to 256 characters LONG. The C language provides for case sensitivity in regard to function and variable NAMEs. However, for compatibility reasons, all NAMEs in the object file appear in capital letters. It is therefore irrelevant if an external object NAME within the source program is written in capital or small letters.
    * The maximum NUMBER of case statements in a SWITCH block is not fixed. Limits are imposed ONLY by the available MEMORY size and the maximum size of individual functions.
    * The maximum NUMBER of nested function calls in an invocation parameter list is 10.
    * The maximum NUMBER of nested include files is 9. This VALUE is independent of list files, preprocessor files, or whether or not an object file is to be generated.
    * The maximum depth of directives for conditional compilation is 20. This is a preprocessor limitation.
    * Instruction blocks ({...}) may be nested up to 15 levels DEEP.
    * Macros may be nested up to 8 levels DEEP.
    * A maximum of 32 parameters may be passed in a macro or function call.
    * The maximum length of a LINE or a macro definition is 65,535 characters. Even after a macro expansion, the result may not exceed 65,535 characters.


26樓: >>參與討論
xcxxyc
有影響
 我的一個(gè)程序,嵌套6層編譯能通過,但運(yùn)行就出錯(cuò),后來我減少一層嵌套,就行了。不過不一定準(zhǔn)確,可能和編譯器有關(guān)。

27樓: >>參與討論
notwen
mcu
真沒有去看這個(gè)

28樓: >>參與討論
ST_ARM
一般不要超過8層。
51中Call一個(gè)函數(shù)時(shí),根據(jù)需要,有些數(shù)據(jù)要壓棧:
ACC、B、PC(兩個(gè)RAM)、PSW(有時(shí)還有DPH、DPL),就占用5~7個(gè)RAM,8個(gè)嵌套就要40~56個(gè)RAM,同時(shí)MS51可以運(yùn)行8個(gè)中斷嵌套,每個(gè)中斷嵌套時(shí)5~7個(gè)RAM,同樣要40~56個(gè)RAM則有可能出現(xiàn)使用RAM為112個(gè),128減去8(R0~R7),為120,就剩下8個(gè)RAM可以使用了。

29樓: >>參與討論
yzqok
和堆棧設(shè)置有關(guān).
 
30樓: >>參與討論
linwei1234
john_light大歌歌看不懂哦!翻譯哈嘛?
 
31樓: >>參與討論
ccf_2004
無限制
只要堆棧,能夠放下n級(jí)現(xiàn)場(chǎng)保護(hù)和返回地址

32樓: >>參與討論
將軍令
51的堆棧指針只有8bit
所以理論最多是128層
不過51內(nèi)部的ram不可能全部給你用
所以,實(shí)際的層次會(huì)遠(yuǎn)遠(yuǎn)小于這個(gè)數(shù)字
不過,10層應(yīng)該是沒有問題的

33樓: >>參與討論
computer00
有些增強(qiáng)型的51堆棧指針不止8bits
 
34樓: >>參與討論
autuy123
最多是7層
建議不要超過7層,要是在多可能就會(huì)出現(xiàn)運(yùn)算錯(cuò)誤。

35樓: >>參與討論
rtfsc
哈哈!
john_light 現(xiàn)在估計(jì)更汗了,都貼出來了,還沒人看。

36樓: >>參與討論
lichuanfa
KK
和內(nèi)部RAM的使用情況有關(guān)

37樓: >>參與討論
kingsr
**
內(nèi)存不夠用,還是少套好.

38樓: >>參與討論
snowflyin
哎~~~~~~~~~~~~~~~~~~~~
于堆棧沒有關(guān)系,循環(huán)啊,老大,除非你循環(huán)中有函數(shù),和中斷什么東東

39樓: >>參與討論
festool
同意lichuanfa的意見
和內(nèi)部RAM使用情況有關(guān),5層-10沒問題.

40樓: >>參與討論
jjfzfj
放心
無限制

41樓: >>參與討論
hhrfjz
和你的RAM有關(guān)!
以前用51的時(shí)候也感覺到這個(gè)問題,有時(shí)候正常有時(shí)候就出錯(cuò),后來改用AVR后就好了,畢竟是1K的SRAM阿!資源豐富!

42樓: >>參與討論
陳雙君
好像最多是8層
好像最多是8層

43樓: >>參與討論
zhuhai2004
軟件仿真看到的是7層的都有、可能是DATA;RAM留多了
 
44樓: >>參與討論
jsnjxu
沒問題
沒問題

45樓: >>參與討論
fatRonaldo
C51編譯器里規(guī)定最大可以9層的,實(shí)際的和單片機(jī)資源有關(guān)
 
46樓: >>參與討論
395908616
51中,中斷只有優(yōu)先級(jí)之分,而且不能調(diào)用別的函數(shù)
 
47樓: >>參與討論
liuliyong5
沒有注意過,也請(qǐng)大家指導(dǎo)
這個(gè)問題我到是沒有注意過,不過我想是無限制的,只要你的函數(shù)結(jié)構(gòu)好

48樓: >>參與討論
ahead
跟編譯器有一定關(guān)系
有些C語言編譯器對(duì)嵌套的深度有一定的限制,但并不苛刻。由于片內(nèi)RAM數(shù)量很少,而每次調(diào)用子程序都需要一定量的RAM進(jìn)行現(xiàn)場(chǎng)保護(hù),所以C51無法進(jìn)行多層次的函數(shù)嵌套的調(diào)用。如果不傳遞參數(shù),那么5到10層的嵌套是安全的。

49樓: >>參與討論
qguangdong
qguangdong
和堆棧的深度有關(guān)

50樓: >>參與討論
champtek
迭帶算法多少層?
 
51樓: >>參與討論
bl20020825
嵌套
嵌套跟ram關(guān)系很大,嵌套的關(guān)鍵就是不斷保護(hù)運(yùn)行環(huán)境,在keil中還必須定義為可重入!一談到保護(hù)環(huán)境,必然涉及到堆棧的容量,一旦你嵌套要求的堆棧超過了RAM所能支持的范圍,那嵌套必然出錯(cuò)!

52樓: >>參與討論
bbluesky
侃單片機(jī)
更 RAM的大小有關(guān),主要看看你的堆棧有多大

53樓: >>參與討論
welwelcome
中斷嵌套
中斷最好不要調(diào)用其他函數(shù)...可以直接寫里面啊

54樓: >>參與討論
鑫超
無限制
無限制

55樓: >>參與討論
wyjsjh
跟你堆棧設(shè)置有關(guān)
 
56樓: >>參與討論
sanantonio
怎么大家說法這么多啊
 
57樓: >>參與討論
fen_mo
10層
C51編譯器對(duì)于函數(shù)嵌套調(diào)用的限制是最多10層。
電子工業(yè)出版社 《單片機(jī)高級(jí)語言C51應(yīng)用程序設(shè)計(jì)》 徐愛鈞 彭秀華著 page174

58樓: >>參與討論
mxinfa
16層,印象中在哪本書上看到過
 
59樓: >>參與討論
xupengyj
haha
我做的51單片機(jī)采集與通信系統(tǒng)最多的一次嵌套了5層,應(yīng)該是沒有限制的,除非你的ram用光了.

60樓: >>參與討論
pian_zhou
建議如果不是必須,不要做那么多的嵌套!!
 
61樓: >>參與討論
wjc3k
人有多大膽,地有多大產(chǎn)。
 
62樓: >>參與討論
hihi10
步進(jìn)電機(jī)的控制
     請(qǐng)大蝦幫我看看這個(gè)程序.我在軟件上仿真有問題.但我燒到89C51中去,
就不能產(chǎn)生中斷了,幫我看看..
還想問一下,用一個(gè)開關(guān)控制步過電機(jī)的開與關(guān),怎么搞.先謝了解
         ORG 0000H
         LJMP MAIN
       ORG 0013H;檢測(cè)中斷入口
         LJMP SEVR
       ORG 0003H;工作中斷入口
         LJMP WORK
         ORG 001BH
         LJMP HOU;復(fù)位中斷入口
         ORG  30H
MAIN : MOV A,#11H
       MOV P2,A
       MOV R3,#00H;開與關(guān)的判別
       MOV TMOD,#61H;定時(shí)器控制方式
       MOV TH0,#0ECH
       MOV TL0,#78H
       MOV TH1,#0FFH
       MOV TL1,#0FFH
       SETB TR1
       mov ie,#8dh
    /* ; LCALL JOB
       NOP
       NOP
   L:  JB F0,JOB
   L1:JNB P3.5,WORK
       JNB F0,L1
      ;SETB EA*/
JOB:      ;SETB EX0
       MOV P1,#01H
       LCALL DELAY500
       LCALL CHERK
       mov P1,#03H
       lcall DELAY500
       LCALL CHERK
       MOV P1,#02H
       LCALL DELAY500
       LCALL CHERK
       MOV P1,#06H
       LCALL DELAY500
       LCALL CHERK
       MOV P1,#04H
       LCALL DELAY500
       LCALL CHERK
       MOV P1,#0CH
       LCALL DELAY500
       LCALL CHERK
       MOV P1,#08H
       LCALL DELAY500
       LCALL CHERK
       MOV P1,#09H
       LCALL DELAY500
       LCALL CHERK
       SJMP JOB
DELAY500:SETB TR0
         JNB TF0,$
         CLR TF0
         MOV TH0,#0ECH
         MOV TL0,#78H
         RET
CHERK:NOP
      JNB P2.4,LOOP
     ; jnb p3.3,SEVR
    ; jnb p3.5,WORK
      RET
LOOP:NOP
     LCALL DELAY10
     JB P2.4,GO
     SETB P2.1
   /*JNB P3.3,L2
  L2:LCALL DELAY10
     JB P3.3,SEVR
     NOP*/
    LCALL DELAY10
     CLR P2.1
  GO:RET
SEVR:SETB P2.3
     LCALL DELAY10
      CLR P2.3
      SETB EA
      RETI
WORK:NOP
     nop
     nop
     nop
     nop
    nop;
    /* nop
     nop
     nop
     nop
     nop
     nop
     nop
*/

     CLR TR0
    ;LCALL DELAY10
    ; JB P3.2,GO1
     INC R3
     MOV A,R3
     CJNE A,#01H,ST
    ; SETB P2.0
    ;LCALL DELAY10
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
   ; nop;;;;
    ;nop
    ;nop
    ;nop
    ;nop
    ;nop



     SETB F0
    setb EA
    SETB TR0
    RETI
  ST:; clr ea
     ; CLR TR0
    MOV R3,#00H
    ; CLR P2.0
     MOV P1,#0FFH
   ; lcall DELAY10
  nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
nop
nop
nop
     JB P3.2,$
   ; LCALL DELAY10
     CLR F0
    SETB EA
    SETB TR0
     RETI

DELAY10:MOV R2,#0AH
   DL2: MOV R4,#0FAH
   DL1:NOP
       NOP
       DJNZ R1,DL1
       DJNZ R0,DL2
       RET
HOU:PUSH ACC
     SETB RS0
    ; CLR P2.0
     clr tr0
     jb F0,rel
     MOV P1,#0FFH
     JB P3.2,$
    rel: CLR RS0
     POP ACC
     SETB EA
     RETI

     END
        
         

63樓: >>參與討論
匯展科技
沒限制
應(yīng)沒限制

64樓: >>參與討論
eddy836
可重入函數(shù)
定義它們?yōu)榭芍厝牒瘮?shù)就可以 了

65樓: >>參與討論
dwq175
由乘余RAM限制
 
66樓: >>參與討論
伍笛

做個(gè)遞歸調(diào)用試試,不要層數(shù)太多,如果用51單片機(jī)最好不要進(jìn)行這種嵌套層數(shù)太多。

67樓: >>參與討論
程序人生
沒聽說有層數(shù)限制的
沒聽說有層數(shù)限制的

68樓: >>參與討論
li_mu
取決于硬件定義和編譯器允許的值
 
69樓: >>參與討論
bigplane
看你的stack開多大啦
看你的stack開多大啦

70樓: >>參與討論
lanlimin
51的C程序能嵌套幾層?
同過更改堆棧,嵌套5~6層沒問題,前提不溢出!

71樓: >>參與討論
mzy202
這么幼稚的問題
這么幼稚的問題,告訴你,只要你的程序正確,多少層都沒問題,RAM夠就行!

72樓: >>參與討論
dyidtm
多少層沒問題,我還最多用18個(gè)RAM呢?
 
73樓: >>參與討論
john_light
傳說中比爾曾放言
640K.html">640K內(nèi)存可以運(yùn)行世界上所有可能的程序
所以大家現(xiàn)在所用的電腦的內(nèi)存最大只有640K字節(jié)

74樓: >>參與討論
cuitzsk
應(yīng)該和堆棧有關(guān)系
 
75樓: >>參與討論
wudeyi
頂一下
 

* - 本貼最后修改時(shí)間:2006-10-9 9:40:04 修改者:wudeyi

76樓: >>參與討論
yuands
堆棧不溢出就可以
 
77樓: >>參與討論
tdtech
???


78樓: >>參與討論
dongshan
看我發(fā)的帖子.
http://www.daxia.com/bbs/searchhistory.asp?sele=1&word=51編譯器&word1=

79樓: >>參與討論
dongshan
還是帖上吧
keil cx51編譯器的一些限制

            dongshan翻譯自 keil c51手冊(cè)

1.對(duì)任何標(biāo)準(zhǔn)類型數(shù)據(jù)的訪問,其間接訪問級(jí)數(shù)最大為19級(jí)。這包括數(shù)組下標(biāo),間接操作符等

2.名稱長度最長不超過256字符。C語言中函數(shù)及變量名稱區(qū)分大小寫。但是出于兼容的原因,所
有在目標(biāo)文件(object file)中的名字都以大寫字母出現(xiàn),因此在程序中引用一個(gè)外部符號(hào)名稱時(shí)
大小寫無關(guān)

3.swtich語句的case的數(shù)量并沒有限定,但是受有效的內(nèi)存空間及單個(gè)函數(shù)所允許最大的長度限定。

4.函數(shù)參數(shù)列表中的函數(shù)的嵌套調(diào)用層數(shù)最多為10層

5.包含文件最多可嵌套9層

6.條件預(yù)處理最多20層,這是預(yù)處理器的限制

7.instruction block(即{})最多可嵌套15層

8.宏可嵌套8層

9.最多可向宏或函數(shù)傳遞32個(gè)參數(shù)

10.一行或一個(gè)宏最多只能有2000個(gè)字符,即使在宏擴(kuò)展后也不能超過2000字符

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
想要自己制作51單片機(jī)仿真器的朋友來看看!
一個(gè)C51的問題,循環(huán)跳轉(zhuǎn)
和51程序兼容的單片機(jī)速度問題
請(qǐng)問,在89C51中,我不想讓程序一運(yùn)行就開中斷,開定時(shí)器
請(qǐng)問誰有浮點(diǎn)數(shù)乘法子程序:
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)