欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機可以執行多少次嵌套?原因是什么? [打印本頁]

作者: leebin    時間: 2019-3-12 15:34
標題: 單片機可以執行多少次嵌套?原因是什么?
如題
作者: 正規007    時間: 2019-3-12 17:14
如果設計合理,N次嵌套都不是個事
作者: 736898032    時間: 2019-3-12 18:47
堆棧應該是跟C編譯器有關和開辟的堆棧區空間的大小有關。因此,子程序能嵌套多少層是跟C編譯器有關和開辟的堆棧區空間的大小有關。有的C編譯器在編譯時,如果溢出會有警告或者出錯的提示,但是也有的C編譯器如果溢出卻不會有警告或者出錯的提示,畢竟C編譯器也是一種人為的軟件,不同的版本也可能存在差異。我自己也開發過編譯器的子程序嵌套的功能,因此我深知子程序的嵌套肯定是有層數限制的,嵌套越少越安全。我平時用keil4 編譯M3和M4核的單片機,一般是把嵌套數控制在4層左右以內。應該以實際為準,如果程序出現了莫名其妙的明顯錯誤,可以考慮是不是嵌套層數太多或者堆棧溢出的問題。

作者: a庚    時間: 2019-3-12 19:34
若是中斷嵌套,最好都不要寫這種代碼。應當拒絕浪費內存這種無意義行為

作者: Y_G_G    時間: 2019-3-12 23:54
這個和單片機的硬件有關的,很多人是以8051的C語言開始學習的,8051的堆棧是程序自動分配的軟件堆棧,理論上來說從030H到0FFH都可以作為堆棧,大概200層吧,那么在C中,大概就能嵌套200層,至少理論上來說是這樣的
但別的單片機就不一樣的了,有的是使用硬件堆棧,合泰單片機就是這樣的硬件堆棧,有的型號只有4層硬件堆棧,也就是說最多只能嵌套4層,PIC的單片機也是大概如此,像這種硬件堆棧,而且只有幾層堆棧的單片機,一般是不會嵌套的,函數的遞歸也是不允許的,就是中斷函數里面都不用函數之類的要用到堆棧的語句
作者: liuguonianhua    時間: 2019-12-9 18:30
親測,5層棧溢出
作者: liuguonianhua    時間: 2019-12-9 18:32
正規007 發表于 2019-3-12 17:14
如果設計合理,N次嵌套都不是個事

胡說!你試試最簡單的遞歸看看!
作者: csmyldl    時間: 2019-12-9 23:26
Y_G_G 發表于 2019-3-12 23:54
這個和單片機的硬件有關的,很多人是以8051的C語言開始學習的,8051的堆棧是程序自動分配的軟件堆棧,理論上來 ...

8051單片機即使把08H-FFH所有內存都作為堆棧,也不會有200層,因為只有240個存儲單元,而第一個斷點都有2個字節的地址需自動存入,這樣也只有120層,如果程序真有120層調用,每一層的中間運行數據將無存儲空間可用,一般編寫程序都需要留出足夠的內存空間供變量使用,堆棧移至內存的尾部,大概占16-30個字節地址,程序嵌套建議不超過8層為好
作者: linzhiqi1    時間: 2019-12-13 08:16
嵌套的層數與堆棧的深度有關,每次調用子程序,或者相應中斷,都要在堆棧中保留返回值,如何堆棧滿了,再嵌套,就無法返回了。我用過最PIC16c57,硬件堆棧2級。。 若是標準的51單片機,堆棧在128B的RAM中可以自己設置指針,但是R0-R7 用戶的數據要占用一些RAM 剩余的可做堆棧,每次入棧2字節,可以計算出能嵌套多少次了,52多了128B的RAM 可以用l來做堆棧 128B的堆棧可以嵌套64次。當然每次嵌套要保存數據還需要RAM。
作者: 李澤訓    時間: 2019-12-13 14:56
我用過最多4次
作者: 李一安    時間: 2019-12-13 15:30
不同的單片機可以執行的嵌套也不同,RAM大的單片機,多少級都是隨便的
作者: 天風情    時間: 2019-12-13 16:53
受限于單片機硬件和C語言規范




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1