Re: 在C18, 區域變數用太多, 真的會影響效率嗎 ?
|
||||
---|---|---|---|---|
中級會員
|
8051 得堆疊可以儲存資料,但是PIC的堆疊不能存放資料!
另外,還有一點PIC的堆疊不能直接修改某層,但是8051可以!
發表於: 2005/9/14 2:48
|
|||
|
Re: 在C18, 區域變數用太多, 真的會影響效率嗎 ?
|
||||
---|---|---|---|---|
版主
|
1. 31層的硬體堆疊跟Local Variable 的存取無關,它是存放呼叫函數(副程式)及中斷服務所用,存的只有Progra Counter Address 而已。
2. Local Variable 一般是放在資料堆疊裡與參數傳遞相同,當然你也可以在 Compiler 的設定使用沒用道德 RAM 來暫存這樣速度也會快些。 3. 可以在 Project --> MPLAB C18 --> Default storage class 下選擇 Static 後就會用剩餘的 RAM來做Local Variable
發表於: 2005/9/13 17:59
|
|||
|
在C18, 區域變數用太多, 真的會影響效率嗎 ?
|
||||
---|---|---|---|---|
資深會員
|
看到之前一篇討論裡提到
================================================ http://www.microchip.com.tw/modules/n ... 189&forum=1#forumpost4736 在C裡的變數會有所謂的生命週期的問題 , 例三的變數C只有在MAIN裡才存在 , 而且是放在堆疊裡 , 而且每次的位置都不一定一樣 , 而例二的靜態變數是一直存在的及例一的全域變數都是佔用實質的位址 , 所以資料的存取都不會有問題 , 其實MCU寫C的一點觀念和PC的C++不太一樣 , 最好在MCU中都宣告成全域變數 , 就是在函式外宣告 , 有幾個好處 , MCU的RAM就是那麼多 , 你不用它還是在那邊 , 不會因為你不用就會比較便宜 , 還有 , 如果你常用區域變數宣告的話 , COMPILER都會用堆疊的方式處理 , 真正執行的時侯 , 堆疊指標的處理 , BANK的處理都會花掉一些指令 , 也許真正的動作只有兩三個指令 , 結果光是堆疊的處理可能就會花掉三四十個指令 , 這是有可能的 , 因為我遇過........ , 所以 , 變數宣告成全域只有好處 , 不會比較壞 , 除非真的用到只剩下幾個RAM , 非斤斤計較不可 , 但是.........寫C還能把RAM用到只剩幾個 , 那也太省了 , 換顆大一點的吧! ============================================== 請問.......是否真的像那位大大所說的 區域變數 都是用堆疊方式處理的 如果是正樣的話 一個函數的區域變數不就不能設太多個 不然pic18 31層的堆疊哪夠??
發表於: 2005/9/12 14:32
|
|||
|