آموزش LVGL, توصیه شده, کتابخانه

بررسی انواع فریم بافر در LVGL + انجام تنظیمات فریم بافر | قسمت پنجم آموزش سیستم گرافیکی LVGL

قسمت پنجم LVGL

در قسمت چهارم از آموزش LVGL به بررسی شروع کار با LVGL، دانلود و اضافه‌کردن کتابخانه LVGL و انجام تنظیمات اولیه lv_conf.h پرداختیم. در این قسمت قصد داریم که درباره انجام تنظیمات فریم بافر LVGL صحبت کنیم. پس تا پایان این بخش همراه سیسوگ باشید.

فریم بافر یک حافظه‌ موقت مانند GRAM و LCD RAM است. در نمایشگرهای دارای درایور، GRAM یک فریم بافر درون درایور است و در نمایشگرهای بدون درایور، فریم بافر موجود در LCD RAM می‌باشد.

اکنون میریم سراغ بحث تنظیمات فریم بافر. البته ابتدا بررسی می‌کنیم که فریم بافر چیست.

بلوک دیاگرام نحوه‌ی انتقال تصویر به صفحه‌نمایش در نمایشگرهای دارای درایور و نمایشگرهای بدون درایور

شکل ۱: بلوک دیاگرام نحوه‌ی انتقال تصویر به صفحه‌نمایش در نمایشگرهای دارای درایور و نمایشگرهای بدون درایور

تعریف فریم بافر (Framebuffer)

به‌طورکلی، فریم بافر یک حافظه‌ی موقت می‌باشد که حاوی تصویر خروجی است و این حافظه توسط پردازنده در زمان‌های مشخص به صفحه‌نمایش انتقال داده می‌شود.

وظیفه فریم بافر

سیستم‌های گرافیکی برای نمایش اطلاعات به کاربر باید آنها را به صفحه‌نمایش انتقال دهد. وظیفه فریم بافرها این است که این اطلاعات را به‌صورت موقت نگهداری کنند تا توسط CPU یا بخش GPU به نمایشگر منتقل شوند.

دراین‌خصوص، سیستم گرافیکی به کمک فریم‌ بافرها اطلاعات تصویر را جابه‌جا می‌کند که تعداد این فریم بافرها قابل‌تغییر است. اندازه این فریم بافرها می‌تواند بخشی از تصویر یا اندازه کل تصویر باشد. سیستم گرافیکی این فریم بافرها را کنترل و به‌روزرسانی می‌کند و سپس پردازنده آنها را به صفحه‌نمایش انتقال می‌دهد.

تعریف فریم بافر (Framebuffer)

شکل ۲: انتقال داده به صفحه‌نمایش توسط فریم بافرها

مثال:

در شکل زیر فریم بافری که نمایش داده شده، به صورت Full است؛ یعنی فریم بافر شما چه در حافظه داخلی و چه در حافظه خارجی، به اندازه کل تصویر است و تصویر ابتدا داخل فریم بافر تشکیل می‌شود و سپس این فریم بافر توسط سخت‌افزار به صفحه‌نمایش انتقال پیدا می‌کند.

انتقال داده به صفحه‌نمایش توسط یک فریم

شکل ۳: انتقال داده به صفحه‌نمایش توسط یک فریم

انواع فریم بافر در LVGL

انواع فریم بافر در LVGL از نظر تعداد عبارت‌اند از:

  • One buffer
  • Two buffers

به‌طورکلی، در سیستم گرافیکی LVGL، فریم بافرها از نظر تعداد به‌صورت تک بافر یا دو بافر هستند. تک بافر یعنی یک بافر کامل یا یک بافر کوچک. دو بافر یعنی دو تا بافر کامل یا دو تا بافر کوچک.

انواع روش‌های انتقال فریم به تصویر در LVGL

در سیستم گرافیکی LVGL، فریم بافرها از نظر روش انتقال به تصویر به سه بخش زیر تقسیم می‌شوند:

  • Partial mode
  • Full refresh mode
  • Direct mode

در ادامه به بررسی هر یک از این موارد می‌پردازیم.

حالت تک بافر (One buffer)

حالت تک بافر به این صورت هست که سیستم گرافیکی، تصویر را به‌صورت بخش‌بخش یا کامل از طریق فریم بافری که در اختیارش قرار دادیم، به صفحه‌نمایش منتقل می‌کند.

پس یک بافر فقط در اینجا وجود دارد.

حالت تک بافر (One buffer)

شکل ۴: حالت تک بافر (One buffer)

حالت دو بافر (Two buffer)

در این حالت دو بافر در اختیار CPU هست که سیستم گرافیتان با توجه ‌به این دو تا فریم بافری که در اختیارش می‌دهید، تصویر را پر می‌کند.

در صورتی که سیستم گرافیکی شما این قابلیت را داشته باشد که بافرها را به صورت جداگانه با یک ویژگی سخت‌افزاری پر کند، این قابلیت Two buffer کمک می‌کند که شما Refresh Rate بالاتری داشته باشید. اندازه این فریم بافرها کاملاً به اندازه حافظه‌ای که در اختیار میکروکنترلر هست، بستگی دارد.

در این حالت، سیستم گرافیکی ابتدا فریم بافر ۱ را پر می‌کند، سپس فریم ۱ توسط یک واحد سخت‌افزاری به  صفحه‌نمایش (Display) منتقل می‌شود؛ در حین این انتقال، سیستم گرافیکی، فریم بافر ۲ را پر می‌کند و فریم ۲ بعد از اتمام انتقال فریم ۱، به صفحه‌نمایش منتقل می‌شود. به شکل زیر توجه کنید:

حالت دو بافر (Two buffer)

شکل ۵: حالت دو بافر (Two buffer)

حالت انتقال تصویر Partial

این حالت به صورت تکه‌تکه، تصویرتان را می‌برد و سپس به داخل Display می‌ریزد. به عبارت دیگر، در این حالت تصاویر به صورت فریم‌های کوچک به صفحه‌نمایش انتقال داده می‌شوند.

از مهم‌ترین ویژگی‌های Partial mode می‌توان به موارد زیر اشاره کرد:

  • بهینه‌سازی حافظه موقت برای انتقال تصویر
  • امکان انجام عملیات pipeline برای انتقال تصویر
  • قابل پیاده سازی در بیشتر میکروکنترلرها
  • افزایش سرعت انتقال تصویر و کاهش سربار دستوری

به تصویر زیر توجه کنید:

حالت انتقال تصویر Partial

شکل ۶: Partial mode

حالت انتقال تصویر Full refresh

در این حالت که برای میکروکنترلرهای قوی‌تر می‌باشد، تصاویر به صورت کامل روی فریم بافر تشکیل و پس از آن به Display منتقل می‌شوند.

زمانی که شما از حالتFull refresh  استفاده می‌کنید، نیاز به حافظه موقت بزرگ دارید. یعنی در این حالت، وجود حافظه موقت حداقل به اندازه‌ی کل تصویر در سیستم گرافیکی، الزامی است. در اینجا فریم بافر می‌تواند داخل یک حافظه موقت داخلی یا حافظه موقت خارجی باشد که هیچ فرقی ندارد.

به شکل زیر توجه کنید:

حالت انتقال تصویر Full refresh

شکل ۷: Full refresh mode

نکته✅

* در حالت Full refresh شما می‌توانید دو بافر هم داشته باشید.

* اگر سخت‌افزار شما قوی باشد، Full refresh mode به افزایش نرخ تصویرتان کمک می‌کند و اگر سخت‌افزار شما قوی نباشد، نمی‌توانید از این ویژگی بهره کامل را ببرید و در صورت استفاده از آن، تازه سیستمتان کند می‌شود.

حالت انتقال تصویر Direct mode

در این حالت شما به صورت Direct mode کار می‌کنید. Direct mode ترکیبی از مدهای Full refresh و Partial mode هست.

در Direct mode تغییرات در فریم بافر به صورت مستقیم از مکان‌های مختلف به تصویر انتقال پیدا می‌کند.

  • افزایش نرخ بالاتر فریم تصویر
  • بهینه‌سازی عملکرد CPU برای انتقال تصویر
  • امکان انجام عملیات pipeline برای انتقال تصویر
  • نیاز به حافظه خارجی کمتر نسبت به حالت قبل

 به شکل زیر توجه کنید:

حالت انتقال تصویر Direct mode

شکل ۸: Direct mode

نکته✅

*Direct mode حالت دابل بافر (Double Buffer) هم دارد؛ اما یک سری اطلاعاتی نیاز هست که شما داشته باشید و یک سری هماهنگ سازی‌هایی هست که شما باید هم‌زمان با کپی کردن بافر، انجام دهید.

* تنظیمات همه بافرهایی که توضیح داده شد در قسمت Creat a display buffer انجام می‌شود که درباره آن به طور مفصل در قسمت‌های بعدی توضیح خواهیم داد.

خب…

این قسمت از آموزش سیستم گرافیکی LVGL هم به پایان رسید. حتماً در ادامه این آموزش، با سیسوگ همراه باشید.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *