_REV在Sys实现,还是得要调用固件库,方便兼容MDK/GCC两家编译器

This commit is contained in:
Stone 2016-03-09 00:39:53 +00:00
parent ba51c2b068
commit 1739720eb1
4 changed files with 42 additions and 42 deletions

36
Sys.cpp
View File

@ -559,3 +559,39 @@ void TSys::Trace(int times) const
}
//#endif
}
/******************************** REV ********************************/
uint _REV(uint value) { return __REV(value); }
ushort _REV16(ushort value) { return __REV16(value); }
/*#if defined ( __CC_ARM )
__asm uint _REV(uint value)
{
rev16 r0, r0
bx lr
}
__asm ushort _REV16(ushort value)
{
rev16 r0, r0
bx lr
}
#elif defined ( __GNUC__ )
uint32_t __REV(uint32_t value)
{
uint32_t result = 0;
__ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value));
return(result);
}
uint32_t __REV16(uint16_t value)
{
uint32_t result = 0;
__ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value));
return(result);
}
#endif*/

6
Sys.h
View File

@ -115,6 +115,12 @@ extern TSys Sys; //创建一个全局的Sys对象 会在main函数之前执行
//#include "Time.h"
#include "Interrupt.h"
//extern uint32_t __REV(uint32_t value);
//extern uint32_t __REV16(uint16_t value);
uint _REV(uint value);
ushort _REV16(ushort value);
#endif //_Sys_H_
/*

View File

@ -714,39 +714,3 @@ void ByteArray::Write(UInt64 value, int index)
{
Copy(index, (byte*)&value, sizeof(UInt64));
}
/******************************** REV ********************************/
//uint _REV(uint value) { return __REV(value); }
//ushort _REV16(ushort value) { return __REV16(value); }
#if defined ( __CC_ARM )
__asm uint _REV(uint value)
{
rev16 r0, r0
bx lr
}
__asm ushort _REV16(ushort value)
{
rev16 r0, r0
bx lr
}
#elif defined ( __GNUC__ )
uint32_t __REV(uint32_t value)
{
uint32_t result=0;
__ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) );
return(result);
}
uint32_t __REV16(uint16_t value)
{
uint32_t result=0;
__ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) );
return(result);
}
#endif

6
Type.h
View File

@ -20,12 +20,6 @@ typedef long long Int64;
#include <typeinfo>
using namespace ::std;
//extern uint32_t __REV(uint32_t value);
//extern uint32_t __REV16(uint16_t value);
uint _REV(uint value);
ushort _REV16(ushort value);
class String;
class Type;