NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3501 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 14 از 14

موضوع: ذخیره متغیر بدون پاک شدن با قطع برق

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    20
    تشکر
    6
    تشکر شده 8 بار در 4 پست

    پیش فرض ذخیره متغیر بدون پاک شدن با قطع برق

    شاید سوال ابتدایی باشه. میخواستم بدونم چطور میشه یک متغیر رو ذخیره کرد که با قطع برق پاک نشه. به عبارت بهتر من میخوام در اولین بار که میکرو روشن میشه متغیرم یک داده ای رو بگیره حالا بعد از اون اگه تو برنامه تغییر کرد و داده جدید گرفت متغیرم با خاموش روشن شدن میکرو همین داده جدید رو حفظ کنه نه اینکه دوباره اون داده اولیه رو دریافت کنه؟ (نمیدونم تو flash باید ذخیره کرد یا eeprom و با چه دستوری به زبان C )

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    باید در eeprom ذخیره کنید.
    بستگی به کامپایلر داره. اگه codevision کار میکنید باید اول تعریف متغیر این کلمه رو اضافه کنید

  4. تشکرها از این نوشته :


  5. #3
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    شما باید در حافظه ایتوپرام ذخیره کنی در امورد اینکه داده جدید کی جایگزین بشه و در این متغییر ریخته بشه برمیگیرده به نوع برنامه و کارتون و نوع داده تون

  6. تشکرها از این نوشته :


  7. #4
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    20
    تشکر
    6
    تشکر شده 8 بار در 4 پست

    پیش فرض

    نمیشه تو flash ذخیره کرد؟ فرقشون چیه؟

  8. #5
    ناظم انجمن vahidasm آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    وحید
    نوشته ها
    754
    تشکر
    1,068
    تشکر شده 881 بار در 470 پست

    پیش فرض

    فرقش تو اینه که اولا فلش حافظه برای ذخیره سازی کد و دستور العملهایی هستش که شما برای میکرو نوشتین
    دوما اگه داده ای رو روی فلش بخوای بریزی تو کد برنامه (کدویژن) باید کلمه flash رو قبل متغیر بنویسی که اینطوری از حافظه فلشت برای ذخیره این متغیر استفاده کرده باشی ولی دوتا عیب داره
    1-دیگه تو حین کار کردن میکرو نمیتونی تغییرش بدی چرا که فقط تو کامپایلر و تنها موقع نوشتن برنامه این قابلیت وجود داره
    2-مقداری از حافظه میکروت اشغال میشه و ممکنه برای کد اصلی جا کم بیاری
    حالا چه گیریه که تو فلش ریخته بشه؟؟؟؟؟خب بریز تو eeprom
    اولین مرحله شناخت آفرینش همانا خرد است چشم و گوش و زبان سه نگهبان اویند که لاجرم هر چه نیکی و شر است از همین سه ریشه می گیرد .و افسوس که بدنبال کنندگان خرد اندکند باید که به سخن دانندگان راه جست و باید جهان را کاوش نمود و از هر کسی دانشی آموخت و یک دم را هم برای آموختن نباید از دست داد . فردوسی خردمند

  9. کاربران : 3 تشکر کرده اند از شما vahidasm برای ارسال این پست سودمند:


  10. #6
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    20
    تشکر
    6
    تشکر شده 8 بار در 4 پست

    پیش فرض

    میتونم بپرسم نحوه استفاده از دستور eeprom توی codevision برای نوشتن و پاک کردن و خوندن از یک خونه حافظه با آدرس مشخص چیه؟ مثلا من میخوام 20 بایت اول eeprom رو برای نوشتن یک رشته کاراکتری استفاده کنم و بعدش این 20 بایت رو پاک کنم رشته جدید بریزم و بخونم؟

  11. #7
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    سلام اینطوری تعریف کن
    کد:
    eeprom char a[20]

  12. کاربران : 2 تشکر کرده اند از شما Ma3ood برای ارسال این پست سودمند:


  13. #8
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    20
    تشکر
    6
    تشکر شده 8 بار در 4 پست

    پیش فرض

    نقل قول نوشته اصلی توسط masoud70 نمایش پست ها
    سلام اینطوری تعریف کن
    کد:
    eeprom char a[20]
    خوب این الان تو کدوم خونه حافظه میریزه؟ چجوری باید خوندش؟ چجوری پاک کرد؟
    یعنی کافیه اینو اول برنامه بیاریم بعد دیگه با a مثل یک متغیر معمولی کارکنیم؟ لازم نیست به آدرس و بقیه موارد کار داشته باشیم؟ اگه چندتا متغیر رو بخوایم تو eeprom ذخیره کنیم چی بازم نیاز به آدرس نیست و خود codevision انجام میده؟

  14. #9
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    دوست عزیز یه ارایه با بیست و یک خانه نعریف شده در حافظه دایمی میکروکنترلر
    خوب شما وقتی میخوای مثلا خانه 1 از این ارایه را بخونی و بریزی در متغییر b که از نوع sram هست و با اون کار کنی پس اول محتوای متغییر را برای راحتی کار روی یک متغییر Sram بریز
    کد:
    b=a[0];
    و برای نوشتن اون
    کد:
    a[0]= b;

  15. تشکرها از این نوشته :


  16. #10
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    20
    تشکر
    6
    تشکر شده 8 بار در 4 پست

    پیش فرض

    آقا ممنون مشکل من حل شد. فقط برای من جالبه که مثلا اگه ما با وجود اینکه رشته a رو از نوع char تو eeprom تعریف میکنیم نمیتونیم این رشته رو داخل رشته b از نوع char تو Sram با دستور (strcpy(b,a بریزیم و باید بیایم با حلقه for کاراکترا رو یکی یکی بریزیم چون خطا میده که رشته a از نوع unsigned هست و تابع strcpy یا strcmp نمیتونن باهاش کارکنن.
    یه برنامه ساده نوشتم واسه تست کردن نوشتن تو eeprom و اینکه بعد از قطع برق تغییری توش ایجاد نمیشه گفتم اینجا بزارم شاید یه روز به درد کسی بخوره:
    تو این برنامه با روشن شدن میکرو روی LCD متن TEST EEPROM به مدت 10 ثانیه نمایش داده میشه و بعد از اون LCD پاک میشه و متن CHANGED نمایش داده میشه و از این به بعد هر وقت برق میکرو قطع و وصل شه همین متن CHANGED ثابت میمونه.
    کد:
    #include <mega32a.h>
    #include <string.h>
    #include <delay.h>
    #asm
        .equ __lcd_port=0x1B;
    #endasm
    #include <lcd.h>
    eeprom char a[15];
    eeprom int d;
    char b[15];
    char c[15];
    int i=0;
    
    void main(void){
    
    lcd_init(16);
    if(d!=1){
    strcpy(c,"TEST EEPROM");
    for(i=0;i<15;i++){
    a[i]=c[i];
    }
    for(i=0;i<15;i++){
    b[i]=a[i];
    }
    lcd_puts(b);
    delay_ms(10000);
    d=1;
    }
    strcpy(c,"CHANGED");
    for(i=0;i<15;i++){
    a[i]=c[i];
    }
    for(i=0;i<15;i++){
    b[i]=a[i];
    }
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_puts(b);
    
    }
    ویرایش توسط Romax : 08-07-2013 در ساعت 02:27

  17. کاربران : 5 تشکر کرده اند از شما Romax برای ارسال این پست سودمند:


  18. #11
    تازه وارد
    تاریخ عضویت
    Mar 2012
    نوشته ها
    2
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض

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

  19. #12
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    این روش جالبیه که متغیر تعریف کنیم و داده هامونو توش بریزیم ، ولی برای پاک کردن چی ؟!
    میشه متغیر رو پاک کرد ؟ منظورم اینه که برای استفاده های پویا اگه eeprom پر شد بتوانیم رشته (متغیر) دلخواه رو پاک کنیم تا حافظه بیخود اشغال نشه.
    جافظه های eeprom داخلی میکرو رو هم میشه خوند و هم میشه نوشت . این کار رو بسته به نوع میکرو میشه تا 10000 بار انجام داد .
    حافظه های eeprom دارای خانه های داخلی هستند که هر خونه دارای آدرس مخصوص به خودش هست . وقتی شما داده ای رو در خونه ای می نویسید ، داده ی جدید به جای داده ی قبلی نوشته میشه .

  20. تشکرها از این نوشته :


  21. #13
    تازه وارد
    تاریخ عضویت
    Mar 2012
    نوشته ها
    2
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض

    درسته ولی من فعلن نمیخام رشته ی جدیدی بنویسم
    فقط میخام به دلخواه یه رشترو پاک کنم که خالی بشه
    قرض کنید من به ترتیب کل e2prom رو با 20 رشته پر کردم ، به صورتی که مقادیرشون رو به ترتیب در خروجی نشون میده.
    حالا میخام فرضن رشته ی 4 رو پاک کنم به طوری که رشته های نمایش داده شده ی من بشن 19 تا و رشته ی4 خالی باشه .

  22. #14
    تازه وارد
    تاریخ عضویت
    Sep 2014
    نوشته ها
    1
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام.منم همین مشکلو دارم و میخوام عددی که تو کدویژن از حلقه ی while بدست میاد دفعه ی بعدی که حلقه رواجرا میکنه یادش بمونه.از سایت های مختلف و help کدویژن کمک گرفتم و گیجم کرد.چون الان متغیرمو eeprom تعریف میکنم و عملکرد برنامه هیچ تغییری نمیکنه.بعضی جاها از pointer استفاده کردن که سردرنمیارم.ممنون میشم اگه کمکم کنین

موضوعات مشابه

  1. فرکانس متغیر با pwm
    توسط raminrayat در انجمن AVR
    پاسخ: 6
    آخرين نوشته: 03-09-2015, 02:48
  2. ,وارد کردن متغیر چند کاراکتری
    توسط raoofmtj در انجمن AVR
    پاسخ: 11
    آخرين نوشته: 05-11-2013, 00:11
  3. نامگذاری متغیرها در بسکام
    توسط sobhan537 در انجمن AVR
    پاسخ: 1
    آخرين نوشته: 06-03-2013, 03:06
  4. ساختن متغیر integer از طریق اتصال دو متغیر Byte
    توسط morteza_rk در انجمن برنامه نویسی کامپیوتر/کنترل با کامپیوتر
    پاسخ: 4
    آخرين نوشته: 27-06-2012, 13:31
  5. مشکل در متغیرهای عمومی
    توسط behnam6500 در انجمن AVR
    پاسخ: 14
    آخرين نوشته: 22-03-2012, 03:49

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •