arm linux framebuffer
fbfd = open("/dev/fb0", O_RDWR);
char *fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);
printf("start memset test...\n");
gettimeofday (& before, NULL);
int i; for(i = 10; i > 0; i--){
memset(fbp, 0xff, screensize);
memset(fbp, 0x00, screensize);
}
gettimeofday (& after, NULL); t = after.tv_sec - before.tv_sec + (double)(after.tv_usec -before.tv_usec)/1000000;
printf("memset 20 test: %f\n\n", t);
printf("\n\nstart write test...\n");
char * buff = alloca(screensize);
memset(buff, 0xaa, screensize);
char * buff2 = alloca(screensize);
memset(buff2, 0xf0, screensize);
gettimeofday (& before, NULL);
for(i = 10; i > 0; i--){
close(fbfd);
fbfd = open("/dev/fb0", O_RDWR);
write(fbfd, buff, screensize);
close(fbfd);
fbfd = open("/dev/fb0", O_RDWR);
write(fbfd, buff2, screensize);
}
gettimeofday (& after, NULL);
t = after.tv_sec - before.tv_sec + (double)(after.tv_usec - before.tv_usec)/1000000;
printf("close open write 20 test: %f\n\n", t);
##############################
И вот что на выходе:
start memset test... memset 20 test: 2.163977
start write test... close open write 20 test: 0.754604
Что-то уж очень медленно. Почему второй вариант быстрее первого? Может кто знает что можно почитать про framebuffer для embedded линуксов, а ещё лучше про линуксы на arm-ах?
Заранее спасибо.