2013-07-25 58 views
1

C新手在這裏,想知道是否有人能指點我一些閱讀材料的方向來解決這個問題。我有2個寄存器和變量:C:如何更改變量寫入哪個寄存器?

Register->Foo; 
Register->Bar; 
myVar; 

myVar是數學函數的輸出,並且將結果得到反覆寫入Register->Foo多個循環,然後當按下按鈕時,myVar被重複地寫入到Register->Bar爲許多週期。

目前,我正在做一個檢查每一個週期,就像這樣:

if button not pressed: 
    write myVar to Register->Foo 
else 
    write myVar to Register->Bar 

但我只真正需要做的,只要按下按鈕一查,不是每個指令週期。我怎樣才能改變myVar指向的位置,只需按下按鈕,並將該設置粘貼到所有循環,直到再次按下按鈕?是這樣的可能嗎?

OutputRegister = myVar // have this run all the time inside a loop 

// somewhere else 
OutputRegister = Register->Foo or Register->Bar 
// depending on button 
// What data structure or method can I use to make this! 

回答

0

你應該保持一個指向正確位置的指針。這樣,您可以分配給它並在其他觸發器上更改目標。

例如:

int foo; 
int bar; 
int * dest; 

void on_button_press() { 
    dest = &bar; 
} 

void on_button_release() { 
    dest = &foo; 
} 

void main() { 
    for (;;) { 
     // code 
     *dest = myVar; 
     // code 
    } 
} 
+0

謝謝!我會嘗試這個,這似乎正是我想要的。 – patches

+0

完美工作。我沒有足夠的代表讚揚你,但很快就會! – patches

0

您使用一個額外的變量,例如, is_assigned。當按下按鈕將其設爲零(意爲「假」),那麼你改變的條件和分配是這樣的:

if (button_not_pressed && !is_assigned) 
{ 
    if (button_not_pressed) 
     Register->Foo = myVar; 
    else 
     Register->Bar = myVar; 

    is_assigned = 1; 
} 

這意味着,當button_not_pressed是真實的,is_assigned是假的,然後做報表內。隨着is_assigned被設置爲true,下一次迭代條件將是錯誤的。

+0

謝謝你這個答案!然而,我的問題並不完全清楚。我爲我正在嘗試做的事添加了更多細節。我認爲jleahy的回答可能是我正在尋找的? – patches

+0

@patches看起來這個答案更符合你想要的。 –

+0

是的。但你的也有幫助:P – patches