# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded > ARM >  مفهوم دستور While(0U) چی هست

## هادی2020

سلام و درود
توی کتابخونه های Stm32، Define هایی قرار دارند به شکل زیر، معنا و مفهوم  شرط while چی هست.

#define __HAL_RCC_TIM1_CLK_ENABLE()   do { \
                                        __IO uint32_t tmpreg; \
                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\
                                        /* Delay after an RCC peripheral clock enabling */\
                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\
                                        UNUSED(tmpreg); \
                                      } while(0U)

و

#define UNUSED(x) ((void)(x))

خوب قراره تایمر 1 رو فعال کنیم بعد از ست کردن بیت فعال سازی و خواندن بیت مربوطه به شرط حلقه while میرسیم. 0U یعنی عدد به فرمت unsigned int . در نتیجه یعنی 0 ، خوب بودن مقدار صفر در شرط while  مانع از دوباره اجرا شدن حلقه میشه در نتیجه چه نیازی به بودن حلقه می باشد؟

----------


## هادی2020

دقت کنید که اینجا تعریف تابع نداریم و این دیفاین هستش
دیفاین برای معرفی یک عبارت به جای یک دستور العمل به کار میره نه بیشتر
برنامه نویس اینجا با استفاده از کلمه do در واقع اون چند دستور العمل را در قالب یک دستور العمل مرکب بیان کرده
منظورم اینه که اگه اون do و while آخر را بردارید ، مترجم اشکال میگیره
ولی با این حقه میتونیم چند دستور العمل را دیفاین کنیم که در غیر اینصورت غیر ممکن میشد
منبع

----------


## keyhan

سلام
خسته نباشید
شما اگر دستور do و while رو بردارید ولی کروشه ها را دست نزنید باز کامپایلر خطا نمیده، منظور بنده اینه که دستور do و while به دلیل دیگری اینجا قرار داده شده اند. آن هم ین است که هنگامی که از define استفاده میشود کامپایلر عبارت define شده را به جای عبارت قبلی در هنگام کامپایل جایگذاری میکند که این امر مستوجب رخ دادن خطاهای غیر منتظره در بعضی از مواقع میشوند که اینجا به دلیل فشای کم قادر به توضیح آن نیستم، ولی اربتاطی به چند خط بودن define ندارد. در define، / برنامه نویس را قادر می سازد تا define را چند خطی بنویسد.

----------

