اطلاعیه

Collapse
No announcement yet.

la;g fh مقدار بازگشتی float در تابع با lpc1788

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

    la;g fh مقدار بازگشتی float در تابع با lpc1788

    سلام خدمت دوستان
    یه مشکلی برای من پش اومد و اون اینه که :
    یه تابع نوشتم که مقدار برگشتی اون float هستش
    اما وقتی این تابع فراخوانی میشه یه عدد خیلی بزرگ و بدون اعشاری برمیگردونه
    دوستان راهی پیدا کردن برای درست برگردوندن؟؟؟؟
    ممنون میشم راهنمایی کنید
    برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

    #2
    پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

    از پروتو تایپ استفاده کردید ؟
    یعنی اونجا که استفاده کردید ، قبلش پروتو تایپ تابع رو گذاشتید ؟

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    نوشته اصلی توسط hossein_tomari007 نمایش پست ها
    سلام خدمت دوستان
    یه مشکلی برای من پش اومد و اون اینه که :
    یه تابع نوشتم که مقدار برگشتی اون float هستش
    اما وقتی این تابع فراخوانی میشه یه عدد خیلی بزرگ و بدون اعشاری برمیگردونه
    دوستان راهی پیدا کردن برای درست برگردوندن؟؟؟؟
    ممنون میشم راهنمایی کنید
    اگه سورس رو هم بزارید خوبه
    ا

    دیدگاه


      #3
      پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

      پروتوتایپ هم توی فایل هدر هستش
      سیمولیت میکنم هم میره توی تابع
      مقدار متغییر توی تابع هم درسته ولی از تابع که در میاد ، متغییری که باید اون عدد رو بگیره یه عدد خیلی بزرگ میده
      حتی تابع زیر هم کار نمیکنه
      کد:
      float max(void){return 3.52;}
      جدیدترین ویرایش توسط hossein_tomari007; ۱۴:۳۸ ۱۳۹۶/۰۶/۰۸.
      برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

      دیدگاه


        #4
        پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

        نوشته اصلی توسط x935418 نمایش پست ها
        از پروتو تایپ استفاده کردید ؟
        یعنی اونجا که استفاده کردید ، قبلش پروتو تایپ تابع رو گذاشتید ؟
        ربطی نداره، اگر کامپایلر تابع رو پیدا نمی کرد Error بر می گردوند خب.

        نوشته اصلی توسط hossein_tomari007 نمایش پست ها
        یه تابع نوشتم که مقدار برگشتی اون float هستش
        نوشته اصلی توسط hossein_tomari007 نمایش پست ها
        اما وقتی این تابع فراخوانی میشه یه عدد خیلی بزرگ و بدون اعشاری برمیگردونه


        سورس رو بگذارید خیلی خوبه.

        به طور خاص، جایی که تابع رو فراخوانی می کنید، مقدار خروجی تابع رو در چه نوع متغیری نگه داری میکنید؟
        اعداد همه به صورت صفر ویک در حافظه ذخیره می شوند، این نوع متغیره که تفسیر می کنه یک "رشته ی خاص " صفر و یک نشون دهنده ی یک عدد کسری باشه، یا یک عدد صحیح و یا ....

        حدس من اینه که شما خروجی تابع رو در متغیری از جنس int ذخیره کردید. و تصور کردید خودش گرد میکنه و یا. ...

        دیدگاه


          #5
          پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

          کد:
           float get_max6675(void)
          {
          char i=0;
          int temp=0;
          int in=0;
          float tmp;
          	
          CS_LOW_MAX6675();
          wait_ms_max6675(1);
          	for(i=0;i<16;i++)
          	{
          		in=SO_STATE_MAX6675();
          		temp=(i<15) ? (temp|in)<<1 : (temp|in);
          		SCK_HIGH_MAX6675();
          		wait_ms_max6675(1);
          		SCK_LOW_MAX6675();		
          		wait_ms_max6675(1);
          	}
          CS_HIGH_MAX6675();
          tmp=((temp>>3)/4);
          return (tmp);	
          }
          اینم پروتو تایپش
          کد:
          float get_max6675(void);
          برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

          دیدگاه


            #6
            پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

            نوشته اصلی توسط hossein_tomari007 نمایش پست ها
            اینم پروتو تایپش
            اون جایی که تابع رو استفاده میکنید، مقدارش برگشتی رو توی float می گذارید دیگه؟
            اونجا برام مهمه

            دیدگاه


              #7
              پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

              بله باید float باشه

              دلیل: ادغام دو پست برای جلوگیری از اسپم

              فرمتی که برمیگردونه فرمت 32-Bit IEEE formatهستش که باید تبدیل بشه
              ولی نمیدونم چطوری!!!
              توی لینک https://www.h-schmidt.net/FloatConverter/IEEE754.html تبدیل میکنه و عدد هم درسته
              اما توی برنامه چطور باید ردیفش کنم نمیدونم
              برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

              دیدگاه


                #8
                پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

                نوشته اصلی توسط hossein_tomari007 نمایش پست ها
                بله باید float باشه

                دلیل: ادغام دو پست برای جلوگیری از اسپم

                فرمتی که برمیگردونه فرمت 32-Bit IEEE formatهستش که باید تبدیل بشه
                ولی نمیدونم چطوری!!!
                توی لینک https://www.h-schmidt.net/FloatConverter/IEEE754.html تبدیل میکنه و عدد هم درسته
                اما توی برنامه چطور باید ردیفش کنم نمیدونم
                اونجا که از مقدار برگشتی استفاده میکنید و احتمالا نمایش میدین چطور ؟
                یکی دوخط هم از اونجا بزارید

                دیدگاه


                  #9
                  پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

                  نوشته اصلی توسط hossein_tomari007 نمایش پست ها
                  بله باید float باشه
                  خب اصلا انتظار دارید چند خروجی چی باشه؟
                  چون تابع های دیگه رو فراخوانی کردید و من نمی دونم چی هستن، نمی تونم حساب کنم قاعدتا.
                  پیشنهادم اینه که اول تابع تون رو تغییر بدید طوری که متغیر های دیگه مثل i و in و temp رو خروجی بگیرید و ببینید مثل انتظارتون هست یا نه؟

                  دلیل: ادغام دو پست برای جلوگیری از اسپم

                  نوشته اصلی توسط hossein_tomari007 نمایش پست ها
                  فرمتی که برمیگردونه فرمت 32-Bit IEEE formatهستش که باید تبدیل بشه
                  ولی نمیدونم چطوری!!!
                  توی لینک https://www.h-schmidt.net/FloatConverter/IEEE754.html تبدیل میکنه و عدد هم درسته
                  اما توی برنامه چطور باید ردیفش کنم نمیدونم
                  یعنی چی باید تبدیل بشه؟ چی بلایی داری سر فلوتت میاری؟

                  دیدگاه


                    #10
                    پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

                    کد:
                    while(1)
                    	{
                    [FONT=Yekan]		[/FONT]
                    		unsigned char buf[30];
                    		gg=get_max6675();
                    
                    
                    		sprintf(buf,"Temp = %f \n\r",gg);
                    		UART_Send(_LPC_UART, buf, strlen(buf), BLOCKING);
                    		//wait_ms(500);
                    	}
                    متغییر gg هم گلوبال و از نوع float

                    دلیل: ادغام دو پست برای جلوگیری از اسپم

                    دوست عزیز تابع های دیگه فقط پورت ها رو صفر و یک میکنن یا از پین میخونن
                    کار دیگه ای نمیکنن
                    برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

                    دیدگاه


                      #11
                      پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

                      شاید اعشار این عددت خیلی زیاده و میزنه کلا اون buf رو تهش رو رد میکنه و ....

                      اینجوریش کن مثلا:

                      اعشار و عدد رو محدود کن

                      مثلا با نوشتن %f به صورت زیر:


                      %.3f

                      دیدگاه


                        #12
                        پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

                        نوشته اصلی توسط hossein_tomari007 نمایش پست ها
                        کد:
                        while(1)
                            {
                        
                                unsigned char buf[30];
                                gg=get_max6675();
                        
                        
                                sprintf(buf,"Temp = %f \n\r",gg);
                                UART_Send(_LPC_UART, buf, strlen(buf), BLOCKING);
                                //wait_ms(500);
                            }
                        متغییر gg هم گلوبال و از نوع float

                        دلیل: ادغام دو پست برای جلوگیری از اسپم

                        دوست عزیز تابع های دیگه فقط پورت ها رو صفر و یک میکنن یا از پین میخونن
                        کار دیگه ای نمیکنن
                        یکبار هم با عدد آماده چک کنید
                        مثل مثال زیر
                        کد:
                        [LEFT]sprintf(buf,"Temp = %f \n\r",3.14);
                                UART_Send(_LPC_UART, buf, strlen(buf), BLOCKING);
                        [/LEFT]
                        ببینید اصلا عدد پی در خروجی ظاهر میشه یا نه ؟

                        دیدگاه


                          #13
                          پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

                          نوشته اصلی توسط dark star نمایش پست ها
                          خب اصلا انتظار دارید چند خروجی چی باشه؟
                          چون تابع های دیگه رو فراخوانی کردید و من نمی دونم چی هستن، نمی تونم حساب کنم قاعدتا.
                          پیشنهادم اینه که اول تابع تون رو تغییر بدید طوری که متغیر های دیگه مثل i و in و temp رو خروجی بگیرید و ببینید مثل انتظارتون هست یا نه؟

                          دلیل: ادغام دو پست برای جلوگیری از اسپم



                          یعنی چی باید تبدیل بشه؟ چی بلایی داری سر فلوتت میاری؟
                          همون طوری که گفتم تابع های دیگه کار خاصی نمیکنن و از پورت میخونن و یا صفر و یک میکنن
                          وقتی مقدار برگشتی رو از نوع int تعریف میکنم عدد صحیح رو به درستی بر میگردونه و مشکلی نداره
                          اما وقتی float میشه به مشکل میخورم
                          و عددی که بر میگردونه عددی بزرگه که اون عددو تبدیل به هگز میکنم و کپی میکنم توی فیلد پنج لینک فوق
                          عدد رو بهم میده

                          دلیل: ادغام دو پست برای جلوگیری از اسپم

                          نوشته اصلی توسط dark star نمایش پست ها
                          شاید اعشار این عددت خیلی زیاده و میزنه کلا اون buf رو تهش رو رد میکنه و ....

                          اینجوریش کن مثلا:

                          اعشار و عدد رو محدود کن

                          مثلا با نوشتن %f به صورت زیر:


                          %.3f
                          قبلاً تست کردم اینطور هم نشد !!!

                          دلیل: ادغام دو پست برای جلوگیری از اسپم

                          نوشته اصلی توسط x935418 نمایش پست ها
                          یکبار هم با عدد آماده چک کنید
                          مثل مثال زیر
                          کد:
                          [LEFT]sprintf(buf,"Temp = %f \n\r",3.14);
                                  UART_Send(_LPC_UART, buf, strlen(buf), BLOCKING);
                          [/LEFT]
                          ببینید اصلا عدد پی در خروجی ظاهر میشه یا نه ؟
                          این رو هم تست کردم درست کار میکنه
                          یعنی مشکل از برگشتی تابع هستش

                          دلیل: ادغام دو پست برای جلوگیری از اسپم

                          اگه کیل دم دستتون هست تست کنید
                          توی شبیه سازیش کاملاً مشخص میشه
                          برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

                          دیدگاه


                            #14
                            پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

                            نوشته اصلی توسط hossein_tomari007 نمایش پست ها
                            این رو هم تست کردم درست کار میکنه
                            یعنی مشکل از برگشتی تابع هستش
                            فقط اینو اگر ممکنه امتحان کن (توضیح دادن چراش طولانیه )
                            float رو کلا بکن double بعد ببین چی میگیری؟

                            یعنی توی تعریف ها و ...
                            %F همون بمونه

                            دیدگاه


                              #15
                              پاسخ : la;g fh مقدار بازگشتی float در تابع با lpc1788

                              آیا تابع get_max6675 در یک فایل و تابعی که از آن استفاده میکند در یک فایل دیگر است ؟ یا هردو در یک فایل هستند ؟
                              جدیدترین ویرایش توسط x935418; ۱۵:۴۹ ۱۳۹۶/۰۶/۰۸.

                              دیدگاه

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