اطلاعیه

Collapse
No announcement yet.

مشکل با sprintf

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

    مشکل با sprintf

    سلام
    من توی یه برنامه میخوام یه عدد اعشاری (float) رو روی lcd چاپ کنم
    با دستور
    sprintf(str,"val=%f",val);این عددو میریزم تو آرایه str اما انگار تابع sprintf به اعداد اعشاری واکنشی نشون نمیده
    چیزی روی lcd چاپ نمیشه
    اشکال از برنامست یا از کامپایلر ؟!
    گفت که دیوانه نهی لایق این خانه نهی

    #2
    پاسخ : مشکل با sprintf

    به جای تابع sprintf با تابع ftoa عدد رو تبدیل به رشته کن بعد با lcd_puts اونو بنویس

    دیدگاه


      #3
      پاسخ : مشکل با sprintf

      با سلام،

      کامپایلر چیه؟! اگر از کدویژن استفاده میکنی، در مسیر زیر، Sprintf رو بزار روی Float :

      Project>Confiure>C compiler

      و مثلا اینطوری بنویس :

      sprintf(Ctemp, "Td:%3.1f ", DIVfactor[TdivID]);
      مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

      Sh_Nourbakhsh@Yahoo.com

      http://s2.picofile.com/file/7170362468/_Wall_e_.jp

      دیدگاه


        #4
        پاسخ : مشکل با sprintf

        نوشته اصلی توسط aivhl
        با سلام،

        کامپایلر چیه؟! اگر از کدویژن استفاده میکنی، در مسیر زیر، Sprintf رو بزار روی Float :

        Project>Confiure>C compiler

        و مثلا اینطوری بنویس :

        sprintf(Ctemp, "Td:%3.1f ", DIVfactor[TdivID]);
        آقا دمت گرم
        مشکلم حل شد
        گفت که دیوانه نهی لایق این خانه نهی

        دیدگاه


          #5
          پاسخ : مشکل با sprintf

          نوشته اصلی توسط aivhl
          با سلام،

          کامپایلر چیه؟! اگر از کدویژن استفاده میکنی، در مسیر زیر، Sprintf رو بزار روی Float :

          Project>Confiure>C compiler

          و مثلا اینطوری بنویس :

          sprintf(Ctemp, "Td:%3.1f ", DIVfactor[TdivID]);
          با این کار اندازه فایل HEX چیزی حدود 5.5 کیلو بیشتر می شه برای مگا هشت اصلا نتونستم ازش جواب بگیرم
          ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
          غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

          دیدگاه


            #6
            پاسخ : مشکل با sprintf

            نوشته اصلی توسط ele_sav
            با این کار اندازه فایل HEX چیزی حدود 5.5 کیلو بیشتر می شه برای مگا هشت اصلا نتونستم ازش جواب بگیرم
            با سلام،

            این تنها راه ممکنه!!!

            درسته، حجم کد زیاد میشه، ولی فکر نکنم اینقدر زیاد.....
            کلا که در این مقوله مشکلات زیاده، تویه WinAVR که اصلا جواب درست و درمونی نمیده، از PrintF هم که استفاده بشه، باز هم گیر های فراوونی داره!!!
            باید از راه حل های جایگزین ( مثل محاسبات 1000 برابر و ایناها! ) استفاده کرد، هر چن که این هم خودش گرفتاری های خاص خودش رو داره، یا باید بری سر وقت IAR !!! چاره ای نیست، چه انتظاری داری؟ یه میکروی هشت بیتی که بیشتر نیست.... :mrgreen:
            مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

            Sh_Nourbakhsh@Yahoo.com

            http://s2.picofile.com/file/7170362468/_Wall_e_.jp

            دیدگاه


              #7
              پاسخ : مشکل با sprintf

              فک کنم با استفاده از تابع ftoa تو کتابخونه ی stdlib هم مشکل اولت حل میشه هم حجم کمتری رو نسبت به کتابخونه ی stdio و تابع sprintf اشغال کنه.....تازه اگه از ورژن های جدید codevision استفاده کنی خودش توابعی که استفاده نشده compile نمیکنه و حجم برنامه خیلی کمتر میشه ( ورژن 2.05.3 )
              موفق باشید

              دیدگاه


                #8
                بدون استفاده از توابع اعشاری مقدار اعشاری رو به رشته تبدیل کنید

                دیروز به این روش عمل کردم و فعلا مشکلی ندارم
                اگر عدد اعشاری رو در داخل متغییر عدد صحیح قرار بدی قسمت صحیح مقدار دهی می شه و قسمت اعشار حذف می شه
                حالا اگه متغییر عددی رو از متغییر اعشاری کم کنیم یک متغییر اعشاری داریم که مقدار صحیح نداره
                حالا اگه مقدار اعشاری به دست آومده را در 100(برای دو رقم اعشار) ضرب کنیم و باز در یک متغییر صحیح قرار بدیم مقدار صحیح برداشته می شه و مقدار اعشاری حذف می شه هنگام نمایش با یک (.) همه چیز حله

                این کد رو ببینید
                [shadow=red,left]
                float m;
                int i,j;

                m=15.16;

                i=m; // i=15
                j=(m-i)*100; // j=16

                sprintf(str,"%d.%d",i,j)
                [/shadow]
                ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
                غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

                دیدگاه


                  #9
                  پاسخ : بدون استفاده از توابع اعشاری مقدار اعشاری رو به رشته تبدیل کنید

                  نوشته اصلی توسط ele_sav
                  دیروز به این روش عمل کردم و فعلا مشکلی ندارم
                  اگر عدد اعشاری رو در داخل متغییر عدد صحیح قرار بدی قسمت صحیح مقدار دهی می شه و قسمت اعشار حذف می شه
                  حالا اگه متغییر عددی رو از متغییر اعشاری کم کنیم یک متغییر اعشاری داریم که مقدار صحیح نداره
                  حالا اگه مقدار اعشاری به دست آومده را در 100(برای دو رقم اعشار) ضرب کنیم و باز در یک متغییر صحیح قرار بدیم مقدار صحیح برداشته می شه و مقدار اعشاری حذف می شه هنگام نمایش با یک (.) همه چیز حله

                  این کد رو ببینید
                  [shadow=red,left]
                  float m;
                  int i,j;

                  m=15.16;

                  i=m; // i=15
                  j=(m-i)*100; // j=16

                  sprintf(str,"%d.%d",i,j)
                  [/shadow]
                  با سلام،

                  منظور من هم یه چیز تو همین مایه ها بود، اینطوری دردسرش کمتره ....
                  مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                  Sh_Nourbakhsh@Yahoo.com

                  http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                  دیدگاه

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