打印时清空阵列

时间:2011-03-15 23:15:16

标签: arrays assembly avr avr-gcc

我正在为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代码有任何问题吗?

1 个答案:

答案 0 :(得分: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