اطلاعیه

Collapse
No announcement yet.

مشکل sprintf در iar

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

    مشکل sprintf در iar

    سلام
    3 تا کد اینجاست که اولیش راحت کار میکنه دومیش نه و سومیش عجیبه که کار میکنه
    lcd_putsf درسته تابعش . من اسمشو این گذاشتم ربطی به سیستم codevision نداره
    کد:
    #include <iom16.h>
    #include <stdio.h>
    #include "delay.h"
    #include "lcd.h"
    #include "seg.h"
    #include "spi.h"
    unsigned char adc_read(int);
    int b;
    char lcd[]={'s','a','e','e','d'};
    void main(void)
    {
     DDRA=0x00;
     DDRC=0xFF;
     DDRD=0xff;
     DDRB=0xFF;
     lcd_init();
     while(1)
     {
        lcd_putsf(lcd);
        delay_ms(1000);
        lcd_clr();
    }
    }
    این کد بالا قشنگ کار میکنه بدون هیچ مشکلی و اسم سعید رو مینویسه اما کد پایین کار نمیکنه
    کد:
    #include <iom16.h>
    #include <stdio.h>
    #include "delay.h"
    #include "lcd.h"
    #include "seg.h"
    #include "spi.h"
    unsigned char adc_read(int);
    int b;
    char lcd[20];
    void main(void)
    {
     DDRA=0x00;
     DDRC=0xFF;
     DDRD=0xff;
     DDRB=0xFF;
     lcd_init();
     while(1)
     {
     for(b=0;b<=10;b++)
     {
        sprintf(lcd,"%d",b);
        lcd_putsf(lcd);
        delay_ms(100);
        lcd_clr();
        
     }
    }
    }
    خیلی تو نت گشتم کلافه شدم oo: اما جواب نمیده . %d , %s %.. همرو هم امتحان کردم

    حتی این برنامه زیر هم جواب میده و سعید رو ال سی دی میاد اما به محزی که % میخوره یا جواب نمیده هیچی نمیاد یا پروتئوس گیر میده سیموله نمیکنه
    کد:
    #include <ioavr.h>
    #include <stdio.h>
    #include "delay.h"
    #include "lcd.h"
    void main(void)
    {
     int b=101;
     char buff[20];
     DDRA=0xff;
     DDRB=0xFF;
     lcd_init();
     while(1)
     {
      sprintf(buff,"saeed",b);
      lcd_putsf(buff);
       delay_ms(1000);
      lcd_clr();
      
     }
    }
    اررور تو پروتئوس هم:
    POP PROGRAM STACK : SP IS NOT INITIALIZED یا out of program memory size میده . رو flash هم نمیتونم بریزمش چون متغییره
    سایز CSTACK هم تا 0x65 بردم بالا رو FF اروور میده! اما جواب نداد . تنظیماتی هم داره خود IAR که انجام بدم؟
    با این همه راهی هست یه عدد چند رقمی رو دونه دونه جدا کنم و به ارایه ببرم ؟
    اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
    هيتلر

    #2
    پاسخ : مشکل sprintf در iar

    امکان داره مشکل باگ نرم افزار باشه؟؟ اگه این مشکل باشه چطور میتونم عدد رو ببرم به یه ارایه؟ مثلا 123 رو ببرم به
    {1,2,3,}
    بدونه استفاده از sprintf
    اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
    هيتلر

    دیدگاه


      #3
      پاسخ : مشکل sprintf در iar

      نوشته اصلی توسط Saeed Saeb
      امکان داره مشکل باگ نرم افزار باشه؟؟ اگه این مشکل باشه چطور میتونم عدد رو ببرم به یه ارایه؟ مثلا 123 رو ببرم به
      {1,2,3,}
      بدونه استفاده از sprintf
      می تونی از یه حلقه استفاده کنی. توی کتاب های C++ گفتن چطوری.
      من مدتهاست که توی سایت freaks عضو هستم و میبینم که خیلی افراد متخصص اونجا هست. بچه ها میگن تک هستن ولی چیزی که من دیدم ظاهرا نه حاضرا 3000 دلار بدن بابت این کامپایلر و نه جرات میکنن برن طرفش. انوقت شما...
      شما بهتر بود اول C++ رو خوب یاد بگیرید و بعد برید طرفش.

      دیدگاه


        #4
        پاسخ : مشکل sprintf در iar

        نوشته اصلی توسط rozeh
        می تونی از یه حلقه استفاده کنی. توی کتاب های C++ گفتن چطوری.
        من مدتهاست که توی سایت freaks عضو هستم و میبینم که خیلی افراد متخصص اونجا هست. بچه ها میگن تک هستن ولی چیزی که من دیدم ظاهرا نه حاضرا 3000 دلار بدن بابت این کامپایلر و نه جرات میکنن برن طرفش. انوقت شما...
        شما بهتر بود اول C++ رو خوب یاد بگیرید و بعد برید طرفش.
        ممنون
        یه نظرتون این درسته؟
        کد:
        char buffer[20]
        int p =120
        ...
        .
        void sp(char *data,int number)
        {
         char p;
        int i;
        for(i=0;data[i];i++)
        buff[i] = data[i];
        while(number>1)
        {
        p=number%10;
        p=p+48;
        buff[i++]=p;
        number=number/10;
        }
        }
        و buff رو به lcd میدم
        salam رو مینویسه اما اعداد ن برعکس میان رو صفحه
        اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
        هيتلر

        دیدگاه


          #5
          پاسخ : مشکل sprintf در iar

          اقا جواب گرفتم . نوشتم خودم :mrgreen: فقط اینکه اعشار نمیده :(
          کد:
          void sp(char *data,int number)
          {
          char e[20];
          char p;
          int i;
          int t=0;
          for(i=0;data[i];i++)
          buff[i] = data[i];
          while(number>=1)
          {
          p=number%10;
          p=p+48;
          e[t++]=p;
          number=number/10;
          }
          while(t>=0)
          buff[i++]=e[--t];
          }
          اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
          هيتلر

          دیدگاه


            #6
            پاسخ : مشکل sprintf در iar

            خب شما باید متغییر مربوطه رو قرار بدید.

            دیدگاه


              #7
              پاسخ : مشکل sprintf در iar

              نوشته اصلی توسط rozeh
              خب شما باید متغییر مربوطه رو قرار بدید.
              چه متغییری؟ والا دارم روش کار میکنم فعلا یه جواباییم گرفتم واسه 2 رقم اعشار . ا
              salam123. رو لی سی دی میده اما 25 صدم رو نمیده . حالا اگه fl رو مستقیم بدم خروجی 25 صذم رو میه ! اما نمیتونه با buff قاطیش کنه یه جای کار میلنگه :NO:
              کد:
              char buff[40];
              //////////////////////////////////////////
               while(1)
               {
                spf("salam",123.25);
                lcd_putsf(buff);
                delay_ms(1000);
                lcd_clr();
               }
              }
              void spf(char *data,float numb)
              {
              char fl[2];
              char e[2];
              int num;
              float sum;
              int sum1;
              int p;
              int t=0;
              int i=0;
              int l;
              int u;
              num = numb;
              sum=numb-num;
              sum=sum*100;
              sum1=sum;
              while(sum1>=1)
              {
              p=sum1%10;
              p=p+48;
              e[t++]=p;
              sum1=sum1/10;
              }
              while(t>=0)
              fl[i++]=e[--t];
              u=spin(data,num);
              while(i>=0)
              buff[u++]=fl[i--];
              }
              ////////////////////////////////////////////
              int spin(char *data,int number)
              {
              char e[20];
              char p;
              int i;
              int t=0;
              for(i=0;data[i];i++)
              buff[i] = data[i];
              while(number>=1)
              {
              p=number%10;
              p=p+48;
              e[t++]=p;
              number=number/10;
              }
              while(t>=0)
              buff[i++]=e[--t];
              buff[i]='.';
              return i;
              }
              اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
              هيتلر

              دیدگاه


                #8
                پاسخ : مشکل sprintf در iar

                می خوایید متغییر رو float یا double تعریف کنید.
                چرا متغییرها رو دونه دونه تعریف کردین؟

                دیدگاه


                  #9
                  پاسخ : مشکل sprintf در iar

                  نوشته اصلی توسط rozeh
                  می خوایید متغییر رو float یا double تعریف کنید.
                  چرا متغییرها رو دونه دونه تعریف کردین؟
                  داشتم از روش ازمون و خطا میرفتم دونه دونه هر جا لازم میشد اضافه میکردم بعدن که خواستم هدرش بکنم درستش میکنم .
                  کدوم متغییر رو float یا double بدم؟ و چرا؟
                  اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                  هيتلر

                  دیدگاه


                    #10
                    پاسخ : پاسخ : مشکل sprintf در iar

                    نوشته اصلی توسط Saeed Saeb
                    داشتم از روش ازمون و خطا میرفتم دونه دونه هر جا لازم میشد اضافه میکردم بعدن که خواستم هدرش بکنم درستش میکنم .
                    کدوم متغییر رو float یا double بدم؟ و چرا؟
                    در این صفحه و در قسمت Fundamental data types یه جدول هست که اسم و نوع متغییر و سایز و رنجش رو گفته. برو ببین:

                    Variables. Data Types

                    دیدگاه


                      #11
                      پاسخ : پاسخ : مشکل sprintf در iar

                      نوشته اصلی توسط rozeh
                      در این صفحه و در قسمت Fundamental data types یه جدول هست که اسم و نوع متغییر و سایز و رنجش رو گفته. برو ببین:

                      Variables. Data Types
                      اقا تموم شد جواب گرفتم . جلوی for اخر تایع SPF سمیکالون گذاشته بووودم :angry: :angry: :angry: :angry: :angry:
                      أیگه خسته شدم از ضبح دارم روش کار میکنم همش یه ادا در میاره یه چیزی جواب میده اون یکی نمیده عدد 5 رقمی میشه نمیده و یک کاری میکنم بده برعکس میده . خواهش بگید چه جوری میشه این sprintf رو راه اندازی کرد!!! :cry2: :cry2: :cry2: :cry2:
                      اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                      هيتلر

                      دیدگاه


                        #12
                        پاسخ : مشکل sprintf در iar

                        کسی با این کار نکرده؟
                        اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                        هيتلر

                        دیدگاه


                          #13
                          پاسخ : مشکل sprintf در iar

                          شما که گفتین هم C# و هم C/C++ رو بلدین!
                          خب حالا عیبی نداره. یه همن جا ولش کن برو با کامپایلرهای راحت تر کار کن یا صبر کن تا بعضی بچه هایی که IAR کار میکنن کمکت کنن.

                          دیدگاه


                            #14
                            پاسخ : مشکل sprintf در iar

                            نوشته اصلی توسط rozeh
                            شما که گفتین هم C# و هم C/C++ رو بلدین!
                            خب حالا عیبی نداره. یه همن جا ولش کن برو با کامپایلرهای راحت تر کار کن یا صبر کن تا بعضی بچه هایی که IAR کار میکنن کمکت کنن.
                            دوست عزیز من هم C++ کار کردم هم C# . شما که سطح دیگران رو نمیدونید
                            شما اگه میتونید کمک کنید در ضمن من فرق float با integer رو میدونم که این صفحه رو به من پیشنهاد دادید!!! شما اگه میتونی کمک کن اگه نه نسخه نپیچ خواهشن و تحقیرم نکن دیگران رو ! من یه sprintf کمک خواستم که رو این کار نمیکرد مارو کردین بدترین برنامه نویس . اشکال نداره من بدترین
                            شما تنها کمکی که کردی این بود که flout رو بکن double یا چرا int ها تو چندتا خطه بدشم اون سایت رو دادی که توش تعریف int , flout بود!!

                            با اجازه شما این رو هم جواب گرفتم بیاید به هم و میزانن سواد هم توهین نکنیم!!
                            اینم کدش:

                            کد:
                            void spif(char buff[20],char * data,double numb)
                            {
                            /////////////////// integer vars
                            char integer[12];
                            int ic=0;
                            /////////////////// float vars
                            char flo[4];
                            int fc = 0;
                            /////////////////// buffer vars
                            int j=0 ,c ,f ,i, ta;
                            ///////////////////////////////////////////// sep float and int
                            int inti;
                            double flot; 
                            int floti;
                            inti=numb;     //clamp float
                            flot=numb-inti;   //sep integer
                            flot=(flot*100);  //flot come up
                            floti=flot;    ///float integer!
                            ///////////////////////////////////////////// floaat calc
                            if(floti!=0)
                             {
                              flo[0]='.';
                              if (floti<=99&& floti>=10)
                                {
                                 fc=1;
                                 for(ta=10;ta>=1;ta=ta/10)
                                  {
                                   flo[fc++]=(48+(floti/ta));
                                   floti=floti%ta;
                                  }
                                }
                              else if (floti<=9&& floti>=1)
                                {
                                 fc=0;
                                 ta=1;
                                 flo[fc++]=(48+(floti/ta));
                                 floti=floti%ta;
                                }
                              else
                              {
                              floti=0;
                              }
                             }
                            ////////////////////////////////////////////integer calc
                            if (inti<=32766 && inti>=10000)
                              {
                               ic=0;
                               for(ta=10000;ta>=1;ta=ta/10)
                                {
                                  integer[ic++]=(48+(inti/ta));
                                  inti=inti%ta;
                                }
                              } 
                            else if (inti<=9999 && inti>=1000)
                              {
                               ic=0;
                               for(ta=1000;ta>=1;ta=ta/10)
                                {
                                 integer[ic++]=(48+(inti/ta));
                                 inti=inti%ta;
                               }
                              }
                            else if(inti<=999 && inti>=100)
                              {
                               ic=0;
                               for(ta=100;ta>=1;ta=ta/10)
                                {
                                 integer[ic++]=(48+(inti/ta));
                                 inti=inti%ta;
                                }
                              } 
                            else if(inti<=99 && inti>=10)
                              { 
                               ic=0;
                               for(ta=10;ta>=1;ta=ta/10)
                                {
                                 integer[ic++]=(48+(inti/ta));
                                 inti=inti%ta;
                                }
                              }
                            else if(inti<=9 && inti>=1)
                              {
                              ic=0;
                              ta=1;
                              integer[ic++]=(48+(inti/ta));
                              }
                            /////////////////////////////////////////////mix 
                            for(c=0;data[c];c++)
                            buff[j++]=data[c];
                            for(i=0; integer[i];i++)
                            buff[j++]= integer[i];
                            for(f=0;flo[f];f++)
                            buff[j++]=flo[f];
                            }
                            اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                            هيتلر

                            دیدگاه


                              #15
                              پاسخ : پاسخ : مشکل sprintf در iar

                              نوشته اصلی توسط Saeed Saeb
                              دوست عزیز من هم C++ کار کردم هم C# . شما که سطح دیگران رو نمیدونید
                              شما اگه میتونید کمک کنید در ضمن من فرق float با integer رو میدونم که این صفحه رو به من پیشنهاد دادید!!! شما اگه میتونی کمک کن اگه نه نسخه نپیچ خواهشن و تحقیرم نکن دیگران رو ! من یه sprintf کمک خواستم که رو این کار نمیکرد مارو کردین بدترین برنامه نویس . اشکال نداره من بدترین
                              شما تنها کمکی که کردی این بود که flout رو بکن double یا چرا int ها تو چندتا خطه بدشم اون سایت رو دادی که توش تعریف int , flout بود!!

                              با اجازه شما این رو هم جواب گرفم بهینش میکنم میزارم اینجا حالا بد یا خوب تموم شد!
                              ای بابا! چرا ناراحت میشی. من که حرف بدی نزدم. شما اینا رو گفته بودی، منم چند تا حرکت مبتدیانه دیده بودم توی کدنویسیتون که گفتم.
                              مشکل فعلیت چیه؟

                              دیدگاه

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