Re: C語言行內組合引用變數錯誤
|
||||
---|---|---|---|---|
版主
|
C18 的內建組語和呼叫組合語言,其組語部份只能看到 Global 變數,因為 Local 變數有可能是從 RAM 直接傳過來也有可能會透過資料爹迭傳過來。可以參考 W401 Workshop 第七章的說明( C call Assembly)
發表於: 2007/6/9 23:46
|
|||
|
Re: C語言行內組合引用變數錯誤
|
||||
---|---|---|---|---|
新會員
|
感謝您的回答
我的行內組合程式中並不是單純的移動資料後面還有其他的指令會對Buf1 這個變數作一些運算及處理 目前的問題是 C18編譯器對於內插組合時好像在組合段落內看不到自己同樣函數段落內的區域變數( 這又是啥怪道理......PS:這是代理商FAE告訴我的 )
發表於: 2007/6/9 23:25
|
|||
|
Re: C語言行內組合引用變數錯誤
|
||||
---|---|---|---|---|
中級會員
|
我想..... 數值搬移的部份交回給 c 語言作塵該就可以了.
如下. 等數值搬好之後才開始組合語言的部分。 void test1(unsigned char datain,unsigned char var1) { unsigned char Buf1=0; Buf1 = var1; _asm .................. ............ ........ _endasm }
發表於: 2007/6/9 22:56
|
|||
|
C語言行內組合引用變數錯誤
|
||||
---|---|---|---|---|
新會員
|
void test1(unsigned char datain,unsigned char var1)
上面的語法的問題 是 第一行的Buf1宣告編譯過後 它會給予一個位址並且將她清為0 例如 clr 0xfdf,ACCESS 但是行內組合的部分編譯過後 Buf1卻變成 movff 0,0xffd 應該要 0xfdf 的地方卻變成 0 程式目前發現就是這裏造成功能執行錯誤 雖然可以把 Buf1 宣告成全域變數但由於記憶體使用的非常凶 所以不能把她改成全域方式 想請問有哪位大大們 有解決的方法 感謝
發表於: 2007/6/9 20:41
|
|||
|