Re: 請問一下,開始run後,所宣告的變數全不是原先設定的?
|
||||
---|---|---|---|---|
高級會員
|
你再試一下,
加個static在全域變數中! static int x=0; void main(void) { .... } ...
發表於: 2005/12/3 14:45
|
|||
|
Re: 請問一下,開始run後,所宣告的變數全不是原先設定的?
|
||||
---|---|---|---|---|
資深會員
|
乾脆打0800電話給microchip問吧
不過得靠運氣 他們都忙 電話有8成時間是沒人接的
發表於: 2005/11/30 12:44
|
|||
|
Re: 請問一下,開始run後,所宣告的變數全不是原先設定的?
|
||||
---|---|---|---|---|
資深會員
|
參照:
1.習慣上不會在定義global變數的同時 給予初始值 通常會在main()的開始再一一指定 -------- 偶個人習慣 2. 試看看把18f4520.lkr 裡面的一行 FILES c018i.o 改為 FILES c018iz.o 然後存檔,改用這個新的.lkr 看看是否變數就正常了 ps 第2點請務必try一下, 並告知結果好嗎 thks
發表於: 2005/11/30 9:10
|
|||
|
Re: 請問一下,開始run後,所宣告的變數全不是原先設定的?
|
||||
---|---|---|---|---|
高級會員
|
很抱歉沒解決你的問題,
但我再提一個方法,你試試看!! #include <p18f452.h> // 奇怪,你不是用18f4520嗎?? #include <usart.H> // 要改小寫h嗎?? 建議!! //#include <stdlib.h> //#include <timers.h> //#include <adc.h> #include <delays.h> // 加入delay function int x=0; void main(void) { //InitialPort(); d掉 //InitialInt() ; d掉 //InitializeAD(); d掉 InitializeUSART() ; //InitialTimer(); d掉 USARTPut('A'); Delay10KTCYx(10); USARTPut(x); Delay10KTCYx(10); while(1) { USARTPut('A'); Delay10KTCYx(10); USARTPut(x); Delay10KTCYx(10); } } 還有,既然你使用InitializeUSART(),...之類的 "自訂function", 應該要在main之前做"原型宣告"吧?? 是你省略沒寫,還是真的沒宣告?(but C18應該會幫你偵測). 還有一種可能,就是你的function都寫錯了! po個InitializeUSART()讓我瞧瞧吧!! 加油!!
發表於: 2005/11/29 20:29
|
|||
|
Re: 請問一下,開始run後,所宣告的變數全不是原先設定的?
|
||||
---|---|---|---|---|
中級會員
|
您好:
兩位大大所提的方法我都有試,關於第一種,我在第一次 看其值即不為0,更別提是後面的值是否為0。關於第二種,我 我在同一顆ic下時,不管重新rest幾次,跑出來的值每次都一 樣,換別顆ic時,跑出來的值和前一個ic不同,但仍然不是我的 預設值。
發表於: 2005/11/29 20:07
|
|||
|
Re: 請問一下,開始run後,所宣告的變數全不是原先設定的?
|
||||
---|---|---|---|---|
資深會員
|
看起來好像是外部變數的預設值 變不一樣了, 可是如此?
如果確定程式並沒有更動其值的話 請問變數的值雖然和預設值不同 那是否會固定變為某個數字或不特定的數字? 麻煩再試看看, 換個IC之後就可能變的正常或又有其他變化?(試個10來顆看看, 最好還是不同date code)
發表於: 2005/11/29 17:31
|
|||
|
Re: 請問一下,開始run後,所宣告的變數全不是原先設定的?
|
||||
---|---|---|---|---|
高級會員
|
如果我是你,我會如此做:
int x=0; void main(void) { InitializeUSART() ; USARTPut(x); // 應該會輸出0才對!! //以下的設定順序會影響程式內容,(1~4)是我建議的順序 InitialPort(); // (2) InitialInt() ; // (1) InitializeAD(); // (4) InitialTimer(); // (3) USARTPut(x); // 再確認一次,是否會輸出0? while(1) { ....}
發表於: 2005/11/29 12:53
|
|||
|
Re: 請問一下,開始run後,所宣告的變數全不是原先設定的?
|
||||
---|---|---|---|---|
中級會員
|
您好:
我是使用C18 與 ICD2及 18F4520.lkr 宣告的是global變數,如簡單的 #include <p18f452.h> #include <usart.H> #include <stdlib.h> #include <timers.h> #include <adc.h> int x=0; void main(void) { InitialPort(); InitialInt() ; InitializeAD(); InitializeUSART() ; InitialTimer(); while(1) { } } . . . 後面接續一些TIMER定時中斷作ADC讀取的程式等,結果發現 timer count到第一次作讀取時,結果變數卻不是default value 即x的值不為0,我再重新run,直接在main下的第一行即 InitialPort(); ->作中斷 結果是一樣的結果。以往使用都不曾如此,所以才不解這種問題。 ps.以前程式size較小時不曾發生此情況,這次所使用program memory較大(之前超過,一直修改到可以compilier),但就發生 此情況。
發表於: 2005/11/28 21:39
|
|||
|
Re: 請問一下,開始run後,所宣告的變數全不是原先設定的?
|
||||
---|---|---|---|---|
高級會員
|
總覺得你問的問題太籠統的,
解答有上千種... 可否描述的詳細ㄧ點? 你是用assemble?還是C compiler? 此外, "main下的第一行作中斷",這.... 然後你說的"變數",難道是config. bits? 最好的描述方式,就是po你的code出來吧!!比較快.. 有心幫但幫不上的路人乙
發表於: 2005/11/28 18:37
|
|||
|