پاسخ : آموزش winavr و avrlib - مهاجرت از codevision به winavr avr gcc
ولله اینجور مواقع شاید زیاد وسواسی بنظر برسم. ولی تا بحال چندین و چند بار رعایت اینگونه موارد کارم رو راه انداخته. فعلا براتون بگم که این مسئله هفت هشت سیکل نیست. بعضی وقتها ممکنه حتی یک سیکل هم مسئله ساز باشه.
دقیقا به خاطر همین مسئله هست که روی آرم با اون سرعتش چیزی بنام FIQ کنار IRQ داریم. البته من خودم تا بحال با FIQ کار نکردم ولی موردی که چند سال پیش بهش برخوردم این بود که میخواستم بدون استفاده از سخت افزار کمکی از سیستمی اطلاعات بگیرم که اون امکانی برای ارسال اطلاعاتش به من نداشت ولی هر 100 میلی ثانیه یکبار اطلاعاتی رو با فرکانس 20 کیلو هرتز روی یک سخت افزار دیگه ارسال میکرد. کنار اون خط سریالی هم داشتم که میبایستی پاسخ زمانی تقریبی 3 میلی ثانیه ای داشته باشه. اونجا مجبور شدم روال وقفه رو به اسمبلی بنویسم و دقیقا روی میکرو ثانیه هایم هم حساب باز کنم. چون در زمان پیک چیزی حدود 20 درصد وقت میکرو برای اسکن سیگنالها حروم میشد. برای پیاده سازی پروتکل سریال هم از ماشین حالت استفاده کردم. نتجه کار عالی بود. یعنی میکروی mega64 من با فرکانس کلاک 7.3728 خیلی از مواقع وقت زیادی برای تلف کردن داشت.
یا جای دیگه ای برای پردازش گرافیکی اطلاعات برای شبیه سازی یک پرینتر مجبور شدم کلیه ترکیبات قرار دهی یک بیت پترن 8 بیتی رو داخل یک بیت پترن 128 بیتی دیگه به اسمبلی بنویسم تا حداکثر زمان اجرا برای بدترین ترکیبات حداکثر یک میکروثانیه باشه. با ذکر تمامی این موارد میشد کار رو انجام داد.
حرف من اینه: اغلب موارد به این چیزا برنمیخوری اما باید دید درستی داشته باشی درست مثل قضیه PSTR که اشاره شد. چون ممکنه مین زیر پای خودت رها کنی. بعد تا بیای مشکلت رو حل کنی بقولی دم گاو بزمین اومده.
اصولا شما نه تنها راجع به سرعت اجرا ... راجع به هر resourceی وقتی به مرز 80 درصد حدی رسیدی باید با احتیاط کامل جلو بری. plc کار ها عمدتا عادت دارن برای پیاده سازی یک مدل اینو در نظر میگیرن که مثلا اگر تعدادی تایمر احتیاج داشته باشن 20 درصد برای مقاصد توسعه ای رزرو در نظر میگیرن و 20 درصد هم برای رفع اشتباهات طراحی. و اگه یک plc این تعداد تایمر رو نداشت یک مدل بالاتر انتخاب میکنن. اما من یکی (شخصا) غیر از این موردها عادت دارم حتی المقدور حجم resource کمتری مصرف کنم تا حجم منابع در دسترس ماکزیمم باشه. چون معمولا سخته بخوای برای یک اشتباه کوچیک کل طراحی سخت افزارت رو عوض کنی.
نمیدونم تجربه سروکله زدن با سخت افزارهای متفاوت رو داشتی یا نه؟ اما بذار چیزی برات تعریف کنم. آمیگا 500. سیستمی تک با چند پروسسور. 68000 - agnes - denis - paula - clipper و غیره. اینا اسامی تجاری پروسسورهاشه. 512 کیلو بایت اول حافظه بطور مشترک توسط همه این پروسسورها مورد دسترسی قرار میگیره. معمولا برای هماهنگی مکانیسم buslock استفاده میشه. ولی در آمیگا برای حداکثر قدرت اینجوری نیست. 68000 در سیکل های زوج و بقیه در سیکل های فرد به این حافظه دسترسی پیدا میکنن. اصل کار با 68000 انجام میشه پس اون نباید سرعتش کاهش پیدا کنه. ولی بقیه با هم باید هماهنگ باشن. اگر قرار بود راه حل های به اصطلاح استاندارد استفاده بشه همون مکانیسم برای هماهنگی تمام پروسسورها استفاده میشد و آمیگا 500 این چیزی که حالا هست نبود. اینو میگن: the ART of computer programming
ولله اینجور مواقع شاید زیاد وسواسی بنظر برسم. ولی تا بحال چندین و چند بار رعایت اینگونه موارد کارم رو راه انداخته. فعلا براتون بگم که این مسئله هفت هشت سیکل نیست. بعضی وقتها ممکنه حتی یک سیکل هم مسئله ساز باشه.
دقیقا به خاطر همین مسئله هست که روی آرم با اون سرعتش چیزی بنام FIQ کنار IRQ داریم. البته من خودم تا بحال با FIQ کار نکردم ولی موردی که چند سال پیش بهش برخوردم این بود که میخواستم بدون استفاده از سخت افزار کمکی از سیستمی اطلاعات بگیرم که اون امکانی برای ارسال اطلاعاتش به من نداشت ولی هر 100 میلی ثانیه یکبار اطلاعاتی رو با فرکانس 20 کیلو هرتز روی یک سخت افزار دیگه ارسال میکرد. کنار اون خط سریالی هم داشتم که میبایستی پاسخ زمانی تقریبی 3 میلی ثانیه ای داشته باشه. اونجا مجبور شدم روال وقفه رو به اسمبلی بنویسم و دقیقا روی میکرو ثانیه هایم هم حساب باز کنم. چون در زمان پیک چیزی حدود 20 درصد وقت میکرو برای اسکن سیگنالها حروم میشد. برای پیاده سازی پروتکل سریال هم از ماشین حالت استفاده کردم. نتجه کار عالی بود. یعنی میکروی mega64 من با فرکانس کلاک 7.3728 خیلی از مواقع وقت زیادی برای تلف کردن داشت.
یا جای دیگه ای برای پردازش گرافیکی اطلاعات برای شبیه سازی یک پرینتر مجبور شدم کلیه ترکیبات قرار دهی یک بیت پترن 8 بیتی رو داخل یک بیت پترن 128 بیتی دیگه به اسمبلی بنویسم تا حداکثر زمان اجرا برای بدترین ترکیبات حداکثر یک میکروثانیه باشه. با ذکر تمامی این موارد میشد کار رو انجام داد.
حرف من اینه: اغلب موارد به این چیزا برنمیخوری اما باید دید درستی داشته باشی درست مثل قضیه PSTR که اشاره شد. چون ممکنه مین زیر پای خودت رها کنی. بعد تا بیای مشکلت رو حل کنی بقولی دم گاو بزمین اومده.
اصولا شما نه تنها راجع به سرعت اجرا ... راجع به هر resourceی وقتی به مرز 80 درصد حدی رسیدی باید با احتیاط کامل جلو بری. plc کار ها عمدتا عادت دارن برای پیاده سازی یک مدل اینو در نظر میگیرن که مثلا اگر تعدادی تایمر احتیاج داشته باشن 20 درصد برای مقاصد توسعه ای رزرو در نظر میگیرن و 20 درصد هم برای رفع اشتباهات طراحی. و اگه یک plc این تعداد تایمر رو نداشت یک مدل بالاتر انتخاب میکنن. اما من یکی (شخصا) غیر از این موردها عادت دارم حتی المقدور حجم resource کمتری مصرف کنم تا حجم منابع در دسترس ماکزیمم باشه. چون معمولا سخته بخوای برای یک اشتباه کوچیک کل طراحی سخت افزارت رو عوض کنی.
نمیدونم تجربه سروکله زدن با سخت افزارهای متفاوت رو داشتی یا نه؟ اما بذار چیزی برات تعریف کنم. آمیگا 500. سیستمی تک با چند پروسسور. 68000 - agnes - denis - paula - clipper و غیره. اینا اسامی تجاری پروسسورهاشه. 512 کیلو بایت اول حافظه بطور مشترک توسط همه این پروسسورها مورد دسترسی قرار میگیره. معمولا برای هماهنگی مکانیسم buslock استفاده میشه. ولی در آمیگا برای حداکثر قدرت اینجوری نیست. 68000 در سیکل های زوج و بقیه در سیکل های فرد به این حافظه دسترسی پیدا میکنن. اصل کار با 68000 انجام میشه پس اون نباید سرعتش کاهش پیدا کنه. ولی بقیه با هم باید هماهنگ باشن. اگر قرار بود راه حل های به اصطلاح استاندارد استفاده بشه همون مکانیسم برای هماهنگی تمام پروسسورها استفاده میشد و آمیگا 500 این چیزی که حالا هست نبود. اینو میگن: the ART of computer programming
دیدگاه