NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3346 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
صفحه 1 از 5 12345 آخرینآخرین
نمایش نتایج: از 1 به 20 از 81

موضوع: مقایسه ارایه دریافتی از usart

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    Icon16 مقایسه ارایه دریافتی از usart

    سلام
    دوستان من از وقفه usartاستفاده کردم و از کامپایلر ccs قرار هست که هر بار 4بایت دیتا دریافت کنم از پورت سریال و این دیتا رو با 4بایت مقایسه کنم اگه با اون 4بایت برابر باشه led متناظر روشن بشه.
    نمیدونم چطور ارایه 4بایتی دریافتی رو با ارایه 4بایتی خودم مقایسه کنم.لطفا راهنمایی کنید

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر فعال
    تاریخ عضویت
    Dec 2007
    نوشته ها
    113
    تشکر
    92
    تشکر شده 78 بار در 59 پست

    پیش فرض

    سلام
    در مورد ccs زیاد اطلاعات ندارم. اما اگر به زبان سی باشه می تونید از یه کتابخونه به اسم string.h استفاده کنید فکر کنم تابع strstr() می تونه عمل مقایسه رو براتون انجام بده.
    در ضمن فکر کنم بتونید از عملگر == هم استفاده کنید:
    کد:
    if (str=="ok")
    ویرایش توسط dostajn : 17-02-2015 در ساعت 08:00

  4. تشکرها از این نوشته :


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض

    سلام
    اگه میشه در مورد تساوی عضوهای دو ارایه 4 عضوی راهنمایی کنید.ممنون

  6. #4
    کاربر فعال
    تاریخ عضویت
    Dec 2007
    نوشته ها
    113
    تشکر
    92
    تشکر شده 78 بار در 59 پست

    پیش فرض

    سلام
    رشته ها هم نوعی آرایه هستند تنها با یک عضو!
    شما می تونید هر زمان به یک عضو بخصوص آرایه (رشته ) با استفاده از اندیس دسترسی داشته باشید:
    Strings in C

  7. تشکرها از این نوشته :


  8. #5
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    پیش فرض

    مهندس اگه ارایه ات از نوع char هستش
    با تابع strcmp مقایسه اش کن اگه صفر برگردوند دو ارایه مساوی اند.
    و یا کد زیر
    کد:
    
    
    کد:
    char array_compar(char recieved_array[4] , char real_array[4])
    {
      char i;
      for(i=0;i<4;i++)
      {
        if(recieved_array[i] != real_array[i])
        {
        	return 0;
        }
      }
      return 1;
    }

    ویرایش توسط pirozy : 17-02-2015 در ساعت 14:18

  9. تشکرها از این نوشته :


  10. #6
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض

    من از strcmp طبق help ccsاستفاده کردم ج نداد

    1. char a[4][8]={"{etx}","b","{\x80}","{\xc0}"}

    ارایه من این هست و میخوام چیزی که از pc دریافت میکنم با این ارایه برابر باشه

  11. #7
    کاربر فعال
    تاریخ عضویت
    Dec 2007
    نوشته ها
    113
    تشکر
    92
    تشکر شده 78 بار در 59 پست

    پیش فرض

    سلام
    ولی برای من توی زبان سی کامل جواب می ده:
    کد:
    #include <stdio.h>
    #include <string.h>
    int main ()
    {
       const char a[4][8]={"{etx}","b","{\x80}","{\xc0}"};
       /*
       int strcmp(const char *str1, const char *str2)
        if Return value if < 0 then it indicates str1 is less than str2
        if Return value if > 0 then it indicates str2 is less than str1
        if Return value if = 0 then it indicates str1 is equal to str2
       */
       printf("Same=%d\n", strcmp(a[0],"{etx}")); 
       printf("NOTSame=%d\n", strcmp(a[0],"{etx1}")); 
       printf("NOTSame=%d\n", strcmp(a[0],"{etx}1")); 
       return 0;
    }
    نتیجه:
    کد:
    Same=0
    NOTSame=76
     NOTSame=-49
    برای تست آنلاین هم می تونید از سایت زیر استفاده کنید:
    strcmp() - C Library Function Example
    گزینه try it رو بزنید!
    --------
    در ضمن شما از پورت سریال بایت بایت یا همون کاراکتر کاراکتر می گیرید و نیاز دارید تا مثلا برای عضو اول یه بافر 4 عضوی داشته باشین تا کارکترها رو توی خودش ذخیره کنه و در آخر مقایسه کنید. فکر کنم با توجه به اینکه طول اعضای آرایه ها با هم برابر نیست یکم مشکل دارین...
    فکر کنم از strstr بهتر جواب بگیرین:
    strstr() - C Library Function Example
    ویرایش توسط dostajn : 18-02-2015 در ساعت 10:53

  12. تشکرها از این نوشته :


  13. #8
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض

    دوست عزیز من این کد رو زدم اما ok نشد
    #include <string.h>
    #include <stdio.h>
    char a[]="{ETX}B{\X80}{\XC1}";
    char string[19];

    #int_RDA
    void RDA_isr(void)
    { gets(string);
    if(strcmp(string, a)==0)

    output_high(CMD4);



    }//END OF INT
    - - - Updated - - -

    دوست عزیز من این کد رو زدم اما ok نشد
    #include <string.h>
    #include <stdio.h>
    char a[]="{ETX}B{\X80}{\XC1}";
    char string[19];

    #int_RDA
    void RDA_isr(void)
    { gets(string);
    if(strcmp(string, a)==0)

    output_high(CMD4);



    }//END OF INT

  14. #9
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    تابعی که جناب pirozy تو پست 5 گذاشتند جواب میده. فقط ایشون آرایه رو 4 بایتی در نظر گرفتند و شما باید 19 بایتی در نظر بگیری.
    ضمنا این تابع اگر دو رشته برابر باشه خروجیش یکه و اگه برابر نباشه خروجیش صفره. برعکس چیزی که درباره تابع strcmp گفتند.

  15. #10
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض

    بله درست اما برای ارایه [7][4] جواب نمیده

  16. #11
    کاربر فعال
    تاریخ عضویت
    Dec 2007
    نوشته ها
    113
    تشکر
    92
    تشکر شده 78 بار در 59 پست

    پیش فرض

    سلام
    یه نمونه خروجی که از سریال می یاد رو اینجا بذارین
    در ضمن تابع strcmp همون طور که گفتم جهت بررسی رشته یا همون آرایه یک عضویه! الان شما دارین اونو با یه ارایه چند تایی مقایسه می کنید:
    1- یا آرایه رو باهم ترکیب کنید و رشته ساده بسازین.
    2- یا توی یه حلقه هر دفعه رشته دریافتی رو با یکی از اعضای آرایه مقایسه کنید( اون اندیس صفر که بنده برای a گذاشتم رو ببینید. همه رشته های مثلا دریافتی با عنصر اول آرایه دارن مقایسه می شوند!!!)

  17. #12
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    for(i=0;i<4;i++)
    for(j=0;j<8;j++)
    if(a[i][j]!=b[i][j]
    return 0;
    return 1;




  18. #13
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض

    دوست عزیز این کار انجام دادم مقایسه انجام نمیشه.
    char data[4][7]={"{ETX}","B","{\X80}","{\XC1}"};
    char a[4][7]={"{ETX}","B","{\X80}","{\XC1}"};

    #int_RDA
    void RDA_isr(void)
    {
    for( i=0;i<4;i++)
    for(j=0;j<7;j++)
    if(a[i][j] != data[i][j])
    break;
    if(i==4)
    output_high(CMD4);
    disable_interrupts(INT_RDA);
    }//END OF INT

  19. #14
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    من دقیقا آرایه شما رو دو بار تعریف کردم و با همون کد قبلی گذاشتم درست کار کرد.
    یه بار درایه ها رو کامل کن ببین چطور میشه. مثلا به جای "b" بنویس "baaaaa".

  20. #15
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض

    ممنون دوست عزیز از راهنماییتون اما الان سخت افزار ندارم فردا میتونم تست بگیرم

  21. #16
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض

    سلام
    دوست عزیز این کار رو هم انجام دادم وقتی خودم دو تا ارایه رو تعریف میکنم مثل کد بالا درست کار میکنه اما زمانی که از سریال میگیرم دیتا رو درست کار نمیکنه
    char string[4][7]
    char a[4][7]={"{ETX}","BBB","{\X80}","{\XC1}"};
    #int_RDA
    void RDA_isr(void)
    {
    gets(string);
    for( i=0;i<4;i++)
    for(j=0;j<7;j++)
    if(a[i][j] != string[i][j])
    break;
    if(i==4)
    output_high(CMD4);
    disable_interrupts(INT_RDA);
    }//END OF INT
    }//END OF INT



  22. #17
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض

    دوستان با strstr() چطور میشه کار کرد؟

  23. #18
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    احتمالا دیتایی که از سریال دریافت می کنی درست نیست یا اون رو درست توی آرایه نمیذاری.
    یه بار بعد از کامل شدن آرایه اون رو تک تک چاپ کن ببین درسته یا نه. یعنی از data[0][0] تا data[3][6] رو جدا چاپ کن ببین هر کدوم جای خودش هست یا نه.

  24. #19
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض strcmp

    نقل قول نوشته اصلی توسط mstkmn نمایش پست ها
    احتمالا دیتایی که از سریال دریافت می کنی درست نیست یا اون رو درست توی آرایه نمیذاری.
    یه بار بعد از کامل شدن آرایه اون رو تک تک چاپ کن ببین درسته یا نه. یعنی از data[0][0] تا data[3][6] رو جدا چاپ کن ببین هر کدوم جای خودش هست یا نه.

    دوست عزیز تو پیام خصوصی واستون pm بفرستادم

  25. #20
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2015
    نوشته ها
    84
    تشکر
    11
    تشکر شده 3 بار در 2 پست

    پیش فرض

    دوست عزیز من همین کاری که فرمدید انجام دادم اما اشتباه میفرسته تو سریال وچطور میتونم این مشکل رو حل کنم؟

صفحه 1 از 5 12345 آخرینآخرین

موضوعات مشابه

  1. تشکیل گروه تحقیقاتی - عملیاتی رباتیک
    توسط alamdar در انجمن سیستم های ریاتیک و CNC
    پاسخ: 3
    آخرين نوشته: 23-03-2016, 19:13
  2. پاسخ: 0
    آخرين نوشته: 23-09-2013, 20:32
  3. مقایسه و رتبه بندی آنتی ویروسها
    توسط arsalan681 در انجمن ترفندهای کامپیوتری/معرفی نرم افزار های مفید
    پاسخ: 1
    آخرين نوشته: 16-01-2010, 15:17
  4. نکاتی در مورد IC سینتی سایزر AD9833
    توسط codev در انجمن مباحث متفرقه در زمینه میکروو الکترونیک
    پاسخ: 10
    آخرين نوشته: 19-11-2009, 11:15
  5. سوالاتی در زمینه بیسکام
    توسط esmaeil57 در انجمن AVR
    پاسخ: 1
    آخرين نوشته: 11-05-2009, 13:55

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •