NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3669 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 3 از 3

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

  1. #1
    کاربر علاقه مند majidma3000 آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    حسین منصوری
    نوشته ها
    92
    تشکر
    7
    تشکر شده 189 بار در 45 پست

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

    نحوه نمایش عکس ذخیره شده در حافظه فلش خارجی از طریق 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 ضرب کردم.
    ویرایش توسط majidma3000 : 03-04-2014 در ساعت 16:44

  2. کاربران : 13 تشکر کرده اند از شما majidma3000 برای ارسال این پست سودمند:


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  4. #2
    کاربر فعال Dr.ROOSTA آواتار ها
    تاریخ عضویت
    Jun 2012
    نام
    اسماعیل
    نوشته ها
    136
    تشکر
    336
    تشکر شده 234 بار در 79 پست

    پیش فرض

    دوست من بهتر بود این پست خیلی کاربردیتو تو تاپیک آموزش emwin بزاری . کارتون قابل ارجه ولی اگه اونجا بزارین سرجمع تر می شه
    پروردگارا مرا پاک بپذیر ......

  5. #3
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط Dr.ROOSTA نمایش پست ها
    دوست من بهتر بود این پست خیلی کاربردیتو تو تاپیک آموزش emwin بزاری . کارتون قابل ارجه ولی اگه اونجا بزارین سرجمع تر می شه
    سلام
    بله در این تایپیک هم قرار دادند و دیگه لزومی به قرار دادن آن در تایپیک مجزا نیست که اصلاح می کنم
    البته اون تایپیک خیلی سنگین شده بود و به نظر من از ابتدا بایستی چند تایپیک مجزا برای آن درست میشد که الان بازم باتوجه به ویرایش های گسترده ای که انچام دادم و سر فصلی آقای Doloop گذاشتند بهتر شده
    بهتر بود چند تایپیک زده میشد هر کدام مختص نحوه کانفیگ کردن هر کدام از برد های فروشگاه و ال سی دی های اونها که در این پست گذاشتم
    و در یک تایپیک دیگه نحوه استفاده از کتابخانه ها مورد بررسی قرار میگرفت
    الان خیلی در هم بر همه و مثلا یکی وسط کار که سایر دوستان دارند در مورد نحوه استفاده از فلان دستور صحبت می کنند پابرهنه میپره و میگه من هنوز نتونستم این emwin را با فلان ال سی دی و فلان برد فروشگاه پورت کنم !

  6. تشکرها از این نوشته :


موضوعات مشابه

  1. آموزش emWin
    توسط majidma3000 در انجمن LPC series (NXP)
    پاسخ: 1103
    آخرين نوشته: 30-08-2020, 23:50

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •