sizeof 는 run-time에 동적으로 크기를 계산해주는 함수가 아닙니다.
컴파일할때 전처리기(preprocessor)과정에서 size를 결정해 바이너리를 만듭니다.
즉 동적으로 size가 변경되는 경우에는 sizeof를 쓸 수가 없는것입니다.
그냥 GLCD_BMP함수에 넘겨줄때 size를 같이 넘겨주면 되지 않겠습니까?
그럼..
김민조 님이 쓰신 글 :
: 장성호님께서 보신게 맞습니다.
: 4byte로 떨어진다는 걸 몰랐군요.
: 그럼 어떤 식으로 수식을 정해야 할까요?
: BMP[]배열의 크기가 항상 달라지니까(여러가지 그림을 사용할 시)
: 그 배열의 크기를 그 때 그 때 달라지게 해줘야 되는데 어떤 식으로 해야 가능할까요?
: 참고로 배열은 글로벌로 bmp[1024] = {0x00,0x11,...................}; 이런식으로 선언되어 있습니다.
:
:
: 장성호 님이 쓰신 글 :
: : 음..
: : 다른것은 잘모르겠구요
: :
: : 한가지 문제가 있는데..
: :
: : unsigned char *BMP 의 size를 구한 부분에 문제가 있습니다.
: : 코드의 의도를 볼때 BMP변수에 할당된 크기를 구하려고 하는것 같은데
: : 아래 코드는 그냥 포인터변수의 크기 입니다.
: :
: : win32시스템에서는 모든 포인터의 크기는 4Byte입니다.
: :
: :
: : void GLCD_BMP(int page, int column, const unsigned char *BMP)
: : {
: : unsigned int i, k=0;
: :
: : GLCD_xy(page,column);
: : GLCD_xy_row(xcharacter,ycharacter,0);
: :
: : i= sizeof(bmp)/sizeof(bmp[0]);
: : // sizeof(bmp) 는 항상 4가 됨
: : // sizeof(bmp) 는 BMP에 할당된 size를 구하는것이 아니라
: : // BMP변수의 size 즉 포인터의 size임
: : // win32 시스템에서 모든 포인터의 size는 4Byte임
: :
: : while(k <= i)
: : {
: : disp_write(BMP[k]);
: : k++;
: : }
: : }
: :
: :
: :
: : 그럼..
: :
: :
: : 김민조 님이 쓰신 글 :
: : : void GLCD_BMP(int page, int column, const unsigned char *BMP)
: : : {
: : : unsigned int i, k=0;
: : :
: : : GLCD_xy(page,column);
: : : GLCD_xy_row(xcharacter,ycharacter,0);
: : : i= sizeof(bmp)/sizeof(bmp[0]);
: : :
: : : while(k <= i)
: : : {
: : : disp_write(BMP[k]);
: : : k++;
: : : }
: : : }
: : :
: : : 이런식으로 하면 LCD에 BMP가 제대로 뿌려질까요?
: : : bmp는 코드변환프로그램을 이용해서 사용했고요.
: : : GLCD_xy_row()에서 x 어드레스와 y어드레스를 설정한다음
: : : BMP배열의 값을 뿌려주는 형식으로 짠 건데 지금 학교가 아니라서 구동이 되는지 확인을 못하겠네요~
: : : 고수님들의 의견을 듣고 싶습니다.