Re: static & persistent 的不同
|
||||
---|---|---|---|---|
中級會員
|
我了解了~~謝謝各位 的幫忙
發表於: 2007/6/13 18:14
|
|||
|
Re: static & persistent 的不同
|
||||
---|---|---|---|---|
中級會員
|
可是 我遇到的狀況 真的很奇怪 static 真的沒用
就如同我上面所敘述的 現在我想知道 hi tech picc 清除 ram 要怎麼清
發表於: 2007/6/12 16:20
|
|||
|
Re: static & persistent 的不同
|
||||
---|---|---|---|---|
版主
|
staick 是用在含數內定義變數用的與Local 變數類似,staick 需設予一個初始值給第一次呼叫該函數時設定其值,之後離開此函數其值並不會消失,以後的呼叫該函數都會用道上次的值。初始值的設定只會在第一次呼叫時設定。reset 後其值消失。
presistent 是設定該變數再 Worm Start 的 Reset 後給予保留,這兩種變數是不一樣的。 可以參考右邊教育訓練裡的 Hi-Tech PICC 教材裡的說明。
發表於: 2007/6/8 21:12
|
|||
|
Re: static & persistent 的不同
|
||||
---|---|---|---|---|
中級會員
|
tonys大!我用PICC ICD2
#include <pic16f7x.h> #include <pic.h> static persistent int Xcount=0, Ycount=0; 正常不是應該用了 static int abc=0; abc的值在 interrupt ()或者是其他的 void(){} or function 被值行了一次 abc被填入了 100值! 當下次 abc被function"在一次"用到的時候 裡面一定還是100 因為abc 是 static 除非 斷電 or 手動清除 ---以上是我個人的認知---應該沒錯吧--我是用51的方式和觀念 ..可是 我用在 pic 時卻不行!!當我在第一次把 abs存了100 下次要用 abc時 裡面的值卻是0 我一樣是用static int abc;我不了解為什麼 我一定要用static persistent int abc=0;把值存在ram裡面才行 才會下次用 abc時 abc會等於100; -------------------------------------------- 可是現在斷電了!在開起abc的值還是等於100因為是存在ram的關係!!!!可是我要的是 下次在開機 abc會等於0; --------------- 而且 在 pic裡 我只是要暫存一下而已 假如 int a=0; 只是經過了 void x() {a=789} void y() {這時候的a 就變成0了} 可是 51的時候 卻是 y(){a=789} 所以我就必須 static persistent int 把所以的變數都這樣宣告可是ram容量有限!!!到底我對pic不了解嗎?還是觀念都錯了 --- PICC 的 function 不能 re-entrant ,主程式與interupt 中你是不是都 call 同一 function 了!! 嗯~都是 call同一個 function
發表於: 2007/6/8 18:55
|
|||
|
Re: static & persistent 的不同
|
||||
---|---|---|---|---|
資深會員
|
PICC 說,變數會在 reset 被 initialize ,除此之外,應該不會無故被清值,現在你的問題到底是什麼時候被清值了?
那就用 persistent 然後自己去清值... (不過 PICC 會把 persistent 放在 EEPROM) PICC 的 function 不能 re-entrant ,主程式與interupt 中你是不是都 call 同一 function 了!!
發表於: 2007/6/8 14:49
|
|||
|
Re: static & persistent 的不同
|
||||
---|---|---|---|---|
中級會員
|
volatile static int
還是不行也!! 值會被清掉!!等於static 跟沒用static 一樣!! 還有一個問題就是 Error[000] : function _delayus appears in multiple call graphs: rooted at _Check_PulseHiLow and _main void delayus() 有被三個 function用到就會出現 這一斷 請教一下要如何 宣告void delayus() 才可以被多個程式都可以用
發表於: 2007/6/5 8:51
|
|||
|
Re: static & persistent 的不同
|
||||
---|---|---|---|---|
資深會員
|
不太清楚什麼時候被清掉的?
試試 volatile static 看看 如果 變數太多, PICC 會請你自己安排 bank,使用 bank1, bank2, bank3 ... 這些修飾字。 例: bank3 unsigned char * ptrfred; 但如果 compile 沒問題但程式會當,可能還要檢查程式。
發表於: 2007/6/5 7:36
|
|||
|
static & persistent 的不同
|
||||
---|---|---|---|---|
中級會員
|
各位好 我用 pic 16f7x
HI-TECH PICC 我需要用STATIC 靜態變數來存值 static int Data=0, 可是 發現 STATIC 變數的內容都會被清掉 不知道為什麼明明就是靜態變數 為什麼跟普遍的變數功能一樣 後來發現用 persistent 雖然 他可以存值 static persistent int Data=0 可是 我把 PIC 斷電了 在開起 PIC persistent 的變數內容值還是在!! 有什麼變數是像8051的STATIC 平時可以存值 程式重新開始時 會清掉!!! -- 在請教一點 就是 PIC16F7X int 變數太多了!程式會當 要把 int存在不同的 區塊嗎?
發表於: 2007/6/4 18:39
|
|||
|