پاسخ : سوالات کتاب at91 (نص)
سلام
دستور if اول از نظر کارکرد با دومی خیلی فرق دارد. if اول یعنی اگر رجیستر x برابر 1 شد بیا این کار رو انجام بده یعنی باید مقدار کل رجیستر برابر 1 شود تا این عملیات انجام شود. اما در if دوم یعنی اگر بیت صفرام رجیستر x برابر 1 شد بیا این کار رو انجام بده.
حالا در این جا در این رجیستر دو بیت فقط وجود دارد ALMS,RTTINC . حالا شرط شما این است که هر وقت که هشداری رخ داد بیاد یک کاری انجام دهد. وقتی که بیت ALMS برابر یک شود یعنی هشدار رخ داده است. اگر هم بیت RTTINC برابر یک شود یعنی تایمر افزایش یافته هست. خوب وقتی که شما if اول را می نویسید و تایمر دارد افزایش می یابد تا هشدار رخ می دهد و بیت ALMS هم یک می شود و در ضمن در هنگام رخ دادن هشدار تایمر هم افزایش پیدا کرده پس بیت RTTINC هم یک می شود پس مقدار رجیستر برابر 3 شده و برابر 1 نشده و باتوجه به توضیحات بالا شرط if درست نمی باشد. در صورتی که در if دوم فقط بیت صفرام (ALMS) را چک می کند و اگر آن 1 شد شرط if برقرار می شود. بهتر است در برنامه های خود به صورت if دوم شرط های رو بنویسید.
حالا اگر می خواهید به همان صورت اولی بنویسید مثلا در اینجا با توجه به توضیحات بالا مقدار رجیستر برابر 3 می شود پس برنامه خود را به صورت زیر بنویسید که درست اجرا شود.
در ضمن در جایی نگفته شده که وقتی هشدار رخ دهد مقدار رجیستر آن برابر 0Xffffffff می شود. مقدار رجیستر هشدار در مقدار قبلی خود می ماند تا دوباره آنرا بارگذاری کنید.
نوشته اصلی توسط hunybal
دستور if اول از نظر کارکرد با دومی خیلی فرق دارد. if اول یعنی اگر رجیستر x برابر 1 شد بیا این کار رو انجام بده یعنی باید مقدار کل رجیستر برابر 1 شود تا این عملیات انجام شود. اما در if دوم یعنی اگر بیت صفرام رجیستر x برابر 1 شد بیا این کار رو انجام بده.
حالا در این جا در این رجیستر دو بیت فقط وجود دارد ALMS,RTTINC . حالا شرط شما این است که هر وقت که هشداری رخ داد بیاد یک کاری انجام دهد. وقتی که بیت ALMS برابر یک شود یعنی هشدار رخ داده است. اگر هم بیت RTTINC برابر یک شود یعنی تایمر افزایش یافته هست. خوب وقتی که شما if اول را می نویسید و تایمر دارد افزایش می یابد تا هشدار رخ می دهد و بیت ALMS هم یک می شود و در ضمن در هنگام رخ دادن هشدار تایمر هم افزایش پیدا کرده پس بیت RTTINC هم یک می شود پس مقدار رجیستر برابر 3 شده و برابر 1 نشده و باتوجه به توضیحات بالا شرط if درست نمی باشد. در صورتی که در if دوم فقط بیت صفرام (ALMS) را چک می کند و اگر آن 1 شد شرط if برقرار می شود. بهتر است در برنامه های خود به صورت if دوم شرط های رو بنویسید.
حالا اگر می خواهید به همان صورت اولی بنویسید مثلا در اینجا با توجه به توضیحات بالا مقدار رجیستر برابر 3 می شود پس برنامه خود را به صورت زیر بنویسید که درست اجرا شود.
کد:
if(AT91C_BASE_RTTC->RTTC_RTSR==0x3) { }
دیدگاه