2012-03-20 3 views
0

SWIの後に次のARMコードセットをR00にするのはなぜですか?SWI設定R0を0

.equ SWI_CheckButton, 0x203 

    .global _start 
    .text 
_start: 

mov R0, #1 
swi SWI_CheckButton 
私はそれが最後に押されたキーを覚えておきたいので、これは label9でめちゃくちゃ取得し、フォーム

FunctionA: 
    swi SWI_CheckButton 
    cmp R0, #1 
    beq label1 
    cmp R0, #2 
    beq lablel2 
    ... 
    cmp R0, #9 
    beq label9 
    label1: 
    ... 
    label9: 
     @do work 
     bal FunctionA 

を取るプログラムを右しようとしている

しかしswi SWI_CheckButtonリセットR0から0 (私は何も押されていないと思う)。

問題がswi 0x203リセット0からR0そうです、私は同じことを行いますがR0はリセットされませんswiを見つけるだろうどこ?

+0

SWIハンドラコードを教えてもらえますか? –

+0

私のプログラムにはないと思う。私はEmbestボードのために書いています。 – Celeritas

+0

一般に、SWIハンドラは、レジスタ値をSWI間で復元するようにレジスタを保存および復元します。あなたのSWIハンドラが何をしているのか分かりません。あなたのソース全体で 'SWI_Handler'を探して、それが存在するかどうかを確認してください。 –

答えて

0

私は結局SWIのためにfound an exampleです。 SWI_CheckBlueを検索してください。何が起こるかは、押されているキーのコードがR0のSWIルーチンによって返されることです。戻り時にR0がゼロの場合、SWIが呼び出された時点でキーが押されていないことを意味します。

おそらくゼロ以外の値が出るまでループする必要があります。

+0

どうやってこれを見つけましたか? – Celeritas

+0

@ user1279820:結局、SWIと203のGoogle検索だったと思います。 – JeremyP

1

マイ推測は(多分ゼロはを示している?)

あなたが別のレジスタに必要な値を格納し、呼び出しの後にそれを復元する必要があることをSWIに戻り値があるということです。スペアレジスタがない場合は、スタックに保存する必要があります。

+0

''ボタンを賞味する '以外の方法は ''ただボタンを待つ' 'という方法ですが、押されたキーのコード(存在する場合)または適切な "なし"コード(存在しない場合)を返します。 –

関連する問題