PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نحوه نمایش عکس ذخیره شده در حافظه فلش خارجی از طریق emWin :



majidma3000
03-04-2014, 14:02
نحوه نمایش عکس ذخیره شده در حافظه فلش خارجی از طریق emWin :


هنگام برنامه نویسی با emWin بیشترین فضای حافظه میکروکنترلر رو عکس ها می گیرن. مثلا اگه شما از ال سی دی 7 اینچ استفاده کنین و بخوایین یه عکس تمام صفحه با فرمت BMP رو نمایش بدین، نمیتونین این کار رو انجام بدین چون این عکس در حافظه فلش داخلی جا نمیشه مگر اینکه بخوایین از فرمت JPEG استفاده کنین که در این حالت هم در بهترین شرایط فقط میتونین یک عکس رو ذخیری کنین و از اونجایی که عکس JPEG دارای کدگذاری پیچیده ایه سرعت نمایش عکس شما هم پایین میاد. در این مقاله با یه روش ساده به شما میگم که چطوری میشه عکس هاتونو از طریق فلش خارجی نمایش بدین.

اول ببینیم چطوری میشه یه عکس رو از طریق حافظه میکروکنترلر نمایش داد و بعد سراغ نمایش عکس از طریق حافظه فلش خارجی متصل شده به LPC1788 میریم.

مثلا ما می خواییم یه عکس با فرمت JPEG رو نمایش بدیم اول باید اون عکس رو تبدیل به یه آرایه در زبان C بکنیم. برای این کار از نرم افزار bin2hex استفاده میکنیم و بعد از طریق تابع زیر اونو نمایش میدیم.

const char img[]={0x20,0x30,0xfa, ............};

GUI_JPEG_Draw(img,sizeof(img),x,y);


در برنامه بالا ما یه آرایه به اسم img تعریف کردیم که کدهای عکس در اون قرار داره در تابع GUI_JPEG_Draw آدرس عکس و سایز عکس به همراه مختصات دریافت می شود. در واقع img آدرس عکس در حافظه میکرو کنترلره و تابع GUI_JPEG_Draw آدرس عکس رو دریافت میکنه. اگه شما از عبارت const استفاده کنین عکس در حافظه فلش (حافظه ذخیره برنامه) و در غیر این صورت عکس در حافظه رم ذخیره میشه. اگه شما به صفحه 14 یوزرمنوال LPC1788 مراجع کنید می بینید که حافظه فلش میکرو (جایی که برنامه در آن ذخیره می شود) در آدرس 0x0000 0000 تا 0x0007 FFFF قرار دارد که اگه عکس رو در این حافظه قرار بدین اشاره گر عکس برابر یه عد در این محدوده میشه، حافظه رم در آدرس 0x1000 0000 تا 0x1000 FFFF قرار داره که اگه عکسو در این حافظه قرار بدین اشاره گر عکس برابر یه مقدار در این محدوده میشه اگه به مموری مپ میکروکنترلر یه نگاه کوچیک بندازین می بینین که بخش بزرگی از آدرس میکروکنترلر به حافظه خارجی اختصاص پیدا کرده .

برای نمایش عکس از حافظه فلش خارجی کافیه که اشاره گر عکستونو به این محدوده ببرین. اگه از هدربوردهای LPC1788 کویرالکترونیک استفاده میکنین، این هدر بورد دارای حافظه فلش 128 مگابایتی که در آدرس 0x8000 0000 تا 0x83FF FFFF قرار گرفته می باشد.
مثلا شما یه عکس با حجم 300 کیلوبایت و با فرمت JPEG در آدرس 0xA000 0000 دارین، برای نمایش عکس اول باید آدرس اونو در یه اشاره گر قرار بدین.


char *img;
در روش بالا شما یه اشاره گر تعریف کردین و باید آدرس اونو برابر 0x8000 0000 قرار بدین، به این صورت img=0x80000000 ، اما یه مشکلی وجود داره، زبان C این اجازه رو به شما نمیده که به صورت مستقیم به اشاره گر آدرس بدین، پس به روش زیر عمل میکنیم:


#define img ((char *) 0x80000000 )


در اینجا ما یه آدرس ثابت تعریف کردیم، که برابر شروع حافظه فلش و عکس میباشد، حالا روی این آدرس می تونیم عملیات جمع و تفریق رو انجام بدیم پس به راحتی میتونیم عکس رو از طریق این آدرس که در فلش خارجی قرار داره نمایش بدیم:


GUI_JPEG_Draw(img,1024*300,0,0);

در برنامه بالا ما یه عکس در حافظه فلش خارجی با سایز 300 کیلوبایت در مختصات 0،0 رو نمایش دادیم، چون باید سایز عکس رو بر حسب بایت به برنامه بدیم 300 رو در 1024 ضرب کردم.

Dr.ROOSTA
03-04-2014, 21:01
دوست من بهتر بود این پست خیلی کاربردیتو تو تاپیک آموزش emwin بزاری . کارتون قابل ارجه ولی اگه اونجا بزارین سرجمع تر می شه

mzarkoob
03-04-2014, 21:52
دوست من بهتر بود این پست خیلی کاربردیتو تو تاپیک آموزش emwin بزاری . کارتون قابل ارجه ولی اگه اونجا بزارین سرجمع تر می شه
سلام
بله در این تایپیک (You can see links before reply) هم قرار دادند و دیگه لزومی به قرار دادن آن در تایپیک مجزا نیست که اصلاح می کنم
البته اون تایپیک خیلی سنگین شده بود و به نظر من از ابتدا بایستی چند تایپیک مجزا برای آن درست میشد که الان بازم باتوجه به ویرایش های گسترده ای که انچام دادم و سر فصلی آقای Doloop (You can see links before reply) گذاشتند بهتر شده
بهتر بود چند تایپیک زده میشد هر کدام مختص نحوه کانفیگ کردن هر کدام از برد های فروشگاه و ال سی دی های اونها که در این (You can see links before reply)پست گذاشتم
و در یک تایپیک دیگه نحوه استفاده از کتابخانه ها مورد بررسی قرار میگرفت
الان خیلی در هم بر همه و مثلا یکی وسط کار که سایر دوستان دارند در مورد نحوه استفاده از فلان دستور صحبت می کنند پابرهنه :mrgreen:میپره و میگه من هنوز نتونستم این emwin را با فلان ال سی دی و فلان برد فروشگاه پورت کنم !