2011-03-15 153 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