试用前请查看内核手册是否支持 REV 和 REV16 命令
STM32F429验证
#if defined(__CC_ARM)
//eg a=0x12345678 b=0x78563412
inline uint32_t arm_rev32(register uint32_t a)
{
uint32_t b;
__ASM
{
REV b, a
}
return b;
}
//eg a=0x1234 ,b=0x3412
inline uint16_t arm_rev16(register uint16_t a)
{
uint16_t b;
__ASM
{
REV16 b, a
}
return b;
}
#elif defined(__GNUC__)
//eg a=0x12345678 b=0x78563412 这个存在问题
static inline uint32_t arm_rev32(register uint32_t a)
{
uint32_t b;
__asm__ __volatile__ ("REV %1, %0":"=r"(b):"r"(a));
return b;
}
//eg a=0x1234 ,b=0x3412 这个可以
static inline uint16_t arm_rev16(register uint16_t a)
{
uint16_t b;
__asm__ __volatile__ ("REV16 %1, %0":"=r"(b):"r"(a));
return b;
}
#endif