اطلاعیه

Collapse
No announcement yet.

کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

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

    کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

    با سلام من میخوام دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom است را در یکدیگر کپی کنم فکر نکنم بتونم آنها را نساوی هم قرار بدم از دستور strcpy هم چون یکی در sram و دیگری در eeprom است نمیتونم استفاده کنم به نظر شما از باید چه کار کنم؟

    #2
    پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

    سلام
    من این دوتا تابع رو نوشتم و ازش هم جواب گرفتم
    اولی از SRAM توی EEPROM کپی میکنه و دومی بلعکس

    کد:
    void strcopy(eeprom char* dstr,char* sstr)
    {
    int i=0;
    while(sstr[i] != 0)
      {
      dstr[i] = sstr[i];
      i++;
      } 
    dstr[i] = 0; 
    } 
    
    
    void strecopy(char* dstr,eeprom char* sstr)
    {
    int i=0;
    while(sstr[i] != 0)
      {
      dstr[i] = sstr[i];
      i++;
      } 
    dstr[i] = 0;
    }
    زندگی یعنی امید و حرکت
    کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
    سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
    برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
    به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

    دیدگاه


      #3
      پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

      از پاسختون ممنون اما یه مشکل دیگه من یه متغییر به این صورت تعریف کردم
      کد:
      char phone_num[6]={0,9};
      که دوتا آرایه اول 0 و 9 وبقیه را توسط کلید تنظیم میکنم حالا میخوام این را به صورت یک رشته در بیارم باید چیکار کنم؟
      یعنی اگر جایی نوشتم phone_num اون را به عنوان یک رشته بشناسه مثلا
      کد:
       lcd_gotoxy(14,0); 
          lcd_puts(phone_num);
      بتونه اعداد داخله phone_num را روی lcd نشون بده

      دیدگاه


        #4
        پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

        ببین اگه زبان سی رو خوب خونده باشی متوجه میشی که انتهای رشته با تهی (همون عدد صفر 0) مشخص میشه و میتونم بگم تقریبا تمام دستوراتی که با رشته کار میکنن یه حلقه while میزارن و به عنوان شرط درایه های رشته رو چک میکنن تا به تهی برسه و از حلقه بیاد بیرون. مثله دوتا تابع بالا
        حالا باید کد اسکی هر عدد رو در ادامه رشته بزاری و در انتهای رشته یک تهی (همون عدد صفر0) بزاری و خلاص ولی یه کار راحت تر اینه
        فرض کن شماره تلفن بدون 09 داخل یک رشته دیگه ذهیره شده مثلا num حالا باید به این ترتیب عمل کنی
        کد:
        sprintf(phone_num,"09%s",num)
        البته ممکنه شماره به صورت یک عدد باشه (کار درستی نیست چون اگه ابتداش صفر باشه توی عدد همچین چیزی حذف میشه) اونوقت باید فرض کرد num یک عدد دسیمال هست و به این صورت نوشت
        کد:
        sprintf(phone_num,"09%d",num)
        زندگی یعنی امید و حرکت
        کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
        سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
        برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
        به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

        دیدگاه


          #5
          پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

          از اشاره گرها استفاده کن. اصلا مخصوص همین کارند انگار.
          :biggrin: :redface:
          برای جوینده ی علم محدودیتی نیست. "ولو بالسین"

          دیدگاه


            #6
            پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

            نوشته اصلی توسط علی ایمانی فر
            ببین اگه زبان سی رو خوب خونده باشی متوجه میشی که انتهای رشته با تهی (همون عدد صفر 0) مشخص میشه و میتونم بگم تقریبا تمام دستوراتی که با رشته کار میکنن یه حلقه while میزارن و به عنوان شرط درایه های رشته رو چک میکنن تا به تهی برسه و از حلقه بیاد بیرون. مثله دوتا تابع بالا
            حالا باید کد اسکی هر عدد رو در ادامه رشته بزاری و در انتهای رشته یک تهی (همون عدد صفر0) بزاری و خلاص ولی یه کار راحت تر اینه
            فرض کن شماره تلفن بدون 09 داخل یک رشته دیگه ذهیره شده مثلا num حالا باید به این ترتیب عمل کنی
            کد:
            sprintf(phone_num,"09%s",num)
            البته ممکنه شماره به صورت یک عدد باشه (کار درستی نیست چون اگه ابتداش صفر باشه توی عدد همچین چیزی حذف میشه) اونوقت باید فرض کرد num یک عدد دسیمال هست و به این صورت نوشت
            کد:
            sprintf(phone_num,"09%d",num)
            ممنون از پاسخت این کار را کرده بودم
            sprintf(phone_num,"09%s",num)
            اما جواب نداد نمیدونم مشکلش چیه

            دیدگاه


              #7
              پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

              نوشته اصلی توسط m52r65
              از اشاره گرها استفاده کن. اصلا مخصوص همین کارند انگار.
              :biggrin: :redface:
              اگر ممکنه راهنمایی بفرمایید

              دیدگاه


                #8
                پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

                نوشته اصلی توسط زوار
                ممنون از پاسخت این کار را کرده بودم
                sprintf(phone_num,"09%s",num)
                اما جواب نداد نمیدونم مشکلش چیه
                خب میشه کدتو بزاری تا ببینم مشکل از کجاست؟
                فک کنم برای SIM900 میخای و من این کارو انجام دادم و میدونم که شده.

                دوستمون درست میگه کلا باید با اشارگرها بتونی بخوبی کار کنی تا از پس رشته ها بر بیای.
                رشته در واقع آرایه ای از کاراکتر هاست و اسم آرایه خودش یک اشاره گر هست. حالا بحث طولانیه نمیشه همشو توضیح داد. :sad:
                اولش یکم سخته ولی بعد از فهمیدن خیلی راحت میشه :mrgreen:
                زندگی یعنی امید و حرکت
                کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
                سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
                برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
                به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

                دیدگاه


                  #9
                  پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

                  بله دقیقا برای sim900 میخوام اگر ممکنه بفرمایید چه جوری انجامش بدم کدم خیلی طولانیه اما بعضی قسمتاش که مربوط میشه اینه:
                  ارسال توسط sim900
                  کد:
                  printf("AT+CMGS=%c%s%c%c",double_quote,phon_num1,double_quote,enter); 
                  delay_ms(300);
                  putchar(ctrl_z);
                  در این قسمت مقدار یکی از متغییرها را زیاد میکنم در اصل شماره تلفن را دوتا دوتا جدا کردم مثلا 12
                  البته متغییر phone_numدارای 7 آرایه است
                  کد:
                  setting(99);
                     if(enter_count==3)
                     { 
                     phone_num[count]=counter_num;
                     count++;
                     x+=2;
                     counter_num=0; 
                     }
                  ودر آخر این کاررا کردم
                  کد:
                  sprintf(phone_num1,"09%s",phone_num);
                  که اگر%s بذارم 09 فقط نشون میده و اگر %d بذارم 09 ویک کد 4 رقمی نشون میده
                  میشه بگید شما چه جوری انجامش دادید ممنون

                  دیدگاه


                    #10
                    پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

                    ببینید اینطور که پیداست امگار شما مثلا اگه یه شماره تلفن دارین به عنوان مثال 09122731234 میان 09 رو جدا در نظر میگیرین و بعد یک آرایه دارین به نام phone_num و میان اعداد رو یکی یکی میریزن توش و در نتیجه اشتباه میشه. شما خود عدد رو نباید بریزید توی متغییر بلکه باید کد اسکی رو بریزید توی متغییر و بعد از s% استفاده کنید.
                    کد اسکی اعداد = خود عدد + 0x30
                    حالا فک کنم شما باید توی قسمت زیر به جای این که counter_num رو مستقیم بریزید داخل phone_num باید با 0x30 جمع کنید و بعد بریزید توی متغییرتون تا کد اسکی عدد رو بریزید توش
                    آخر کار هم حتما یک تهی (صفر) در انتهای رشتت بزار تا درست کار کنه.
                    بعدشم که s% باید استفاده کنید.
                    تست کنید ببینید جواب میده؟
                    زندگی یعنی امید و حرکت
                    کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
                    سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
                    برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
                    به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

                    دیدگاه


                      #11
                      پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

                      ممنون از پاسختون فردا تستش میکنه در ضمن اگر روش بهتری دارید بفرمایید ممنون میشم ،خودتون چه جوری انجامش دادید؟

                      دیدگاه


                        #12
                        پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

                        نوشته اصلی توسط زوار
                        ممنون از پاسختون فردا تستش میکنه در ضمن اگر روش بهتری دارید بفرمایید ممنون میشم ،خودتون چه جوری انجامش دادید؟
                        من برنامه رو از keypad میخوندم و برنامه کیپد رو جوری نوشته بودم که کد اسکی ارقام رو برمیگردوند و رشته میشد و با استفاده از s% خیلی راحت کد رو ارسال میکردم
                        زندگی یعنی امید و حرکت
                        کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
                        سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
                        برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
                        به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

                        دیدگاه


                          #13
                          پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

                          نوشته اصلی توسط علی ایمانی فر
                          ببینید اینطور که پیداست امگار شما مثلا اگه یه شماره تلفن دارین به عنوان مثال 09122731234 میان 09 رو جدا در نظر میگیرین و بعد یک آرایه دارین به نام phone_num و میان اعداد رو یکی یکی میریزن توش و در نتیجه اشتباه میشه. شما خود عدد رو نباید بریزید توی متغییر بلکه باید کد اسکی رو بریزید توی متغییر و بعد از s% استفاده کنید.
                          کد اسکی اعداد = خود عدد + 0x30
                          حالا فک کنم شما باید توی قسمت زیر به جای این که counter_num رو مستقیم بریزید داخل phone_num باید با 0x30 جمع کنید و بعد بریزید توی متغییرتون تا کد اسکی عدد رو بریزید توش
                          آخر کار هم حتما یک تهی (صفر) در انتهای رشتت بزار تا درست کار کنه.
                          بعدشم که s% باید استفاده کنید.
                          تست کنید ببینید جواب میده؟
                          با سلام من کاری که گفتید را انجام ددم یعنی با 0x30 جمع کردم اما اگر اعداد تک رقمی باشه درست کار میکنه اما اگردو رقم باشه دیگه درست جواب نمیده و من شماره را دوتا دوتا تنظیم میکنم چون من با دوتا کلید up /down این کار ار انجام میدم مثلا 09 بعد 12 بعد 42 و بقیه را تنظیم میکنم

                          دیدگاه


                            #14
                            پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

                            نوشته اصلی توسط زوار
                            با سلام من کاری که گفتید را انجام ددم یعنی با 0x30 جمع کردم اما اگر اعداد تک رقمی باشه درست کار میکنه اما اگردو رقم باشه دیگه درست جواب نمیده و من شماره را دوتا دوتا تنظیم میکنم چون من با دوتا کلید up /down این کار ار انجام میدم مثلا 09 بعد 12 بعد 42 و بقیه را تنظیم میکنم
                            خب معلومه. چون ما کد اسکی برای ارقام داریم نه اعداد
                            پس باید از sprintf استفاده کنی. فرض کن d یک متغییره که حاوی یک عدد دسیمال هست. حالا میخای بریزیش در رشته str که str حاوی یه شماره هست مثلا 0912 پس این کارو میکنی
                            کد:
                            sprintf(str,"%s%d",str,d)
                            ایجوری مشکلت حل میشه.
                            زندگی یعنی امید و حرکت
                            کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
                            سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
                            برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
                            به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

                            دیدگاه


                              #15
                              پاسخ : پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom

                              نوشته اصلی توسط علی ایمانی فر
                              خب معلومه. چون ما کد اسکی برای ارقام داریم نه اعداد
                              پس باید از sprintf استفاده کنی. فرض کن d یک متغییره که حاوی یک عدد دسیمال هست. حالا میخای بریزیش در رشته str که str حاوی یه شماره هست مثلا 0912 پس این کارو میکنی
                              کد:
                              sprintf(str,"%s%d",str,d)
                              ایجوری مشکلت حل میشه.
                              ممنون اما اینی که گفتید را درست متوجه نشدم من اعدادم را داخل یک آرایه میریزم که قبلا نمونه برنامه گذاشتم بعد هر عدد که تنظیم میشه در یک خونه آرایه میذارم مثلا :
                              کد:
                              A[1]=42
                              a[2=25
                              حالا A من همون d میشه و بعد از اینکه هربار این اعداد را تنظیم کردم یکبار این دستور را بنویسم یا یکبار در آخر بنویسم درست میشه؟

                              دیدگاه

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