全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1108
推到 Plurk!
推到 Facebook!

Keil c 如何避免區域變數重疊??

缺席
mihopaul
一般會員


發表:25
回覆:59
積分:16
註冊:2002-03-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-09-02 14:31:22 IP:202.154.xxx.xxx 訂閱
Hi all 

我寫了個程式,大約是以下的內容

test.c
void a(U8 val)
{ U8 ch=0;
dev[ch].fun1(val); <-----這個會叫用下面的 b 函式
dev[ch].fun2(val); <---執行到這出錯
}
void b( U8 val)
{
U8 dummy = val *5;
writeReg[0x55AA]= dummy;
}

當我執行 dev[ch].fun1(val) 之後,不應該被改變的 ch 變數卻被改變了
後來發現 ch 變數的memoery 位置 是 0x40 ,而且跟 Dummy 這個變數一樣
所以當Dummy被改變了,ch 也被改變

查看 m51 檔
DATA 0018H 0028H UNIT ?DT?Test 正好是邊界
請問我該如何避免呢 ?? 此外我要如何得知 所有的區域變數被存放在那個位置??

謝謝






mihopaul
一般會員


發表:25
回覆:59
積分:16
註冊:2002-03-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-09-02 15:52:13 IP:202.154.xxx.xxx 訂閱
Hi all

目前大概知道原因,在使用 function pointer的時後,會使得overlay的功能出錯,所以要自已手動去處理一下

不過現在還沒看懂,到底如何處理Orz
系統時間:2024-03-29 7:52:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!