NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 2517 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 10 از 10

موضوع: درخواست توضیح قسمتی از کد c

  1. #1
    عضو جدید
    تاریخ عضویت
    Apr 2014
    نوشته ها
    10
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض درخواست توضیح قسمتی از کد c

    سلام خدمت اساتید محترم
    لطفا این تیکه کد رو اگه ممکنه توضیح بدید که میخواد چیکار کنه
    در مورد ارتباط CAN تو میکرو کنترلر avr
    [CODE]uint8_t mcp2515_get_message(tCAN *message)
    {
    ویرایش توسط bmvali : 08-06-2017 در ساعت 02:22

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

  3. #2
    کاربر علاقه مند myiranmicro آواتار ها
    تاریخ عضویت
    Apr 2011
    نام
    حامد عهدی قراملکی
    نوشته ها
    59
    تشکر
    15
    تشکر شده 14 بار در 11 پست

    پیش فرض

    این کد قسمتی از توابع مربوط به ارتباط با mcp2515 می باشد که طی یک پروتکل خاص از طریق spi با ماژول ارتباط برقرار می کند و یک رشته را برایش ارسال میکند.

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


  5. #3
    عضو جدید
    تاریخ عضویت
    Apr 2014
    نوشته ها
    10
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض

    بله ممنون از پاسختون
    بیشتر میخوام در مورد اعمال بیتی و او عملگرای بیتی و همچنین نحوه تغییرات روی بیتها رو بدونم
    مثلا در عبارت
    message->id = (uint16_t) spi_putc(0xff) << 3;
    message->id چه متغیریه و نوعش چیه؟
    یا تو ارسال مقدار به تابعspi_putc
    0xff) << 3
    چه اتفاقی میفته؟

  6. #4
    کاربر علاقه مند myiranmicro آواتار ها
    تاریخ عضویت
    Apr 2011
    نام
    حامد عهدی قراملکی
    نوشته ها
    59
    تشکر
    15
    تشکر شده 14 بار در 11 پست

    پیش فرض

    << این عملگر و این >> شیفت به چپ و راست و عملگر -> همان . است یعنی message.id =0
    id یک المان از تابع message است مانند serial.print

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


  8. #5
    عضو جدید
    تاریخ عضویت
    Apr 2014
    نوشته ها
    10
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض

    یعنی در عبارت
    message->id = (uint16_t) spi_putc(0xff) << 3;
    message.id =صفر کن و برو از تابع spi_putc پرش کن
    داخل پرانتز(0xff) برای چه کاریه؟
    همچنین عبارت
    (uint16_t) چیه؟

  9. #6
    مدیرکل انجمنها Doloop آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    حسين
    نوشته ها
    1,964
    تشکر
    3,312
    تشکر شده 3,086 بار در 1,371 پست

    پیش فرض

    سلام
    message->id
    همونطور که دوستمون گفت id یک المانی از message هست
    spi_putc(0xff)
    تابع spi بالا داره دیتای 0xff رو بصورت سریال ارسال میکنه
    uint16_t
    منظور از عبارت بالا اینه که متغیرمون 16 بیتی هست به عبارتی قراره 16 بیت دیتا داخل id قرار بگیره پس id میتونه 16 بیت یا بیشتر دیتا قبول کنه

    این قسمت کارش اینه ک میگه 0xff رو که با spi ارسال میکنی 3 تا به چپ شیفت بده بعد بریز داخل المان id

    معادل باینری 16 بیتی 0xff میشه این : 0000000011111111
    حالا 3 تا شیفت پیدا کنه میشه این : 0000011111111000

    اگه بد توضیح دادم ببخشید بازم جای سوال بود بفرمائید اساتید هستن پاسخ میدن


    *** اللّهم عجّل لولیک الفرج ***

  10. کاربران : 2 تشکر کرده اند از شما Doloop برای ارسال این پست سودمند:


  11. #7
    عضو جدید
    تاریخ عضویت
    Apr 2014
    نوشته ها
    10
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض

    از راهنمایی های صبورانه شما تشکر میکنم

    تو توضیح (این قسمت کارش اینه ک میگه 0xff رو که با spi ارسال میکنی 3 تا به چپ شیفت بده بعد بریز داخل المان id
    اول
    شیف میکنه و بعد ارسال میشه یا برعکس داده دریافتی رو شیفت میده و ذخیره میکنه؛من اینو نفهمیدم؟
    تقدم و تاخر با کدومشونه؟
    uint8_t length = spi_putc(0xff) & 0x0f;
    الان یعنی در عبارت بالا هگز 0x0f رو میفرسته و بعد دریافت اطلاعات رو در uint8_t length ذخیره میکنه درسته
    پس اون هگز خارج از پرانتز چیه؟
    حالا تو خط قبلی برنامه 2 بار spi_putc(0xff); اینو میفرستیم اما چیزی دریافت نمیشه؟ داده دریافتی کجا میره پس؟

  12. #8
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2016
    نام
    حسین
    نوشته ها
    28
    تشکر
    37
    تشکر شده 24 بار در 12 پست

    پیش فرض

    سلام

    اولا اینجا اصلا تقدم و تاخر مهم نیست
    spi همیشه داره 0xff رو ارسال میکنه پس اینجا 0x0f همیشه با 0xff اند میشه

    حالا تو خط قبلی برنامه 2 بار spi_putc(0xff); اینو میفرستیم اما چیزی دریافت نمیشه؟ داده دریافتی کجا میره پس؟
    احتمالا مشکل در ارسال و دریافت میباشد

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


  14. #9
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    شما وقتی می خوای یک داده روی باس spi بخونی باید کلاک تولید کنید ( مستر وظیفه تولید کلاک رو داره) ( رجیستری رو که میخواید بخونید از قبل مشخص میکنید)
    برای تولید کلاک رو باس همیشه از بایت 0xff استفاده میشه.
    در رابطه با اولویت ؛ همیشه مقدار سمت راست مساوی ( نسبت به اولیت عملگر ) محاسبه میشه بعد مساوی مقدار سمت چپ قرار داده میشه.
    پس اول شما از باس spi میخونی بعد مقدار خونده شده رو با مقدار 0x0f ؛ and باینری میکنید ( 4 بیت بالا رو صفر میکنید بدلیل بی ارزش بودنش) بعد مقدارش رو برابر با متغییر length قرار میدید.
    در رابطه با سوال اخر هم همیشه شما داده رو دریافت میکنید و میکرو به طور اتوماتیک مقدار دریافتی رو داخل ریجستر داده Spi قرار میده اما اینکه شما ازش استفاده کنید یا نه به خودتون مربوطه.
    بعضی وقت ها شما لازم دارید یه سری کلاک تولید کنید تا یک کاری انجام بشه.
    مثلا فرض کنید داخل کد شما مقدار id 4 بایت هست و شما احتیاج دارید یه 2 بایت اولش ولی ای سی همیشه 4 بایت رو می فرسته پس شما باید به اندازه 4 بایت کلاک تولید کنید
    اما فقط 2 بایت اول رو میخونید و بقیه رو دور میریزید.

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


  16. #10
    عضو جدید
    تاریخ عضویت
    Apr 2014
    نوشته ها
    10
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض

    بسیار ممنون از شما
    ویرایش توسط bmvali : 08-06-2017 در ساعت 02:23

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

  1. درخواست حل مدار مولتی ویبراتور مونو استابل با پروتئوس
    توسط RedHuman در انجمن آموزش نرم افزارهای برق و الکترونیک
    پاسخ: 7
    آخرين نوشته: 26-05-2015, 02:26
  2. پاسخ: 2
    آخرين نوشته: 08-08-2014, 16:34
  3. سوکت زن کانکتور مخابراتی در بازار هست ؟؟
    توسط علیدلی در انجمن گفت و گوي آزاد
    پاسخ: 3
    آخرين نوشته: 17-08-2013, 22:06
  4. پاسخ: 4
    آخرين نوشته: 11-04-2013, 17:20

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

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