1. 소스 코드


2. 실행 결과


3. 설명

void CreateRoot(void) : 루트 버퍼에 프레임 버퍼와 같은 사이즈의 메모리 공간을 할당한다.

void DrawRoot(void) : 루트 버퍼에 원하는 그림을 그린다.

void UpdateRootToFB(void) : 루트 버퍼에 그려진 이미지를 프레임 버퍼에 복사한다.


프레임 버퍼의 이미지를 LCD 드라이버에서 보여줄때는 한 픽셀씩 순차적으로 그리기 때문에 그리는 도중에 프레임 버퍼가 업데이트 되는 경우에 이전 프레임 버퍼와 섞여 보이는 현상이 생긴다.

이 현상을 Screen tearing라고 하는데 이를 방지하고자 플립폴롭 버퍼링, 트리플 버퍼링을 사용한다.

프레임 버퍼와 같은 사이즈의 루트 버퍼를 2개 만들고 이미지를 그리는 버퍼와 업데이트하는 버퍼를 번갈아가며 진행하면 된다.

Screen tearing : https://en.wikipedia.org/wiki/Screen_tearing


출처 : http://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html






[Reference]

(copy와 flip - Double buffering의 2가지 기법) http://blog.seulgi.kim/2014/05/flip-copy-double-buffering-2.html


[임베디드 리눅스] 프레임 버퍼 - Memory Mapping (메모리 맵핑)


1. 소스 코드


2. 설명

커널단의 디바이스 메모리 주소와 소스 코드의 포인터를 메모리 맵핑으로 연결하여 입출력 제어

출처 : http://www.tutorialsdaddy.com/courses/linux-device-driver/8501-mmap/




[Reference]

(메모리 맵핑) http://mintnlatte.tistory.com/357

(메모리 맵) http://no1rogue.blog.me/30097158983

(mmap) http://www.tutorialsdaddy.com/courses/linux-device-driver/8501-mmap/

[임베디드 리눅스] Frame Buffer (프레임 버퍼) 다루기


1. 소스 코드


2. 실행 결과

# /mnt/mmc# ./fb_test
Can't access /dev/fb

# /mnt/mmc# ./fb_test 0 ********************************************************* ** FRAME BUFFER INFO ** ********************************************************* frame buff open (/dev/fb0) screen width = 240 screen height = 320 bits per pixel = 32 line length = 960 memory size = 307200

# /mnt/mmc# ./fb_test 1 ********************************************************* ** FRAME BUFFER INFO ** ********************************************************* frame buff open (/dev/fb1) screen width = 320 screen height = 240 bits per pixel = 32 line length = 1280 memory size = 307200


3. 설명

프레임 버퍼란 LCD 디바이스의 입출력 데이터를 저장 및 송수신하는 구간으로 /dev/fb 파일의 읽고 쓰기로 제어가 가능하다.

사진 출처 : http://www.slideshare.net/chon2010/ss-5653835





[Reference]

(access 함수) http://forum.falinux.com/zbxe/index.php?document_srl=412987&mid=C_LIB

(ioctl 함수) http://damduc.tistory.com/216

(frame buffer 이야기) http://elechole.tistory.com/237

(The Frame Buffer Device API) https://www.kernel.org/doc/Documentation/fb/api.txt

+ Recent posts