• slider image 442
  • slider image 477
  • slider image 479
  • slider image 480
  • slider image 481
  • slider image 482
:::


Browsing this Thread:   1 Anonymous Users






Re: C語言行內組合引用變數錯誤
#5
新會員
新會員


查看用戶資訊
感謝您的回答

您說的我知道 但是這樣的觀點卻很奇怪也造成一點點不太方便
正常來說 我這里說說的區域變數是同一斷函數區段內的例如

void function(char var1,char var2)
{
    
unsigned char Buf1;       //<-------- 這裡 Buf1是屬於 function() 裡面的變數

    
_asm
    movff    Buf1
,var2        //<-------- 這裡也是在function () 的範圍裡面 但是卻看不到
    
Loop1:
    
decfsz   Buf1,1,0          //<-------- 這裡也是在function() 的範圍裡面 但是卻看不到

    
bra        Loop1
    nop
    _endasm
}

不懂位啥編譯器要有這種限制...........
我有嘗試先編譯一次取得它可能位址然後直接帶入
呃....幾乎可以用但在某些情況下還是會造成當機....原因我想大家都該知道
偏偏 我的副程式中有10多個變數.............
有人知道這個問題要如何解嗎..........

發表於: 2007/6/10 0:33
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: C語言行內組合引用變數錯誤
#4
版主
版主


查看用戶資訊
C18 的內建組語和呼叫組合語言,其組語部份只能看到 Global 變數,因為 Local 變數有可能是從 RAM 直接傳過來也有可能會透過資料爹迭傳過來。可以參考 W401 Workshop 第七章的說明( C call Assembly)

發表於: 2007/6/9 23:46
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: C語言行內組合引用變數錯誤
#3
新會員
新會員


查看用戶資訊
感謝您的回答
我的行內組合程式中並不是單純的移動資料後面還有其他的指令會對Buf1 這個變數作一些運算及處理
目前的問題是 C18編譯器對於內插組合時好像在組合段落內看不到自己同樣函數段落內的區域變數( 這又是啥怪道理......PS:這是代理商FAE告訴我的 )

發表於: 2007/6/9 23:25
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: C語言行內組合引用變數錯誤
#2
中級會員
中級會員


查看用戶資訊
我想..... 數值搬移的部份交回給 c 語言作塵該就可以了.
如下. 等數值搬好之後才開始組合語言的部分。


void test1(unsigned char datain,unsigned char var1)
{
unsigned char Buf1=0;

Buf1 = var1;
_asm
..................
............
........

_endasm
}

發表於: 2007/6/9 22:56
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


C語言行內組合引用變數錯誤
#1
新會員
新會員


查看用戶資訊
void test1(unsigned char datain,unsigned char var1)
{
        
unsigned char Buf1=0;

        
_asm
        movff     Buf1
,var1
        
..................
        ............
        ........

        
_endasm
}

上面的語法的問題 是 第一行的Buf1宣告編譯過後
它會給予一個位址並且將她清為0
例如 clr 0xfdf,ACCESS

但是行內組合的部分編譯過後 Buf1卻變成 movff 0,0xffd
應該要 0xfdf 的地方卻變成 0
程式目前發現就是這裏造成功能執行錯誤
雖然可以把 Buf1 宣告成全域變數但由於記憶體使用的非常凶
所以不能把她改成全域方式

想請問有哪位大大們 有解決的方法 感謝

發表於: 2007/6/9 20:41
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... ]

教育訓練中心

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