在论坛上看到一个提问:
题目如下:
在一个多任务嵌入式系统中,有一个CPU可直接寻址的32位寄存器REGn,地址为
0x1F000010,编写一个安全的函数,将寄存器REGn的指定位反转(要求保持其他bit的值不变)。
我写的如下:
#define FALSE 0
#define TRUE 1
#define REGn_DATA (*(unsigned int*)(0x1F000010))
unsigned int InversionREGn(unsigned int bit)
{
unsigned int data=0;
if(bit>31)
{
return FALSE;
}
data = (REGn_DATA>>bit)&1;
if(data)
{
REGn_DATA &= ~(1<<bit);
}
else
{
REGn_DATA |= (1<<bit);
}
return TRUE;
}
想问一下大家有什么更快的方法!
修改如下:
#define FALSE 0
#define TRUE 1
#define REGn_DATA (*(unsigned int*)(0x1F000010))
unsigned char InversionREGn(unsigned char bit)
{
REGn_DATA ^= 1<<bit;
}