问题描述:
在cortex-m4系列芯片上使用AC6对RT-Thread编译会出现三个错误
rt-thread/libcpu/arm/cortex-m4/cpuport.c(457): error: expected '(' after 'asm'
__asm int __rt_ffs(int value)
^
rt-thread/libcpu/arm/cortex-m4/cpuport.c(457): error: expected ';' after top-level asm block
__asm int __rt_ffs(int value)
^
;
rt-thread/libcpu/arm/cortex-m4/cpuport.c(459): error: use of undeclared identifier 'CMP'
CMP r0, #0x00
^
3 errors generated.
原因分析:
由于AC6编译器标识是__CLANG_ARM
,其插入的汇编方式与AC5不一样,只需要重写其汇编内容即可。
具体可以参考<armar_user_guide_100072_061x_00_en.pdf>
解决方案:
#elif defined(__CLANG_ARM)
int __rt_ffs(int value)
{
__asm volatile(
"CMP r0, #0x00 \n"
"BEQ 1f \n"
"RBIT r0, r0 \n"
"CLZ r0, r0 \n"
"ADDS r0, r0, #0x01 \n"
"1: \n"
: "=r"(value)
: "r"(value)
);
return value;
}