WINAVR에서 long type으로 시프트연산을 사용하면 0으로되는 현상을 발견했다.
이것때문에 3시간이상 고생했다.
결국 memcpy함수를 이용해서 변수를 복사 하는방법을 해결하였다.
unsigned long GetFileSize(void)
{
unsigned char buffer[4] = {0x00, 0x24, 0x3d, 0x2a};
unsigned long size = 0;
printf("%02x ", buffer[0]);
printf("%02x ", buffer[1]);
printf("%02x ", buffer[2]);
printf("%02x ", buffer[3]);
printf("\r\n");
//Shif연산 사용
size = (buffer[3]<<24) | (buffer[2]<<16) | (buffer[1]<<8) | buffer[0];
printf("1]size=0x%lx\r\n", size);
//memcpy 함수 사용
memcpy((unsigned char *)&size, (unsigned char *)&buffer[0], 4);
printf("2]size=0x%lx\r\n", size);
return size/512;
}
출력결과
AVR Test Program1
00 24 3d 2a
1]size=0x2400 <- Shif연산 사용
2]size=0x2a3d2400 <-memcpy 함수 사용
반응형