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

موضوع: Callbacks

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    33
    تشکر
    27
    تشکر شده 9 بار در 7 پست

    Gadid Callbacks

    سلام به همگی
    من از وقتی که با آرم شروع به برنامه نویسی کردم با یک عبارت "Callbacks" خیلی روبرو شدم. توی اینترنت سرچ کردم ولی خیلی توضیحات خوبی پیدا نکردم. ممنون میشم یکی از دوستان این مفهوم رو به صورت خیلی واضح و قابل فهم توضیح بده.

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیر انجمن M.ABDOLLAHI آواتار ها
    تاریخ عضویت
    Dec 2008
    نام
    مهدی عبدالهی
    نوشته ها
    976
    تشکر
    1,567
    تشکر شده 2,677 بار در 667 پست

    پیش فرض

    سلام ببنید دوست عزیز این یک تابع مربوط میشه به روتین وقفه ادوات میکرو شما این اموزشها را که لینکش را در پایان میگذارم بخونید اونجا توضیح دادم
    [آموزش] آموزش جامع کتابخانه hal و کار با نرم افزار cubemx
    و هر كس از ياد [خداى‏] رحمان دل بگرداند، بر او شيطانى مى‏گماريم تا براى وى دمسازى باشد. (36)و مسلّماً آنها ايشان را از راه باز مى‏دارند و [آنها] مى‏پندارند كه راه يافتگانند. (37)تا آن گاه كه او [با دمسازش‏] به حضور ما آيد، [خطاب به شيطان‏] گويد: «اى كاش ميان من و تو، فاصله خاور و باختر بود، كه چه بد دمسازى هستى!» (38)(سوره زخرف)بگو: «پليد و پاك يكسان نيستند، هر چند كثرت پليد [ها] تو را به شگفت آوَرَد. پس اى خردمندان، از خدا پروا كنيد، باشد كه رستگار شويد.» (100)(سوره مائده(

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


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    33
    تشکر
    27
    تشکر شده 9 بار در 7 پست

    پیش فرض

    ممنون از اینکه جواب دادید اما بگذارید من سوالم رو کمی بازتر کنم.
    معمولاً برنامه نویس ها برای روتین های وقفه تابعی با عنوان callback برای هر روتین وقفه تعریف میکنند. بعضاً روتین های مربوط به وقفه های میکروکنترلر در سورس جداگانه ای به غیر از سورس main نوشته میشوند. در این جور مواقع من مشاهده کردم که برنامه نویس میاد و در داخل سورس وقفه ها ، تابعی برای اجرا در روتین وقفه موردنظر مینویسه و داخل اون تابع هیچ چیزی وجود ندارد. همچنین شروع تعریف تابع با کلمه کلیدی weak__ میباشد. بعد در داخل تابع به صورت کامنت نوشته است که اگر کاربر نیاز به این تابع دارد باید این تابع را به صورت جداگانه در سورس main تعریف کند و در اونجا داخل تابع هر کاری که میخواهد انجام دهد. میشه در این مورد توضیحی بدید که این کلمه weak چه کاری انجام میده؟

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


  7. #4
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    ببینید کاربرد Callback و صفت __weak دو بحث کاملا جدا از هم هستند.
    Callback:فرض کنید یه سیستم عامل داریم که قرار هست در صورت کمبود حافظه به ما اطلاع بده.خب کاری که ما
    انجام میدیم به تابع تعریف میکنیم ( به صورتی که مشخص شده.تمام Callbacl ها پارامترهای ورودی و خروجی مشخص هست) و اون رو به سیستم عامل میدیدم.
    کنترل اجرای برنامه دست سیستم عامل هست و وقتی که کمبود حافظه رخ داد سیستم عامل تابع ما رو اجرا میکنه تا به ما اطلاع بده که کمبود حافظه رخ داده.حالا شما یا حافظه بیشتری
    رو به سیستم عامل اختصاص میدید ( برای مثال ) که در این صورت کنترل رو دوباره به سیستم عامل بر میگردونید یا یه Fault رو نمایش میدید و غیره
    پس Callback ها توابعی هستند که زمانی که کنترل اجرای برنامه دست شما نیست میخوان به شما رویدادی رو اطلاع بدهند تا متناسب با اون کاری رو انجام بدید که این ، با interrupt فرق میکنه.

    صفت weak : ببنید زمانی که شما یه اینتراپت رو فعال میکنید ولی تابعی برای vector مورد نظر نمی نویسید ، اگر اینتراپت رخ بده بدلیل اینکه تابعی برای اجرا وجود نداره سیستم با خطا مواجه میشه .
    برای اینکه همیشه به صورت پیش فرض برای تمام اینتراپت های اصلی تابعی وجود داشته باشه ( مثل اینتراپت های NMI ) معمولا داخل یه فایل جداگانه اون توابع رو مینویسند و صفت Weak رو به اون میدن.صفت weak به کامپایلر میگه اگر تابعی با همین نام و مشخصات در جای دیگه ایی تعریف شده بود اون تابع اولویت داره و باید اون تابع اجرا بشه و اگر تابعی نیست همین تابع رو اجرا کن.یعنی اینکه اگر شما یه تابعی رو برای اینتراپت HardFault در کد خودتون بنویسید کامپایلر کد شما روکامپایل میکنه و اگر ننویسید اون تابعی رو که به صورت پیش فرض نوشته شده.
    و در اخر صفت weak فقط برای اینتراپت ها کاربرد نداره و جاهای دیگه ایی هم ازش استفاده میشه

  8. کاربران : 3 تشکر کرده اند از شما mrm برای ارسال این پست سودمند:


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

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