با سلام من میخوام دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom است را در یکدیگر کپی کنم فکر نکنم بتونم آنها را نساوی هم قرار بدم از دستور strcpy هم چون یکی در sram و دیگری در eeprom است نمیتونم استفاده کنم به نظر شما از باید چه کار کنم؟
اطلاعیه
Collapse
No announcement yet.
کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
Collapse
X
-
پاسخ : کپی دوتا رشته که یکی در 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; }
زندگی یعنی امید و حرکت
کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
-
پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
از پاسختون ممنون اما یه مشکل دیگه من یه متغییر به این صورت تعریف کردم
کد:char phone_num[6]={0,9};
یعنی اگر جایی نوشتم phone_num اون را به عنوان یک رشته بشناسه مثلا
کد:lcd_gotoxy(14,0); lcd_puts(phone_num);
دیدگاه
-
پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
ببین اگه زبان سی رو خوب خونده باشی متوجه میشی که انتهای رشته با تهی (همون عدد صفر 0) مشخص میشه و میتونم بگم تقریبا تمام دستوراتی که با رشته کار میکنن یه حلقه while میزارن و به عنوان شرط درایه های رشته رو چک میکنن تا به تهی برسه و از حلقه بیاد بیرون. مثله دوتا تابع بالا
حالا باید کد اسکی هر عدد رو در ادامه رشته بزاری و در انتهای رشته یک تهی (همون عدد صفر0) بزاری و خلاص ولی یه کار راحت تر اینه
فرض کن شماره تلفن بدون 09 داخل یک رشته دیگه ذهیره شده مثلا num حالا باید به این ترتیب عمل کنی
کد:sprintf(phone_num,"09%s",num)
کد:sprintf(phone_num,"09%d",num)
زندگی یعنی امید و حرکت
کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
دیدگاه
-
پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
نوشته اصلی توسط علی ایمانی فرببین اگه زبان سی رو خوب خونده باشی متوجه میشی که انتهای رشته با تهی (همون عدد صفر 0) مشخص میشه و میتونم بگم تقریبا تمام دستوراتی که با رشته کار میکنن یه حلقه while میزارن و به عنوان شرط درایه های رشته رو چک میکنن تا به تهی برسه و از حلقه بیاد بیرون. مثله دوتا تابع بالا
حالا باید کد اسکی هر عدد رو در ادامه رشته بزاری و در انتهای رشته یک تهی (همون عدد صفر0) بزاری و خلاص ولی یه کار راحت تر اینه
فرض کن شماره تلفن بدون 09 داخل یک رشته دیگه ذهیره شده مثلا num حالا باید به این ترتیب عمل کنی
کد:sprintf(phone_num,"09%s",num)
کد:sprintf(phone_num,"09%d",num)
sprintf(phone_num,"09%s",num)
اما جواب نداد نمیدونم مشکلش چیه
دیدگاه
-
پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
نوشته اصلی توسط زوارممنون از پاسخت این کار را کرده بودم
sprintf(phone_num,"09%s",num)
اما جواب نداد نمیدونم مشکلش چیه
فک کنم برای SIM900 میخای و من این کارو انجام دادم و میدونم که شده.
دوستمون درست میگه کلا باید با اشارگرها بتونی بخوبی کار کنی تا از پس رشته ها بر بیای.
رشته در واقع آرایه ای از کاراکتر هاست و اسم آرایه خودش یک اشاره گر هست. حالا بحث طولانیه نمیشه همشو توضیح داد. :sad:
اولش یکم سخته ولی بعد از فهمیدن خیلی راحت میشه :mrgreen:زندگی یعنی امید و حرکت
کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
دیدگاه
-
پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
بله دقیقا برای sim900 میخوام اگر ممکنه بفرمایید چه جوری انجامش بدم کدم خیلی طولانیه اما بعضی قسمتاش که مربوط میشه اینه:
ارسال توسط sim900
کد:printf("AT+CMGS=%c%s%c%c",double_quote,phon_num1,double_quote,enter); delay_ms(300); putchar(ctrl_z);
البته متغییر 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);
میشه بگید شما چه جوری انجامش دادید ممنون
دیدگاه
-
پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
ببینید اینطور که پیداست امگار شما مثلا اگه یه شماره تلفن دارین به عنوان مثال 09122731234 میان 09 رو جدا در نظر میگیرین و بعد یک آرایه دارین به نام phone_num و میان اعداد رو یکی یکی میریزن توش و در نتیجه اشتباه میشه. شما خود عدد رو نباید بریزید توی متغییر بلکه باید کد اسکی رو بریزید توی متغییر و بعد از s% استفاده کنید.
کد اسکی اعداد = خود عدد + 0x30
حالا فک کنم شما باید توی قسمت زیر به جای این که counter_num رو مستقیم بریزید داخل phone_num باید با 0x30 جمع کنید و بعد بریزید توی متغییرتون تا کد اسکی عدد رو بریزید توش
آخر کار هم حتما یک تهی (صفر) در انتهای رشتت بزار تا درست کار کنه.
بعدشم که s% باید استفاده کنید.
تست کنید ببینید جواب میده؟
زندگی یعنی امید و حرکت
کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
دیدگاه
-
پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
نوشته اصلی توسط زوارممنون از پاسختون فردا تستش میکنه در ضمن اگر روش بهتری دارید بفرمایید ممنون میشم ،خودتون چه جوری انجامش دادید؟زندگی یعنی امید و حرکت
کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
دیدگاه
-
پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
نوشته اصلی توسط علی ایمانی فرببینید اینطور که پیداست امگار شما مثلا اگه یه شماره تلفن دارین به عنوان مثال 09122731234 میان 09 رو جدا در نظر میگیرین و بعد یک آرایه دارین به نام phone_num و میان اعداد رو یکی یکی میریزن توش و در نتیجه اشتباه میشه. شما خود عدد رو نباید بریزید توی متغییر بلکه باید کد اسکی رو بریزید توی متغییر و بعد از s% استفاده کنید.
کد اسکی اعداد = خود عدد + 0x30
حالا فک کنم شما باید توی قسمت زیر به جای این که counter_num رو مستقیم بریزید داخل phone_num باید با 0x30 جمع کنید و بعد بریزید توی متغییرتون تا کد اسکی عدد رو بریزید توش
آخر کار هم حتما یک تهی (صفر) در انتهای رشتت بزار تا درست کار کنه.
بعدشم که s% باید استفاده کنید.
تست کنید ببینید جواب میده؟
دیدگاه
-
پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
نوشته اصلی توسط زواربا سلام من کاری که گفتید را انجام ددم یعنی با 0x30 جمع کردم اما اگر اعداد تک رقمی باشه درست کار میکنه اما اگردو رقم باشه دیگه درست جواب نمیده و من شماره را دوتا دوتا تنظیم میکنم چون من با دوتا کلید up /down این کار ار انجام میدم مثلا 09 بعد 12 بعد 42 و بقیه را تنظیم میکنم
پس باید از sprintf استفاده کنی. فرض کن d یک متغییره که حاوی یک عدد دسیمال هست. حالا میخای بریزیش در رشته str که str حاوی یه شماره هست مثلا 0912 پس این کارو میکنی
کد:sprintf(str,"%s%d",str,d)
زندگی یعنی امید و حرکت
کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
دیدگاه
-
پاسخ : پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
نوشته اصلی توسط علی ایمانی فرخب معلومه. چون ما کد اسکی برای ارقام داریم نه اعداد
پس باید از sprintf استفاده کنی. فرض کن d یک متغییره که حاوی یک عدد دسیمال هست. حالا میخای بریزیش در رشته str که str حاوی یه شماره هست مثلا 0912 پس این کارو میکنی
کد:sprintf(str,"%s%d",str,d)
کد:A[1]=42 a[2=25
دیدگاه
دیدگاه