• slider image 442
  • slider image 492
  • slider image 493
  • slider image 494
  • slider image 495
  • slider image 496
:::


Browsing this Thread:   1 Anonymous Users






Re: static & persistent 的不同
#9
中級會員
中級會員


查看用戶資訊
我了解了~~謝謝各位 的幫忙

發表於: 2007/6/13 18:14
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: static & persistent 的不同
#8
資深會員
資深會員


查看用戶資訊
照你的程式,稍微加料作成完整測試程式,用 MPLAB SIM 模擬測試的結果,結果完全如預測,static 變數並不會無故被清掉啊!

我的完整測試程式如下:

#include <pic.h>                // processor if/def file
#include "cnfig877a.h"

//**********************************
//* Function Prototype Declaration
//**********************************

void sx(void);
void sy(void);

__CONFIG  HS_OSC BODEN_ON WDT_OFF CP_OFF LVP_OFF DEBUG_ON ); 

// =================================================================

int glob1=0x7777;
int glob3=0x8888;

static 
int sa=123;
static 
int sb=456;
static 
int sc=999;

void sx(void)
sa=789sb=sa; }

void sy(void)
sc=sa; }
    
/*******************************************************************
                  MAIN PROGRAM BEGINS HERE
********************************************************************/

void mainvoid )
{

  
asm("nop");
  
sx();
  
sy();
  
glob3=sc;
  
glob1=sa;
  
asm("nop");

};

發表於: 2007/6/13 14:53
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: static & persistent 的不同
#7
中級會員
中級會員


查看用戶資訊
可是 我遇到的狀況 真的很奇怪 static 真的沒用
就如同我上面所敘述的
現在我想知道 hi tech picc 清除 ram 要怎麼清

發表於: 2007/6/12 16:20
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: static & persistent 的不同
#6
版主
版主


查看用戶資訊
staick 是用在含數內定義變數用的與Local 變數類似,staick 需設予一個初始值給第一次呼叫該函數時設定其值,之後離開此函數其值並不會消失,以後的呼叫該函數都會用道上次的值。初始值的設定只會在第一次呼叫時設定。reset 後其值消失。

presistent 是設定該變數再 Worm Start 的 Reset 後給予保留,這兩種變數是不一樣的。

可以參考右邊教育訓練裡的 Hi-Tech PICC 教材裡的說明。

發表於: 2007/6/8 21:12
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: static & persistent 的不同
#5
中級會員
中級會員


查看用戶資訊
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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: static & persistent 的不同
#4
資深會員
資深會員


查看用戶資訊
PICC 說,變數會在 reset 被 initialize ,除此之外,應該不會無故被清值,現在你的問題到底是什麼時候被清值了?
那就用 persistent 然後自己去清值... (不過 PICC 會把 persistent 放在 EEPROM)

PICC 的 function 不能 re-entrant ,主程式與interupt 中你是不是都 call 同一 function 了!!

發表於: 2007/6/8 14:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: static & persistent 的不同
#3
中級會員
中級會員


查看用戶資訊
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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: static & persistent 的不同
#2
資深會員
資深會員


查看用戶資訊
不太清楚什麼時候被清掉的?
試試 volatile static 看看

如果 變數太多, PICC 會請你自己安排 bank,使用 bank1, bank2, bank3 ... 這些修飾字。

例: bank3 unsigned char * ptrfred;

但如果 compile 沒問題但程式會當,可能還要檢查程式。

發表於: 2007/6/5 7:36
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


static & persistent 的不同
#1
中級會員
中級會員


查看用戶資訊
各位好 我用 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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------