اطلاعیه

Collapse
No announcement yet.

علت این ارور

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

    علت این ارور

    سلام
    کسی میدونه چیکار کنم این ارور رو نده
    ADXL345.h(81): error: #167: argument of type "uint8_t" is incompatible with parameter of type "uint8_t *"

    ارور برای این تابع هست
    کد:
    uint32_t read_i2c(uint8_t BusAddres , uint8_t Reg , uint32_t Ack )
    {
      uint8_t Data;
      I2C_Start();
      I2C_Write(BusAddres);
      I2C_Write(Reg);
      I2C_Start();
      I2C_Write(BusAddres + 1);
      delay_ms(1);
      I2C_Read(Ack,Data);   این خط ارور میده
      I2C_Stop();
      return Data;
    }
    اینم تابع i2c_read

    کد:
    uint32_t I2C_Read (uint32_t ack, uint8_t *byte) {
     uint32_t stat;
     if (ack) LPC_I2C0->I2CONSET = I2C_CONSET_AA;
     else   LPC_I2C0->I2CONCLR = I2C_CONCLR_AAC;
    
     LPC_I2C0->I2CONCLR = I2C_CONCLR_STAC | I2C_CONCLR_SIC;
    
     stat = (ack) ? (I2C_STAT_DRA) : (I2C_STAT_DRNA);
     if (WaitStatus (stat) == 0) {
      *byte = LPC_I2C0->I2DAT;
      return (0);
     }
     return (1);
    }

    #2
    پاسخ : علت این ارور

    اون خط رو باید به این شکل بنویسید :
    کد:
    I2C_Read(Ack,&Data);

    دیدگاه


      #3
      پاسخ : علت این ارور

      علتش استفاده از اشاره گر در تابع زیر است (علامت * بیانگر این موضوعه)
      کد:
       uint32_t I2C_Read (uint32_t ack, uint8_t *byte)
      ولی شما مستقیماً اسم متغیر را داخلش نوشتی
      برای اینکه اشاره گر را به آدرس متغیر مقدار دهی کنی باید اون را با & بنویسی (همونطور که دوستمون فرمودند)
      کد:
      I2C_Read(Ack,&Data);
      موفق باشید

      امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

      دیدگاه


        #4
        پاسخ : علت این ارور

        حق با شماست.data رو هم میتونستم از نوع اشار گر تعریف کنم نه؟

        دیدگاه


          #5
          پاسخ : علت این ارور

          سلام
          data به نظرم باید ی رشته باشه تا اطلاعات ورودی که معمولا بیشتر از ی بایت هست رو در خودش ذخیره کنه پس ی اشاره گر خالی کافی نیست.
          شما ی آرایه تعریف کنی مشکلت حل میشه. فقط هم خط زیر رو تغییر بده
          کد:
          uint8_t Data;
          به این صورت
          کد:
          uint8_t Data[20];
          موفق باشی
          زندگی یعنی امید و حرکت
          کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
          سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
          برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
          به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

          دیدگاه


            #6
            پاسخ : علت این ارور

            نوشته اصلی توسط arvin2009
            حق با شماست.data رو هم میتونستم از نوع اشار گر تعریف کنم نه؟
            بله میتونید ، اما بهترین راه همین قرار دادن آدرس متغیر هست.
            توضیح این که به این نو پاس دادن متغیر به تابع by ref میگن و فرقش با by val تو اینه که مقدار متغیر قبل از فراخوانی تابع مورد نظر با بعدش فرق میکنه ، یعنی این که میتونید مقدار خروجی تابع رو بدون اینکه تابع خروجی داشته باشه از طریق آرگومانهای ورودی به خروجی بفرستید.

            دیدگاه


              #7
              پاسخ : پاسخ : علت این ارور

              نوشته اصلی توسط علی ایمانی فر
              سلام
              data به نظرم باید ی رشته باشه تا اطلاعات ورودی که معمولا بیشتر از ی بایت هست رو در خودش ذخیره کنه پس ی اشاره گر خالی کافی نیست.
              شما ی آرایه تعریف کنی مشکلت حل میشه. فقط هم خط زیر رو تغییر بده
              کد:
              uint8_t Data;
              به این صورت
              کد:
              uint8_t Data[20];
              موفق باشی
              بله، ولی موقعی باید اینکار را انجام داد که نیاز به آرایه باشه در این تابع فقط یک بایت خوانده میشه
              کد:
               *byte = LPC_I2C0->I2DAT;
              موفق باشید
              امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

              دیدگاه

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