2011-03-15 154 views
1

我正在爲AVR MCU編寫一些C/asm程序。我仍然在學習,所以我希望自己的代碼中出現了某種錯誤。空陣列打印

我在我的C代碼中有一個緩衝區volatile unsigned char suart_0_rx_buffer[SUART_0_BUF_SIZE+1];,我在我的asm代碼中訪問如下。我想要做的就是將一個字節s0_Rxbyte存儲在緩衝區中,並且每次增加指針s0_index。 's0_Rxbyte`總是一個非零值。


suart_0_wr_buf_2: ldi  s0_z_low, lo8(suart_0_rx_buffer) 
        ldi  s0_temp1, hi8(suart_0_rx_buffer) 
        add  s0_z_low, s0_index 
        adc  s0_z_high,s0_temp1 
suart_0_wr_buf_3: st  Z+, s0_Rxbyte 
        inc  s0_index 
        clr  s0_temp1 
        st  Z, s0_temp1

如果我嘗試打印在我的C代碼循環中的內容,我什麼也沒得到。

我不想在這裏附上一切,因爲它會混亂。

那麼有沒有人看到上面的asm代碼的任何問題?

+0

我們可能需要更多的代碼。例如,你在哪裏設置Z? s0_Rxbyte在哪裏設置?你的循環在哪裏/你甚至想循環?然而,代碼的第5行和第6行完全符合您的要求。 – Sparafusile 2011-03-18 14:27:06

回答

0

終於弄明白了。這是彙編代碼中的一個簡單錯誤,導致它在SRAM中寫入錯誤的位置。

suart_0_wr_buf_2: clr  s0_temp1 
        ldi  s0_z_low, lo8(suart_0_rx_buffer) 
        ldi  s0_z_high, hi8(suart_0_rx_buffer) 
        add  s0_z_low, s0_index 
        adc  s0_z_high, s0_temp1 
suart_0_wr_buf_3: st  Z+, s0_Rxbyte 
        inc  s0_index 
        st  Z, s0_temp1