اطلاعیه

Collapse
No announcement yet.

تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

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

    تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

    سلام
    2 تابع هست که اولی مقادیر تاچ رو می خونه و خروجی تقریبا پایداری داره
    حالا خروجی تابع اول توسط تابع دوم گرفته میشه به محض گرفتن اعداد وقتی نمایش می دم پرش های بسیار زیاد و عجیبی در اعداد می بینم
    Coordinate *Read_XPT2046(void)
    {
    static Coordinate screen;
    int m0,m1,m2,temp[3],TP_X[1],TP_Y[1];
    uint8_t count=0;
    int buffer[2][9]={{0},{0}};

    do
    {
    XPT2046_GetAdXY(TP_X,TP_Y);
    buffer[0][count]=TP_X[0];
    buffer[1][count]=TP_Y[0];
    count++;
    }
    while(!read_IRQ()&& count<9); /* TP_INT_IN */

    if(count==9) /* Average X Y */
    {
    /* Average X */
    temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3;
    temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3;
    temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3;

    m0=temp[0]-temp[1];
    m1=temp[1]-temp[2];
    m2=temp[2]-temp[0];

    m0=m0>0?m0:(-m0);
    m1=m1>0?m1:(-m1);
    m2=m2>0?m2:(-m2);

    if( m0>THRESHOLD && m1>THRESHOLD && m2>THRESHOLD ) return 0;

    if(m0<m1)
    {
    if(m2<m0)
    screen.x=(temp[0]+temp[2])/2;
    else
    screen.x=(temp[0]+temp[1])/2;
    }
    else if(m2<m1)
    screen.x=(temp[0]+temp[2])/2;
    else
    screen.x=(temp[1]+temp[2])/2;

    /* Average Y */
    temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3;
    temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3;
    temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3;

    m0=temp[0]-temp[1];
    m1=temp[1]-temp[2];
    m2=temp[2]-temp[0];

    m0=m0>0?m0:(-m0);
    m1=m1>0?m1:(-m1);
    m2=m2>0?m2:(-m2);

    if( m0>THRESHOLD && m1>THRESHOLD && m2>THRESHOLD ) return 0;

    if(m0<m1)
    {
    if(m2<m0)
    screen.y=(temp[0]+temp[2])/2;
    else
    screen.y=(temp[0]+temp[1])/2;
    }
    else if(m2<m1)
    screen.y=(temp[0]+temp[2])/2;
    else
    screen.y=(temp[1]+temp[2])/2;

    sprintf(buf,"X=%5d,Y=%5d",screen.x,screen.y);
    LCD_ShowString(0,80,buf,Black,White);

    return &screen;
    }
    return 0;
    }


    تابع دوم
    FunctionalState getDisplayPoint(Coordinate * displayPtr,
    Coordinate * screenPtr,
    Matrix * matrixPtr )
    {
    FunctionalState retTHRESHOLD =ENABLE ;
    sprintf(buf,"X=%5d,Y=%5d",screenPtr->x,screenPtr->y);
    LCD_ShowString(0,60,buf,Black,White);

    if( matrixPtr->Divider != 0 )
    {
    /* XD = AX+BY+C */
    displayPtr->x = ( (matrixPtr->An * screenPtr->x) +
    (matrixPtr->Bn * screenPtr->y) +
    matrixPtr->Cn
    ) / matrixPtr->Divider ;
    /* YD = DX+EY+F */
    displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) +
    (matrixPtr->En * screenPtr->y) +
    matrixPtr->Fn
    ) / matrixPtr->Divider ;
    }
    else
    {
    retTHRESHOLD = DISABLE;
    }
    return(retTHRESHOLD);
    }
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    #2
    پاسخ : تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

    برنامه رو دیباگ کردم و به مسئله عجیبی برخورد کردم که مربوط به pointer هست که آدرسش تغییر می کنه بعضی اوقات به آدرس صحیح اشاره داره و بعضی اوقات به آدرس 0x00000000
    تو تصویر زیر می بینید که دو اشاره گر پایین به کجا اشاره دارند

    که در طی چند بار اجرا این آدرس تغییر می کند و
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    دیدگاه


      #3
      پاسخ : تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

      نوشته اصلی توسط seyed saeed نمایش پست ها
      برنامه رو دیباگ کردم و به مسئله عجیبی برخورد کردم که مربوط به pointer هست که آدرسش تغییر می کنه بعضی اوقات به آدرس صحیح اشاره داره و بعضی اوقات به آدرس 0x00000000
      تو تصویر زیر می بینید که دو اشاره گر پایین به کجا اشاره دارند

      که در طی چند بار اجرا این آدرس تغییر می کند و
      سلام
      تاجایی که فهمیدم تابع اول طی شرایطی که ظاهرا موفق نمیشه خواسته برنامه رو انجام بده به جای آدرس، مقدار 0 بر میگردونه و تابع دوم دقیقا روی هرچیزی که دریافت میکنه عملیات انجام میده! شما باید تابع دوم رو طوری بنویسید که اگر از تابع اول 0 دریافت کرد به کارش ادامه نده.

      دیدگاه


        #4
        پاسخ : تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

        نوشته اصلی توسط hossein.m98 نمایش پست ها
        سلام
        تاجایی که فهمیدم تابع اول طی شرایطی که ظاهرا موفق نمیشه خواسته برنامه رو انجام بده به جای آدرس، مقدار 0 بر میگردونه و تابع دوم دقیقا روی هرچیزی که دریافت میکنه عملیات انجام میده! شما باید تابع دوم رو طوری بنویسید که اگر از تابع اول 0 دریافت کرد به کارش ادامه نده.
        این راهی که میگید خیلی خوبه ولی دلیلش چی می تونه باشه که آدرس منتقل نمیشه ؟؟؟؟
        برنامه که تغییری نمی کنه میکرو هم که تغییری نمی کنه ولی چرا این اتفاق میفته؟؟؟؟
        اللهم صل علی محمد و ال محمد و عجل فرجهم
        پیامبر اکرم(ص):زکات علم نشر آن است.
        در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

        دیدگاه


          #5
          پاسخ : تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

          نوشته اصلی توسط seyed saeed نمایش پست ها
          این راهی که میگید خیلی خوبه ولی دلیلش چی می تونه باشه که آدرس منتقل نمیشه ؟؟؟؟
          برنامه که تغییری نمی کنه میکرو هم که تغییری نمی کنه ولی چرا این اتفاق میفته؟؟؟؟
          خط 17 تابع اول رو بینید؛ تو خط 17 یه شرطی هست که اگر اون نقض بشه تابع 0 بر میگردونه. شرط خط 17 هم خودش وابسته اس به اون حلقه قبلش. شما باید بررسی کنید ببینید توی اون حلقه چه اتفاقی رخ میده که باعث میشه متغیر count مقدار 9 به خودش نگیره و شرط خط 17 نقض بشه.

          دیدگاه


            #6
            پاسخ : تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

            نوشته اصلی توسط hossein.m98 نمایش پست ها
            خط 17 تابع اول رو بینید؛ تو خط 17 یه شرطی هست که اگر اون نقض بشه تابع 0 بر میگردونه. شرط خط 17 هم خودش وابسته اس به اون حلقه قبلش. شما باید بررسی کنید ببینید توی اون حلقه چه اتفاقی رخ میده که باعث میشه متغیر count مقدار 9 به خودش نگیره و شرط خط 17 نقض بشه.
            دقیقا درست گفتید من چون بریک پوینت گذاشتم تو دیباگ متوجه اون پرش نمی شدم خیلی ممنون فکر می کردم اصلا به اون خط نمی رسه
            اللهم صل علی محمد و ال محمد و عجل فرجهم
            پیامبر اکرم(ص):زکات علم نشر آن است.
            در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

            دیدگاه


              #7
              پاسخ : تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

              نوشته اصلی توسط hossein.m98 نمایش پست ها
              خط 17 تابع اول رو بینید؛ تو خط 17 یه شرطی هست که اگر اون نقض بشه تابع 0 بر میگردونه. شرط خط 17 هم خودش وابسته اس به اون حلقه قبلش. شما باید بررسی کنید ببینید توی اون حلقه چه اتفاقی رخ میده که باعث میشه متغیر count مقدار 9 به خودش نگیره و شرط خط 17 نقض بشه.
              100 بار دیباگ کردم هر بار هم count مقدار 9 رو می گیره ولی باز بعضی اوقات می پره روی return 0
              اللهم صل علی محمد و ال محمد و عجل فرجهم
              پیامبر اکرم(ص):زکات علم نشر آن است.
              در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

              دیدگاه


                #8
                پاسخ : تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

                نوشته اصلی توسط seyed saeed نمایش پست ها
                100 بار دیباگ کردم هر بار هم count مقدار 9 رو می گیره ولی باز بعضی اوقات می پره روی return 0
                خطوط 32 و 59 هم صفر بر میگردونن. اونا رو هم بررسی کنید.

                دیدگاه


                  #9
                  پاسخ : تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

                  نوشته اصلی توسط hossein.m98 نمایش پست ها
                  خطوط 32 و 59 هم صفر بر میگردونن. اونا رو هم بررسی کنید.
                  سلام حق با شماست
                  چون تو دیباگ پرش می کرد و می رفت آخرین return رو نشون میداد فکر می کردم اون if ها مشکلی ندارند
                  ممنون مشکل حل شد
                  یه سوال دیگه
                  این برنامه کالیبره کردن تاچ هست آیا برنامه دیگه ای سراغ دارید نمی دونم این چه قدر درست کار کنه و سه نقطه ای که بهش میدم چه مشخصاتی داشته باشه تا بهترین کالیبراسیون رو بگیرم
                  من سعی کردم نقاطم خیلی از هم دور باشند
                  این نقاطی هست که بهش می دم
                  DisplaySample[3] = { {30, 45}, {400, 430}, {770, 45} }

                  همون طور که می بیینید دو تا از نقاط از لحاظ y با هم یکی هستند
                  اللهم صل علی محمد و ال محمد و عجل فرجهم
                  پیامبر اکرم(ص):زکات علم نشر آن است.
                  در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

                  دیدگاه


                    #10
                    پاسخ : تغییر کردن اعداد هنگام فراخوانی توسط تابع ؟

                    نوشته اصلی توسط seyed saeed نمایش پست ها
                    سلام حق با شماست
                    چون تو دیباگ پرش می کرد و می رفت آخرین return رو نشون میداد فکر می کردم اون if ها مشکلی ندارند
                    ممنون مشکل حل شد
                    یه سوال دیگه
                    این برنامه کالیبره کردن تاچ هست آیا برنامه دیگه ای سراغ دارید نمی دونم این چه قدر درست کار کنه و سه نقطه ای که بهش میدم چه مشخصاتی داشته باشه تا بهترین کالیبراسیون رو بگیرم
                    من سعی کردم نقاطم خیلی از هم دور باشند
                    این نقاطی هست که بهش می دم
                    DisplaySample[3] = { {30, 45}, {400, 430}, {770, 45} }

                    همون طور که می بیینید دو تا از نقاط از لحاظ y با هم یکی هستند
                    متاسفانه تا حالا با تاچ کار نکردم.

                    دیدگاه

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