임베디드 시스템에서 저사양의 MCU를 사용할 때 라이브러리에 있는 SQRT 함수를 사용하면 시간이 많이 걸린다. 그래서, SQRT 함수를 직접 만들어 사용하는 경우가 많다.
n이 8,16,32비트일 때는 다음과 같이 코드를 수정한다.
n이 32비트 : p = 0x40000000
n이 16비트 : p = 0x4000
n이 8비트 : p = 0x40
uint32_t sqrt32 (uint32_t n)
{
uint32_t v, re, p;
v = 0;
r = n;
p = 0x40000000;
while (p > r) p = p >> 2;
while (p)
{
if (r >= v + p)
{
r = r - v - p;
v = v + (p << 1);
}
v = v >> 1;
p = p >> 2;
}
return v;
}
SQRT를 계산하는 다른 알고리즘은 다음과 같다.
uint16_t sqrt32(uint32_t a)
{
uint32_t r = 0;
uint16_t root = 0;
uint16_t i;
for (i = 0; i < 16; i++)
{
root <<= 1;
r <<= 2;
r += a >> 30;
a <<= 2;
if (root < r)
{
root++;
r -= root;
root++;
}
}
return (uint16_t) (root >> 1);
}
'전자공학' 카테고리의 다른 글
PMSM과 BLDC 모터의 차이 (0) | 2017.08.06 |
---|---|
스위치 채터링(Chattering) 제거 방법 (0) | 2017.08.06 |
AWG - SQ 변환표 (0) | 2017.08.06 |
전압,전류의 쉽고 간단한 개념 이해 (0) | 2017.08.05 |
플래시메모리와 하드디스크 중 어느 것이 저장밀도가 더 높을까? (0) | 2017.08.05 |
댓글