MakerLab创客实验室 — Let's Make something.
现在注册
已注册用户请 登入
evesky large avatar
MakerLab创客实验室  ›  固件

关于marlin固件里stepper.cpp函数里的MultiU16X8toH16(intRes, charIn1, intIn2)函数

By evesky at 一年前 , 708 次浏览

#define MultiU16X8toH16(intRes, charIn1, intIn2) \
asm volatile ( \
"clr r26 \n\t" \
"mul %A1, %B2 \n\t" \
"movw %A0, r0 \n\t" \
"mul %A1, %A2 \n\t" \
"add %A0, r1 \n\t" \
"adc %B0, r26 \n\t" \
"lsr r0 \n\t" \
"adc %A0, r26 \n\t" \
"adc %B0, r26 \n\t" \
"clr r1 \n\t" \
: \
"=&r" (intRes) \
: \
"d" (charIn1), \
"d" (intIn2) \
: \
"r26" \
)
这个函数不太理解,求助 @Andy 帮忙解答一下,谢谢啦

4 回复
Andy medium avatar
#1 - 一年前
Andy

你是汇编代码不懂?还是这个函数的功能不懂?汇编语言我也不太懂,如果用c语言写这个函数就是这样的:

#define MultiU16X8toH16(intRes, charIn1, intIn2) intRes = ((charIn1) * (intIn2)) >> 16

用汇编是为了提高速度。

evesky medium avatar
#2 - 一年前
evesky

@Andy 我不懂汇编,谢谢啦。这个函数的功能就是charIn1与intIn2相乘然后右移16对吗?