【发布时间】:2023-03-14 04:05:01
【问题描述】:
我试图找出为什么我的 AVR ATtiny861A(8 位)程序无法正常工作。现在我才刚刚开始使用 Atmel Studio(之前我使用的是 CodeVision AVR)。
cmets中带有初始C代码的汇编代码如下:
if(data & 0x8000)
84: 33 23 and r19, r19
86: 14 f4 brge .+4 ; 0x8c <WriteDAC+0x2e>
我无法理解这段代码是如何正常工作的。
Codevision 编译正确:
; 0000 00EE (data&0x8000) ? (DAC_DIN=1) : (DAC_DIN=0);
SBRS R17,7
RJMP _0x10
我只发布了我无法理解的代码部分。
【问题讨论】:
-
仅仅因为你不明白发生了什么,并不一定意味着编译器错了......
-
我认为问题是:它有效吗?如果确实如此,那么问题出在您身上,而不是编译器。
-
要理解反汇编,你必须查看这段代码所在的整个函数,而不仅仅是一行。另外,发布使用的编译器选项。另外,这是 8 位 AVR 还是 32 位?
-
如果不显示DAC_DIN的定义,谁也说不准。这可能是某种硬件寄存器?可能是您正在编译优化的情况,因此不要使用
volatile。 -
顺便说一句,您确定您的反汇编程序将 C 行放在 asm 上方而不是下方吗?这两个版本我都看过。
标签: c gcc compilation avr