سلام وقتی تو sdram bufer صفحه ای که در حال نمایش هست با سرعت زیاد اطلاعات بریزم
مثلا نوشتن متن ، ال سی دی کمی تصویرش میریزه بهم،به نظرم دسترسی به حافظه توسط ldtc و cpu بصورت همزمان این مشکل رو ایجاد می کنه،
کسی پیشنهادی نداره جهت رفع مشکل؟
سلام وقتی تو sdram bufer صفحه ای که در حال نمایش هست با سرعت زیاد اطلاعات بریزم
مثلا نوشتن متن ، ال سی دی کمی تصویرش میریزه بهم،به نظرم دسترسی به حافظه توسط ldtc و cpu بصورت همزمان این مشکل رو ایجاد می کنه،
کسی پیشنهادی نداره جهت رفع مشکل؟
سلام
میتونی از Double Buffering استفاده کنی. توی شکل زیر مشخص هست منظورم چیه. از اونجا که ریت نمایش دیتا نسبت به پردازش بیشتر هست باید یک زمان بندی مناسب داشته باشی (میتونی حتی schedular خودت رو بنویسی) وگرنه همون طور که گفتی data corruption اتفاق میفته. . شما اول ۲ تا thread احتیاج داری. که یکی میتونه همون main thread باشه و thread دوم هم برای display هست. thread display که نمایش دادم فقط وظیفش نمایش اطلاعات از یک حافظه معین هست (BUFFER2). همزمان thread1 هر از چند گاهی میاد و اطلاعات Buffer1 رو به Buffer2 منتقل میکنه. برای جلو گیری از data corruption میتونی از Mutex استفاده کنی که اگر هنگام خوندن Buffer2 دستور Copy هم صادر شده باشه توسط Mutex Block بشه.
دستت درد نکنه،یعنی راهی بهتر از دبل بافرینگ نیست؟
اون اصلاح mutex چی هست؟ نشنیدم تا حالا!
راههایی که امتحان کردم اما بدرد نخوردند
یکی اینکه کلاک ldtc رو خیلی کم و خیلی زیاد کردم
یکی اینکه ldtc رو زمان نوشتن دیزبل کردم اما تاثیری نداشت
دبل بافرینگ برای لایه اول و دوم 4 پیج میشه یعنی
۸۰۰*۴۸۰*۲*۴ بایت
یعنی ۳ مگابایت برای اینکار
عکس رو در صورت امکان تو همین سایت آپ کن
عکس پیدا نیست
در مورد روشی که گفتی
در صورت امکان با جزییات بیشتر اگه تونستی بگی که دمت بیشتر گرم
این راهی هست که من خودم برای درایور یک پروتکل تحت شبکه استفاده میکنم که باید بسته های UDP رو که به صورت Burst میان از سوکت شبکه بگیره تحلیل کنه و تحویل بخش های دیگه نرم افزار بده. این کاری که من پیشنهاد کردم رو فقط وقتی که سرعت عمل از فضای اشغال شده برات اهمیت بیشتر داره میتونی استفاده کنی چون عملا داری یک کپی دیگه از فریمت ذخیره میکنی. همچنین اگر دسترسی به حافظه خارجی برات زمان بر هست هم باید بیخیال این کار بشی. توجه داشته باش که من به صورت پیش فرض در نظر گرفتم که شما داری از یک real time operating system استفاده میکنی مثل مثلا FreeRTOS یا RTX. برای همین گفتم از Mutex استفاده کنی. در سیستم عامل ها Mutex برای دسترسی چند پروسه هم زمان (thread) به یک سخت افزار استفاده میشن. Mutex اجازه دسترسی فقط و فقط یک thread به سخت افزار رو میده(برای مثال ما حافظه). برای اطلاعات بیشتر به https://www.keil.com/pack/doc/CMSIS/...utex_mgmt.html
یک سر بزن.
اگر هم از سیستم عامل استفاده نمیکنی, میتونی از interrupt یک تایمر استفاده کنی. برای مثال تایمر هر ۱۰ میلی ثانیه interrupt میده و داخل ISR مربوطه هرچی دیتا داخل buffer هست رو نمایش بده. البته این کار با بزرگتر شدن پروژه کند تر و کندتر میشه و همچنین هیچ memory protection هم نداری ولی خوب برای کار ابتدایی خوب هست.
عکس هم والا من توی همین سایت آپلود کردم نمیدونم چرا نمایش نمیده الان که شما گفتی با یک مرورگر دیگه چک کردم دیدم نشون نمیده!
ویرایش توسط hossein1387 : 03-12-2015 در ساعت 07:28
ممنون بخاطر توضیحات
من با سیستم عامل تا حالا کار نکردم
یعنی بکارم نیومده، کل پروسه رو خودم دارم انجام میدم ، فضای استفاده شده اینجا خیلی برام مهم نیست با 429 خیلی کار نکردم باید بررسی کنم ببینم واحد dma2d چقدر تاثیر داره تو این قسمت
حجم برنامه زیاده و اینکار کمی وقت رو میگیره ، ببینم چیکار می تونم بکنم
دستت درست و موفق باشی
سلام مجدد
به خاطر درک بهتر مطلب بالا نشستم یکبار دیگه مباحث مربوط به dma2d و ldtc رو دارم میخونم دقیق
یه جاهایش برام مفهوم نیست ، اگر کسی راهنمایی کنه ممنون میشم
قابلیتهای dma2d و ldtc تو خیلی موارد مشترک هستن
مثل پشتیبانی از دو لایه و تبدیل فرمت و ... که با همدیگه همسان هستن
با این حساب میشه از ldtc بدون استفاده از dma2d استفاده کرد و تصویر رو نمایش داد و یا اینکه از هر دو واحد همزمان استفاده کرد
البته قابلیت تایمر dma2d جهت جلوگیری از اشغال بیش از حد باس تو این موضوع برام جالب بود که بهش دقت نکرده بودم و اینجا میبینم که بکار همین مورد من میاد ولی فرصت نشده ازش استفاده کنم
این همه داستان گفتم این رو بپرسم
اول اینکه این مطلبی که الان گفتم همش درسته یا نه؟
دوم اینکه آدرسهای لایه 1 و 2 dma2d و ldtc چه ربطی با هم دارن هردو یکی هستن یا اینکه تفاوت دارن؟
سوم اینکه اگر فرق دارن این آدرسها میشه گفت اینم یه جور دبل بافرینگ هست؟
و چهارم اینکه مثالی برای استفاده همزمان از این دو واحد کسی نداره یا لینکی یا کلید جستجو؟
ممون
سلام امکان اتصال lcd 7" 50pin به صورت مستقیم به این پردازنده وجود داره ؟؟؟ البته بدون استفاده از درایور ssd1963 و مثل پردازنده lpc1788 پینهای ال سی دی مستقیم به پردازنده وصل بشوند و همچنین برای بک لایت و تاچ هم از راه انداز جداگونه استفاده کنم ؟؟؟
البته که هست
_____________________________________
_____________________________________
منم این مشکل شما رو داشتم. مشکل توی تاخیرهایی هست که موقع اینیشیال SDRAM تنظیم کردی.
این تاخیرها خیلی مهمند. باید با دیتاشیت SDRAM مطابقت داشته باشه.
من از K4S561632C استفاده کردم.
یه نکته دیگه اینه که اگه NAND و SDRAM رو با FMC راه اندازی کردید باید ورژن میکرو بالاتر از Ver3 باشه.
خوبه به Errata این پروسسور یه نگاهی بندازید.
موفق باشید.