اطلاعیه

Collapse
No announcement yet.

درخواست توضیح قسمتی از کد C

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

    درخواست توضیح قسمتی از کد C

    سلام خدمت اساتید محترم
    لطفا این تیکه کد رو اگه ممکنه توضیح بدید که میخواد چیکار کنه
    در مورد ارتباط CAN تو میکرو کنترلر avr
    کد:
    uint8_t mcp2515_get_message(tCAN *message)
    {
        // read status
        uint8_t status = mcp2515_read_status(SPI_RX_STATUS);
        uint8_t addr;
        
        if (bit_is_set(status,6)) {
            // message in buffer 0
            addr = SPI_READ_RX;
        }
        else if (bit_is_set(status,7)) {
            // message in buffer 1
            addr = SPI_READ_RX | 0x04;
        }
        else {
            // Error: no message available
            return 0;
        }
    
        RESET(MCP2515_CS);
        spi_putc(addr);
        
        // read id
        message->id  = (uint16_t) spi_putc(0xff) << 3;
        message->id |=            spi_putc(0xff) >> 5;
        
        spi_putc(0xff);
        spi_putc(0xff);
        
        // read DLC
        uint8_t length = spi_putc(0xff) & 0x0f;
        
        message->header.length = length;
        message->header.rtr = (bit_is_set(status, 3)) ? 1 : 0;
        
        // read data
        for (uint8_t i=0;i<length;i++) {
            message->data[i] = spi_putc(0xff);
        }
        SET(MCP2515_CS);
        
        // clear interrupt flag
        if (bit_is_set(status, 6)) {
            mcp2515_bit_modify(CANINTF, (1<<RX0IF), 0);
        }
        else {
            mcp2515_bit_modify(CANINTF, (1<<RX1IF), 0);
        }
        
        return (status & 0x07) + 1;
    }

    #2
    پاسخ : درخواست توضیح قسمتی از کد C

    بگو دقیقا کجاشو نمیدونی تا توضیح بدم - کلشو که نمیشه توضیح داد زیاده -
    اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

    اگه دوس دارید سریع به جواب برسید :
    1) قبل از پرسیدن سوال، بسرچید.
    2) سوالاتون رو با جزئیات کامل مطرح کنید.

    دیدگاه


      #3
      پاسخ : درخواست توضیح قسمتی از کد C

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

      دیدگاه

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