در قسمت چهارم از آموزش LVGL به بررسی شروع کار با LVGL، دانلود و اضافهکردن کتابخانه LVGL و انجام تنظیمات اولیه lv_conf.h پرداختیم. در این قسمت قصد داریم که درباره انجام تنظیمات فریم بافر LVGL صحبت کنیم. پس تا پایان این بخش همراه سیسوگ باشید.
فریم بافر یک حافظه موقت مانند GRAM و LCD RAM است. در نمایشگرهای دارای درایور، GRAM یک فریم بافر درون درایور است و در نمایشگرهای بدون درایور، فریم بافر موجود در LCD RAM میباشد.
اکنون میریم سراغ بحث تنظیمات فریم بافر. البته ابتدا بررسی میکنیم که فریم بافر چیست.
بهطورکلی، فریم بافر یک حافظهی موقت میباشد که حاوی تصویر خروجی است و این حافظه توسط پردازنده در زمانهای مشخص به صفحهنمایش انتقال داده میشود.
سیستمهای گرافیکی برای نمایش اطلاعات به کاربر باید آنها را به صفحهنمایش انتقال دهد. وظیفه فریم بافرها این است که این اطلاعات را بهصورت موقت نگهداری کنند تا توسط CPU یا بخش GPU به نمایشگر منتقل شوند.
دراینخصوص، سیستم گرافیکی به کمک فریم بافرها اطلاعات تصویر را جابهجا میکند که تعداد این فریم بافرها قابلتغییر است. اندازه این فریم بافرها میتواند بخشی از تصویر یا اندازه کل تصویر باشد. سیستم گرافیکی این فریم بافرها را کنترل و بهروزرسانی میکند و سپس پردازنده آنها را به صفحهنمایش انتقال میدهد.
در شکل زیر فریم بافری که نمایش داده شده، به صورت Full است؛ یعنی فریم بافر شما چه در حافظه داخلی و چه در حافظه خارجی، به اندازه کل تصویر است و تصویر ابتدا داخل فریم بافر تشکیل میشود و سپس این فریم بافر توسط سختافزار به صفحهنمایش انتقال پیدا میکند.
انواع فریم بافر در LVGL از نظر تعداد عبارتاند از:
بهطورکلی، در سیستم گرافیکی LVGL، فریم بافرها از نظر تعداد بهصورت تک بافر یا دو بافر هستند. تک بافر یعنی یک بافر کامل یا یک بافر کوچک. دو بافر یعنی دو تا بافر کامل یا دو تا بافر کوچک.
در سیستم گرافیکی LVGL، فریم بافرها از نظر روش انتقال به تصویر به سه بخش زیر تقسیم میشوند:
در ادامه به بررسی هر یک از این موارد میپردازیم.
حالت تک بافر به این صورت هست که سیستم گرافیکی، تصویر را بهصورت بخشبخش یا کامل از طریق فریم بافری که در اختیارش قرار دادیم، به صفحهنمایش منتقل میکند.
پس یک بافر فقط در اینجا وجود دارد.
در این حالت دو بافر در اختیار CPU هست که سیستم گرافیتان با توجه به این دو تا فریم بافری که در اختیارش میدهید، تصویر را پر میکند.
در صورتی که سیستم گرافیکی شما این قابلیت را داشته باشد که بافرها را به صورت جداگانه با یک ویژگی سختافزاری پر کند، این قابلیت Two buffer کمک میکند که شما Refresh Rate بالاتری داشته باشید. اندازه این فریم بافرها کاملاً به اندازه حافظهای که در اختیار میکروکنترلر هست، بستگی دارد.
در این حالت، سیستم گرافیکی ابتدا فریم بافر ۱ را پر میکند، سپس فریم ۱ توسط یک واحد سختافزاری به صفحهنمایش (Display) منتقل میشود؛ در حین این انتقال، سیستم گرافیکی، فریم بافر ۲ را پر میکند و فریم ۲ بعد از اتمام انتقال فریم ۱، به صفحهنمایش منتقل میشود. به شکل زیر توجه کنید:
این حالت به صورت تکهتکه، تصویرتان را میبرد و سپس به داخل Display میریزد. به عبارت دیگر، در این حالت تصاویر به صورت فریمهای کوچک به صفحهنمایش انتقال داده میشوند.
از مهمترین ویژگیهای Partial mode میتوان به موارد زیر اشاره کرد:
به تصویر زیر توجه کنید:
در این حالت که برای میکروکنترلرهای قویتر میباشد، تصاویر به صورت کامل روی فریم بافر تشکیل و پس از آن به Display منتقل میشوند.
زمانی که شما از حالتFull refresh استفاده میکنید، نیاز به حافظه موقت بزرگ دارید. یعنی در این حالت، وجود حافظه موقت حداقل به اندازهی کل تصویر در سیستم گرافیکی، الزامی است. در اینجا فریم بافر میتواند داخل یک حافظه موقت داخلی یا حافظه موقت خارجی باشد که هیچ فرقی ندارد.
به شکل زیر توجه کنید:
* در حالت Full refresh شما میتوانید دو بافر هم داشته باشید.
* اگر سختافزار شما قوی باشد، Full refresh mode به افزایش نرخ تصویرتان کمک میکند و اگر سختافزار شما قوی نباشد، نمیتوانید از این ویژگی بهره کامل را ببرید و در صورت استفاده از آن، تازه سیستمتان کند میشود.
در این حالت شما به صورت Direct mode کار میکنید. Direct mode ترکیبی از مدهای Full refresh و Partial mode هست.
در Direct mode تغییرات در فریم بافر به صورت مستقیم از مکانهای مختلف به تصویر انتقال پیدا میکند.
به شکل زیر توجه کنید:
*Direct mode حالت دابل بافر (Double Buffer) هم دارد؛ اما یک سری اطلاعاتی نیاز هست که شما داشته باشید و یک سری هماهنگ سازیهایی هست که شما باید همزمان با کپی کردن بافر، انجام دهید.
* تنظیمات همه بافرهایی که توضیح داده شد در قسمت Creat a display buffer انجام میشود که درباره آن به طور مفصل در قسمتهای بعدی توضیح خواهیم داد.
خب…
این قسمت از آموزش سیستم گرافیکی LVGL هم به پایان رسید. حتماً در ادامه این آموزش، با سیسوگ همراه باشید.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.