با سلام من میخوام دوتا رشته که یکی در 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
از پاسختون ممنون اما یه مشکل دیگه من یه متغییر به این صورت تعریف کردم
که دوتا آرایه اول 0 و 9 وبقیه را توسط کلید تنظیم میکنم حالا میخوام این را به صورت یک رشته در بیارم باید چیکار کنم؟کد:char phone_num[6]={0,9};
یعنی اگر جایی نوشتم phone_num اون را به عنوان یک رشته بشناسه مثلا
بتونه اعداد داخله phone_num را روی lcd نشون بدهکد:lcd_gotoxy(14,0); lcd_puts(phone_num);
دیدگاه
-
پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
ببین اگه زبان سی رو خوب خونده باشی متوجه میشی که انتهای رشته با تهی (همون عدد صفر 0) مشخص میشه و میتونم بگم تقریبا تمام دستوراتی که با رشته کار میکنن یه حلقه while میزارن و به عنوان شرط درایه های رشته رو چک میکنن تا به تهی برسه و از حلقه بیاد بیرون. مثله دوتا تابع بالا
حالا باید کد اسکی هر عدد رو در ادامه رشته بزاری و در انتهای رشته یک تهی (همون عدد صفر0) بزاری و خلاص ولی یه کار راحت تر اینه
فرض کن شماره تلفن بدون 09 داخل یک رشته دیگه ذهیره شده مثلا num حالا باید به این ترتیب عمل کنی
البته ممکنه شماره به صورت یک عدد باشه (کار درستی نیست چون اگه ابتداش صفر باشه توی عدد همچین چیزی حذف میشه) اونوقت باید فرض کرد num یک عدد دسیمال هست و به این صورت نوشتکد:sprintf(phone_num,"09%s",num)
کد:sprintf(phone_num,"09%d",num)
زندگی یعنی امید و حرکت
کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
دیدگاه
-
پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
ممنون از پاسخت این کار را کرده بودمنوشته اصلی توسط علی ایمانی فرببین اگه زبان سی رو خوب خونده باشی متوجه میشی که انتهای رشته با تهی (همون عدد صفر 0) مشخص میشه و میتونم بگم تقریبا تمام دستوراتی که با رشته کار میکنن یه حلقه while میزارن و به عنوان شرط درایه های رشته رو چک میکنن تا به تهی برسه و از حلقه بیاد بیرون. مثله دوتا تابع بالا
حالا باید کد اسکی هر عدد رو در ادامه رشته بزاری و در انتهای رشته یک تهی (همون عدد صفر0) بزاری و خلاص ولی یه کار راحت تر اینه
فرض کن شماره تلفن بدون 09 داخل یک رشته دیگه ذهیره شده مثلا num حالا باید به این ترتیب عمل کنی
البته ممکنه شماره به صورت یک عدد باشه (کار درستی نیست چون اگه ابتداش صفر باشه توی عدد همچین چیزی حذف میشه) اونوقت باید فرض کرد 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
در این قسمت مقدار یکی از متغییرها را زیاد میکنم در اصل شماره تلفن را دوتا دوتا جدا کردم مثلا 12کد: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; }
که اگر%s بذارم 09 فقط نشون میده و اگر %d بذارم 09 ویک کد 4 رقمی نشون میدهکد:sprintf(phone_num1,"09%s",phone_num);
میشه بگید شما چه جوری انجامش دادید ممنون
دیدگاه
-
پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
ببینید اینطور که پیداست امگار شما مثلا اگه یه شماره تلفن دارین به عنوان مثال 09122731234 میان 09 رو جدا در نظر میگیرین و بعد یک آرایه دارین به نام phone_num و میان اعداد رو یکی یکی میریزن توش و در نتیجه اشتباه میشه. شما خود عدد رو نباید بریزید توی متغییر بلکه باید کد اسکی رو بریزید توی متغییر و بعد از s% استفاده کنید.
کد اسکی اعداد = خود عدد + 0x30
حالا فک کنم شما باید توی قسمت زیر به جای این که counter_num رو مستقیم بریزید داخل phone_num باید با 0x30 جمع کنید و بعد بریزید توی متغییرتون تا کد اسکی عدد رو بریزید توش
آخر کار هم حتما یک تهی (صفر) در انتهای رشتت بزار تا درست کار کنه.
بعدشم که s% باید استفاده کنید.
تست کنید ببینید جواب میده؟
زندگی یعنی امید و حرکت
کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
دیدگاه
-
پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
من برنامه رو از keypad میخوندم و برنامه کیپد رو جوری نوشته بودم که کد اسکی ارقام رو برمیگردوند و رشته میشد و با استفاده از s% خیلی راحت کد رو ارسال میکردمنوشته اصلی توسط زوارممنون از پاسختون فردا تستش میکنه در ضمن اگر روش بهتری دارید بفرمایید ممنون میشم ،خودتون چه جوری انجامش دادید؟زندگی یعنی امید و حرکت
کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
دیدگاه
-
پاسخ : پاسخ : کپی دوتا رشته که یکی در sram تعریف شده و دیگری در eeprom
با سلام من کاری که گفتید را انجام ددم یعنی با 0x30 جمع کردم اما اگر اعداد تک رقمی باشه درست کار میکنه اما اگردو رقم باشه دیگه درست جواب نمیده و من شماره را دوتا دوتا تنظیم میکنم چون من با دوتا کلید up /down این کار ار انجام میدم مثلا 09 بعد 12 بعد 42 و بقیه را تنظیم میکنمنوشته اصلی توسط علی ایمانی فرببینید اینطور که پیداست امگار شما مثلا اگه یه شماره تلفن دارین به عنوان مثال 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 من همون d میشه و بعد از اینکه هربار این اعداد را تنظیم کردم یکبار این دستور را بنویسم یا یکبار در آخر بنویسم درست میشه؟کد:A[1]=42 a[2=25
دیدگاه




دیدگاه