اطلاعیه

Collapse
No announcement yet.

مشکل با تابع putchar

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

    مشکل با تابع putchar

    سلام
    من دقیقاً قبل حلقه اصلی main میخوام یه تابع به صورت زیر تعریف کنم

    کد:
    void message(void)
    {
    putchar("H");
    }
    اما ارور میده،در صورتی که از printf استفاده میکنم ارور نمیده.
    اینم ارورش،کسی میتونه کمک کنه؟
    کد:
    Error: C:\Users\rezab\Desktop\sim800\tt.c(167): function argument #1 of type 'unsigned char [2]' is incompatible with required parameter of type 'unsigned char'
    درضمن تابع putchar هم توسط کدویزارد کدویژن به صورت زیر تعریف شده که من بعد این تابع،تابع خودمو تعریف کردم
    کد:
    #ifndef _DEBUG_TERMINAL_IO_
    // Write a character to the USART Transmitter buffer
    #define _ALTERNATE_PUTCHAR_
    #pragma used+
    void putchar(char c)
    {
    while (tx_counter == TX_BUFFER_SIZE);
    #asm("cli")
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
       {
       tx_buffer[tx_wr_index++]=c;
    #if TX_BUFFER_SIZE != 256
       if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
    #endif
       ++tx_counter;
       }
    else
       UDR=c;
    #asm("sei")
    }
    #pragma used-
    #endif
    درضمن از تابع putchar در تابع اصلی (main) به راحتی استفاده میکنم و ارور نمیده.
    [آموزشی] کنترل رله با پیامک توسط sim800l
    [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
    [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
    [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
    صفحه اینستاگرام : ecdco_ir


    #2
    پاسخ : مشکل با تابع putchar

    لطفا حداقل مقداری از کد که قابل کامپایل باشه ( و یا در این مورد همین Error رو برگردونه ) قرار بده.

    پیام خطات هم که واضحه میگه چیزی که داری به تابع (اصلا معلوم نیست داره میگه کدوم تابع! ) پاس میدی استرینگه، در حالی که باید کاراکتر باشه.
    البته کامپایلرا خیلی مواقع پیام خطاشون دقیق نیست ( به خود مشکل اشاره نمیکنه)

    دیدگاه


      #3
      پاسخ : مشکل با تابع putchar

      نوشته اصلی توسط dark star نمایش پست ها
      لطفا حداقل مقداری از کد که قابل کامپایل باشه ( و یا در این مورد همین Error رو برگردونه ) قرار بده.

      پیام خطات هم که واضحه میگه چیزی که داری به تابع (اصلا معلوم نیست داره میگه کدوم تابع! ) پاس میدی استرینگه، در حالی که باید کاراکتر باشه.
      البته کامپایلرا خیلی مواقع پیام خطاشون دقیق نیست ( به خود مشکل اشاره نمیکنه)
      ممنون
      اگر بخوام همه ی کد ها رو قرار بدم که چند صد خط میشه و کسی حوصله بررسیش رو نداره
      من دقیقاً تمام کد های مورد نیاز رو آوردم و توضیحات لازم رو هم گفتم.
      ارور دقیقاً مربوط به تابع message هستش اما تو همین تابع به جای putchar از printf استفاده میکنم دیگه ارور نمیده.

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      از char هم به جای void استفاده کردم،اما نشد.
      [آموزشی] کنترل رله با پیامک توسط sim800l
      [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
      [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
      [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
      صفحه اینستاگرام : ecdco_ir

      دیدگاه


        #4
        پاسخ : مشکل با تابع putchar

        نه نه ، ببینید، من اصلا کد شما رو نمی خوام. (که خب خیلی ها (شامل خود من ) راحت نیستن بقیه کدشون رو ببینم).

        ظاهرا در تفسیر واژه "حداقل " در پست قبلی ام مقداری ابهام ایجاد میشه.
        برای کمک به شما احتیاج دارم کمترین مقدار قابل کامپایل رو ببینم . (همه ی کارهای اضافی کدتون به کنار، کمترین مقدار کدی که این خطا رو تولید میکنه .)
        least possible amount

        جز اینکار، کار دیگه ای نمیشه کرد. اگر من در یک پروژه خالی کدویژن ، تابع message رو مثل شما (فرض کنیم در جای مناسب تعریف کردید، اخه حلقه اصلی main یعنی چی؟؟) تعریف کنم و داخل حلقه ی while بی دلیل فراخوانی اش کنم، بدون مشکل کامپایل میشه.

        دیدگاه


          #5
          پاسخ : مشکل با تابع putchar

          on second thought

          الان که به کدتون نگاه میکنم، احتمالا مشکل شما اینه که بجای علامت کوتیشن از دایل کوتیشن استفاده کردید، تغییر بدید ببینید فرقی میکنه:


          putchar('H');


          کلا در زبان c یک کاراکتر تنها با ' مشخص میشه.
          و اینکه دقت کنید داخل کوتیشن space نخورده باشه

          دیدگاه


            #6
            پاسخ : مشکل با تابع putchar

            این تابع فقط کارکتر قبول میکند و لی در تابع شما یک رشته حروف به آن داده اید

            تابع شما:
            putchar("H")

            باید به صورت زیر نوشته شود:

            putchar('H')

            یعنی کاراکتر نقل قول با کوت باید عوض شود

            دیدگاه


              #7
              پاسخ : مشکل با تابع putchar

              دوستان مشکل از همون کوتیشن بود. خودمم تعجب میکنم چرا چنین اشتباهی پیش اومده.آخه از این تابع خیلی استفاده کردم. ممنون از هر دو دوست عزیز.
              جدیدترین ویرایش توسط سید رضا باباتبار; ۱۷:۴۶ ۱۳۹۶/۰۵/۲۱.
              [آموزشی] کنترل رله با پیامک توسط sim800l
              [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
              [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
              [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
              صفحه اینستاگرام : ecdco_ir

              دیدگاه

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