1

我正在为 AVR MCU 编写一些 C/asm 程序。我仍在学习,所以我希望我在代码中犯了某种错误。

volatile unsigned char suart_0_rx_buffer[SUART_0_BUF_SIZE+1];我在我的 asm 代码中访问的 C 代码中有一个缓冲区,如下所示。我要做的就是在缓冲区中存储一个字节并每次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 代码有什么问题吗?

4

1 回答 1

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
于 2011-03-23T04:30:50.793 回答