اطلاعیه

Collapse
No announcement yet.

راهنمایی قطعه کد زبان c

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

    راهنمایی قطعه کد زبان c

    سلام.میشه کمکم کنید این قطعه کد چیکار میکنه خط به خط؟
    کد:
    #if F_CPU < 2000000UL && defined(U2X)
     UCSR0A = _BV(U2X);       /* improve baud rate error by using 2x clk */
     UBRR0L = (F_CPU / (8UL * UART_BAUD)) - 1;
    #else
     UBRR0L = (F_CPU / (16UL * UART_BAUD)) - 1;
    #endif
     UCSR0B = _BV(TXEN0) | _BV(RXEN0); /* tx/rx enable */

    #2
    پاسخ : راهنمایی قطعه کد زبان c

    سلام به همه
    این دستورات جز دستورات پیش پردازنده هستن
    کار دستورات پیش پردازنده اینه که فقط موقع کامپایل شدن کامپایلر نگاه میکنه و اگر شرط ها برقرار بودن کدهارو کاپایل میکنه و اگر شرطها برقرار نبودن کاپایل نمیکنه
    معمولا این مدل استفاده از دستورات پیش پردازنده در کتابخونه ها مورد استفاده قرار میگیره
    اگر در این خصوص نیاز به اطلاعات بیشتر داشتی بگو

    و اما توضیح خط به خط:
    [code=c]#if F_CPU < 2000000UL && defined(U2X)
    UCSR0A = _BV(U2X); /* improve baud rate error by using 2x clk */
    UBRR0L = (F_CPU / (8UL * UART_BAUD)) - 1;
    #else
    UBRR0L = (F_CPU / (16UL * UART_BAUD)) - 1;
    #endif
    UCSR0B = _BV(TXEN0) | _BV(RXEN0); /* tx/rx enable */[/code]
    در خط اول که یه if از نوع پیشپردازنده هست داره میگه اگر برنامه نویس فرکانس کاری میکرو رو کمتر از 2000000 هرتز تعریف کرده بود و در عین حال U2X رو قبلا توسط دستور پیشپردازنده define# تعریف کرده بود دستورات بخش زیر رو انجام بده (یعنی دستورات خط های 2 و 3)
    (u2x مربوط به تنظیمات واحد usart میکرو میشه)
    توی خط 2 داره مقدار رجیستر UCSR0A رو مقدار دهی میکنه و توی خط 3 داره رجیستر UBRR0L رو مقدار دهی میکنه
    (اگر این شیوه مقدار دهی رو نمیدونی به چه صورتیه بگو داداش)
    در خط 4 میگه اگر شرط دستور پیشپردازنده IF# برقرار نبود دستورات زیر رو اجرا کن (که دستورات زیر فقط شامل خط 5 میشه)
    در خط 5 داره رجیستر UBRR0L رو مقدار دهی میکنه
    در خط 6 داره پایان دستور پیشپردازنه if# رو اعلام میکنه
    در خط 7 هم داره رجیستر UCSR0B رو مقدار دهی لازم میکنه



    اي خدا ، من بايد از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از اين راه طعنه زنند. بايد به آن سنگدلاني که علم را بهانه کرده و به ديگران فخر ميآ*فروشند، ثابت کنم که خاک پاي من هم نخواهند شد. بايد همه آن تيره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترين و افتاده ترين مرد روي زمين باشم.
    شهيد دکتر مصطفي چمران
    اللهم صل علي محمد و ال محمد و عجل فرجهم
    ; C is not for children

    دیدگاه


      #3
      پاسخ : راهنمایی قطعه کد زبان c

      نوشته اصلی توسط مهدی رهی
      در خط اول که یه if از نوع پیشپردازنده هست داره میگه اگر برنامه نویس فرکانس کاری میکرو رو کمتر از 2000000 هرتز تعریف کرده بود و در عین حال U2X رو قبلا توسط دستور پیشپردازنده define# تعریف کرده بود دستورات بخش زیر رو انجام بده (یعنی دستورات خط های 2 و 3)
      سلام
      ممنون از توضیحاتتون.
      یه سوال : این دستورات پیش پردازنده قبل اینکه عمل کامپایل صورت بگیره باید مورد بررسی قرار بگبرن. فرض کنید این دستورات پیش پردازنده قبل از اینکه کلاک مقدارش تعریف شده باشه ، نوشته شده باشن. یعنی کامپایلر اول میاد همه شرایط رو درنظر میگیره و بعد میاد این پیش پردازنده ها رو بررسی میکنه؟
      در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

      دیدگاه


        #4
        پاسخ : راهنمایی قطعه کد زبان c

        نوشته اصلی توسط sejil
        سلام
        ممنون از توضیحاتتون.
        یه سوال : این دستورات پیش پردازنده قبل اینکه عمل کامپایل صورت بگیره باید مورد بررسی قرار بگبرن. فرض کنید این دستورات پیش پردازنده قبل از اینکه کلاک مقدارش تعریف شده باشه ، نوشته شده باشن. یعنی کامپایلر اول میاد همه شرایط رو درنظر میگیره و بعد میاد این پیش پردازنده ها رو بررسی میکنه؟
        این رو نمیدونم و باید تست بشه
        اي خدا ، من بايد از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از اين راه طعنه زنند. بايد به آن سنگدلاني که علم را بهانه کرده و به ديگران فخر ميآ*فروشند، ثابت کنم که خاک پاي من هم نخواهند شد. بايد همه آن تيره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترين و افتاده ترين مرد روي زمين باشم.
        شهيد دکتر مصطفي چمران
        اللهم صل علي محمد و ال محمد و عجل فرجهم
        ; C is not for children

        دیدگاه

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