我正在为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 :(得分: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