اطلاعیه

Collapse
No announcement yet.

معنی >> چیه؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    معنی >> چیه؟

    سلام
    معنی این ماکرو ها چیه؟

    #define FRAMING_ERROR (1<<FE)
    #define PARITY_ERROR (1<<UPE)
    #define DATA_OVERRUN (1<<OVR)
    #define DATA_REGISTER_EMPTY (1<<UDRE)
    #define RX_COMPLETE (1<<RXC)

    تا جایی که یادمه ">>" عملگر شیفت بود، درسته؟ یعنی مثلا باید بیت RXC رو شیفت بدیم؟ oo:

    و در ادامه بی زحمت این شرط رو هم توضیح بدین icon_mrgreen
    status=UCSRA

    if ((status & (FRAMING_ERROR| PARITY_ERROR| DATA_OVERRUN)) == 0)

    اینجا قراره که صفر بودن این 3 تا بیت بررسی بشه درسته؟ پس دیگه چرا با status یا همون and UCSRA شده؟
    اینا قسمتی از کد هایی هست که codewizard واسه USART تولید می کنه

    #2
    پاسخ : معنی >> چیه؟

    یعنی هیچکس نمی دونه؟ :eek:

    دیدگاه


      #3
      پاسخ : معنی >> چیه؟

      اینها فکر میکنم مال اینتراپت USART هستن
      خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

      دیدگاه


        #4
        پاسخ : معنی >> چیه؟

        اون قسمت کد رو بهتره از داخل به بیرون برسی کنیم

        اول سه تا بایت مختلف یک یک بیتشون یک بوده با هم OR شدن . پس یک بایت از مجموع اون چند بیت بوجود میاد . سپس این بایت با status اند میشه ، و اگر حاصل 0 بود ...

        درسته << و >> شیفت به راست و چپ هستند .

        خوب اون ماکرو به تنهایی کاری انجام نمیده .

        مثلا شما میخواهید در یک بایت بیت RXC رو 1 کنید ، خوب باید بنویسید

        byte |= (1<<RXC)s

        حالا میتونی یک ماکرو دیفاین کنی که مقدارش (1<<RXC) باشه .

        بعد همون دستور قبلی رو میتونی به این صورت بنویسی

        byte |= RX_COMPLETE

        و cpp هم ماکرو هارو با مقادیرشون جاگزین میکنه و سپس کد نهایی به کامپایلر میره .
        فتو بلاگ من
        کاردستی ها :
        روبات شطرنج باز ( یادگار دوران جوانی )
        فارسی نویسی مستقیم در نمایشگر های گرافیکی
        کتابچه خود آموز زبان توصیف سخت افزار Verilog

        دیدگاه


          #5
          پاسخ : معنی >> چیه؟

          سلام
          نوشته اصلی توسط shankimout
          مثلا شما میخواهید در یک بایت بیت RXC رو 1 کنید ، خوب باید بنویسید

          byte &=~ (1<<RXC) s
          این که بیت RXC رو صفر می کنه.

          y (1<<RXC خوب این یعنی عدد 1 رو RXC بار(توی یه بایت) شیفت بده به چپ.

          من از ماکروی زیر برای رجیسترهایی که بیتی آدرس پذیر نیستند زیاد استفاده می کنم:

          ((define SETBIT(reg,bit) (reg |= (1<<bit

          اینجوری مثلا هر جای برنامه بنویسی(SETBIT(TCCR0,2بیت دوم از رجیستر مربوطه رو یک میکنه.

          در مورد ماکروهای شما همون طور که جناب shankimout فرمودن به تنهایی کاری نمیکنه!


          دیدگاه


            #6
            پاسخ : معنی >> چیه؟

            سلام
            oo:
            بالاخره بیت RXC رو صفر می کنه یا یک؟ لطفاً در این مورد به اجماع برسید! :icon_razz:

            خوب اون ماکرو به تنهایی کاری انجام نمیده .
            درسته مشکل من فقط اون قسمت شیفتش بود!

            من همش فکر می کردم که یه بیت به تنهایی چطور می تونه شیفت پیدا کنه :biggrin: ولی بازم درست متوجه نشدم، شما گفتین که این بیت ها داخل یک بایت شیفت پیدا می کنن. حالا کدوم بایت؟ کجای بایت قرار می گیرن؟ این سه تا بیت جزئی از رجیستر UCSRA یا همون متغیر status هستن. یعنی مثلا بیت FE که در UCSRA بیت پنجم هست ، در بایت جدید هم در جای پنجم قرار می گیره؟ درست فهمیدم؟

            ممنون

            دیدگاه


              #7
              پاسخ : معنی >> چیه؟

              بله ، بله . 0 میکنه ،

              یک بیت به تنهایی شیفت پیدا نمیکنه ،

              شما وقتی یه همچین عبارتی مینویسد 4>>1 ، در واقع منظور از 1 همون 0x01 هست . پس برای یک کردن بیت چهارم در یک بایت باید اول یه بایت بسازیم که بیت 4 ش یک باشه . پس 0x01 رو چهار بار به سمت چپ شیفت میکنیم .

              اولش بود : 00000001

              حالا هست : 00001000

              حالا با یه بایت مثل 00100110 OR میکنیم .

              00001000

              OR

              00100110

              =

              00101110

              برای 0 کردن هم با معکوسش AND میکنیم .
              فتو بلاگ من
              کاردستی ها :
              روبات شطرنج باز ( یادگار دوران جوانی )
              فارسی نویسی مستقیم در نمایشگر های گرافیکی
              کتابچه خود آموز زبان توصیف سخت افزار Verilog

              دیدگاه

              لطفا صبر کنید...
              X