Firefly开源社区

[技术讨论] 【ROC-RK3568-PC开发板试用体验】HDMI刷屏测试

发表于 2022-9-16 11:24:37     
本帖最后由 Firefly搬运工 于 2022-9-16 11:25 编辑

参考【ROC-RK3568-PC开发板试用体验】ssh登录root与第一个c程序的ssh登录配置等


pt install lrzsz安装sz rz工具
rz是导入文件到开发板
sz相反
安装后,crt中ssh登录开发板后,就可以输入rz回车
自动弹出选择文件对话框选择文件,点击Add点击Ok就可发送到开发板


sz 文件名
则从开发板下载到本地
输出的路径可以配置
右键点击连接->Session Options...


配置上传下载路径如下


Framebuffer测试代码
  1. #include <stdint.h>

  2. #include <stdio.h>

  3. #include <unistd.h>

  4. #include <stdlib.h>

  5. #include <string.h>

  6. #include <fcntl.h>

  7. #include <errno.h>

  8. #include <sys/mman.h>

  9. #include <sys/ioctl.h>

  10. #include <sys/mman.h>

  11. #include <sys/types.h>

  12. #include <sys/stat.h>

  13. #include <linux/fb.h>

  14. int main(int argc, char *argv[])

  15. {

  16. int fd = -1;

  17. int ret = -1;

  18. uint8_t *p_fb = 0;

  19. struct fb_fix_screeninfo finfo;

  20. struct fb_var_screeninfo vinfo;

  21. memset(&finfo,0,sizeof(finfo));

  22. memset(&vinfo,0,sizeof(vinfo));

  23. fd = open(argv[1],O_RDWR);

  24. if(fd < 0)

  25. {

  26. fprintf(stderr,"open %s err, %s\n",argv[1],strerror(errno));

  27. return -1;


  28. }

  29. ret = ioctl(fd, FBIOGET_FSCREENINFO, &finfo);

  30. if(ret < 0)

  31. {

  32. fprintf(stderr,"ioctl finfo err, %s\n",strerror(errno));

  33. close(fd);

  34. return -1;



  35. }

  36. ret = ioctl(fd, FBIOGET_VSCREENINFO, &vinfo);

  37. if(ret < 0)

  38. {

  39. fprintf(stderr,"ioctl vinfo err, %s\n",strerror(errno));

  40. close(fd);

  41. return -1;

  42. }

  43. unsigned long len = vinfo.xres_virtual  * vinfo.yres_virtual * vinfo.bits_per_pixel / 8;

  44. p_fb = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

  45. if(p_fb == NULL)

  46. {

  47. fprintf(stderr,"mmap len %ld err\n",len);

  48. close(fd);

  49. return -1;

  50. }

  51. fprintf(stderr,"x = %d y = %d bits = %d len = %ld\n",vinfo.xres_virtual,vinfo.yres_virtual,vinfo.bits_per_pixel,len);

  52. volatile int times = 30;

  53. while(times--)

  54. {

  55. if(vinfo.bits_per_pixel == 16)

  56. {

  57. for(unsigned int i=0; i< len/2; )

  58. {

  59. *((uint16_t*)(p_fb + i)) = 0xF800;

  60. i+=2;


  61. }

  62. usleep(atoi(argv[2])*1000);

  63. for(unsigned int i=0; i< len/2;)

  64. {

  65. *((uint16_t*)(p_fb + i)) = 0x07E0;

  66. i+=2;


  67. }

  68. usleep(atoi(argv[2])*1000);

  69. for(unsigned int i=0; i< len/2;)

  70. {

  71. *((uint16_t*)(p_fb + i)) = 0x001F;

  72. i+=2;

  73. }

  74. usleep(atoi(argv[2])*1000);


  75. }

  76. else

  77. {

  78. for(unsigned int i=0; i< len/4; )

  79. {


  80. *((uint32_t*)(p_fb + i)) = 0xFF0000;

  81. i+=4;

  82. }

  83. usleep(atoi(argv[2])*1000);

  84. for(unsigned int i=0; i< len/4;)

  85. {

  86. *((uint32_t*)(p_fb + i)) = 0x00FF00;

  87. i+=4;


  88. }

  89. usleep(atoi(argv[2])*1000);

  90. for(unsigned int i=0; i< len/4;)

  91. {

  92. *((uint32_t*)(p_fb + i)) = 0x0000FF;

  93. i+=4;


  94. }

  95. usleep(atoi(argv[2])*1000);


  96. }


  97. }

  98. munmap(p_fb,len);

  99. close(fd);

  100. return 0;


  101. }
复制代码

rz导入到开发板

编译
  1. gcc framebuffer.c  -o framebuffer
复制代码

运行
  1. ./framebuffer /dev/fb0 200
复制代码

可以看到以200ms间隔 rgb刷屏 30次。





总结


测试framebuffer和hdmi显示ok,后续就可以基于此进行相应的图形程序的开发。
比如移植lvgl等。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表