ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 10 از 10
  1. #1
    2017/06/13
    210
    131

    ذخیره متغیر در حافظه فلش STM32

    سلام
    همونطوری که میدونید در میکروکنترلرهای AVR، برای ذخیره متغیر به صورت دائمی در حافظه فلش، در کدویژن از کلمه flash و در اتمل استدیو از کلمه PROGMEM موقع تعریف متغیر استفاده میشه.
    میخواستم بدونم برای میکروکنترلرهای STM32 به چه شکلی این کار شدنیه؟ اصلا امکانش وجود داره؟ قصد من ذخیره یک آرایه در حد چند کیلو بایت به صورت دائمی و بدون تغییره و نمیخوام بی دلیل فضای SRAM با این آرایه اشغال بشه.
    ضمنا من از بورد کاتالیست STM32F407، نرم افزار keil و توابع CMSIS استفاده میکنم.
  2. #2
    2016/06/06
    92
    55

    پاسخ : ذخیره متغیر در حافظه فلش STM32

    در نمونه کدهای یک کد هست به نام eeprom.h و eeprom.c این دو فایل یک سری تابع تعریف شده که یک سکشن فلش را به عنوان ذخیره داده تعریف می کند. فقط اگر موقعی کل فلش را فرمت کنید این داده ها پاک می شود.
  3. #3
    2011/07/16
    شیراز
    140
    37

    پاسخ : ذخیره متغیر در حافظه فلش STM32

    نقل قول نوشته اصلی توسط hossein.m98

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام
    همونطوری که میدونید در میکروکنترلرهای AVR، برای ذخیره متغیر به صورت دائمی در حافظه فلش، در کدویژن از کلمه flash و در اتمل استدیو از کلمه PROGMEM موقع تعریف متغیر استفاده میشه.
    میخواستم بدونم برای میکروکنترلرهای STM32 به چه شکلی این کار شدنیه؟ اصلا امکانش وجود داره؟ قصد من ذخیره یک آرایه در حد چند کیلو بایت به صورت دائمی و بدون تغییره و نمیخوام بی دلیل فضای SRAM با این آرایه اشغال بشه.
    ضمنا من از بورد کاتالیست STM32F407، نرم افزار keil و توابع CMSIS استفاده میکنم.
    سلام، متغیر رو به صورت const تعریف کن. مثلا
    const char x = 0; 
  4. #4
    2010/06/05
    222
    10

    پاسخ : ذخیره متغیر در حافظه فلش STM32

    نقل قول نوشته اصلی توسط gordany

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام، متغیر رو به صورت const تعریف کن. مثلا
    const char x = 0; 
    تعریف شما یک متغییر ثابت هست و در صورت تغییر با ریست میکرو به مقدار اولیه بر میگرده.

    همونطوری که کاربر "Faateh" گفتند، تنها راهش استفاده از eeprom مجازی هست که توسط توابع SPL در اختیار هست. کار باهاش به سادگی کدویژن و اتمل استدیو نیست، اما خیلی هم سخت نیست.
    هر انسانی که احساس بی نیازی کند سرکش و طغیان گر می شود...
  5. #5
    2017/06/13
    210
    131

    پاسخ : ذخیره متغیر در حافظه فلش STM32

    نقل قول نوشته اصلی توسط hamid-69

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    تعریف شما یک متغییر ثابت هست و در صورت تغییر با ریست میکرو به مقدار اولیه بر میگرده.

    همونطوری که کاربر "Faateh" گفتند، تنها راهش استفاده از eeprom مجازی هست که توسط توابع SPL در اختیار هست. کار باهاش به سادگی کدویژن و اتمل استدیو نیست، اما خیلی هم سخت نیست.
    چجوری باید یه آرایه با چند هزار عضو رو تعریف کنم؟ یعنی باید تک به تک اعضا رو بدم به تابع تا بریزه رو فلش؟ بحث 10 یا 20 عضو نیست؛ بحث 90هزارتا و 100 هزارتاس
  6. #6
    2011/07/16
    شیراز
    140
    37

    پاسخ : ذخیره متغیر در حافظه فلش STM32

    نقل قول نوشته اصلی توسط hamid-69

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    تعریف شما یک متغییر ثابت هست و در صورت تغییر با ریست میکرو به مقدار اولیه بر میگرده.

    همونطوری که کاربر "Faateh" گفتند، تنها راهش استفاده از eeprom مجازی هست که توسط توابع SPL در اختیار هست. کار باهاش به سادگی کدویژن و اتمل استدیو نیست، اما خیلی هم سخت نیست.
    سلام دوست عزیز، سوال کننده میخوان جایی در حافظه فلش آرایه ای رو ذخیره کنند و همونطور که گفتن اون آرایه ثابت و بدون تغییر هست یعنی قرار هست از حافظه فلش فقط عملیات خواندن از روش انجام بشه. و راهی که بهشون گفتم درست هست اون موردی را که شما میگید برای استفاده از حافظه flash به عنوان eeprom هست که ربطی به سوال نداره. موفق باشید.
  7. #7
    2017/06/13
    210
    131

    پاسخ : ذخیره متغیر در حافظه فلش STM32

    نقل قول نوشته اصلی توسط gordany

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام دوست عزیز، سوال کننده میخوان جایی در حافظه فلش آرایه ای رو ذخیره کنند و همونطور که گفتن اون آرایه ثابت و بدون تغییر هست یعنی قرار هست از حافظه فلش فقط عملیات خواندن از روش انجام بشه. و راهی که بهشون گفتم درست هست اون موردی را که شما میگید برای استفاده از حافظه flash به عنوان eeprom هست که ربطی به سوال نداره. موفق باشید.
    سلام. ممنونم که قصد کمک کردن به بنده رو دارید
    مطمئنید که صرف بکار بردن عبارت const باعث میشه متغیر در فلش ذخیره بشه؟ تا اونجا که من میدونم این کلمه فقط از تغییر مقدار متغیر جلوگیری میکنه و متغییر باز هم روی فضای RAM ساخته میشه؛ حداقل در AVR که میدونم به این شکله.
    اگر کسی راه بهتری میشناسه لطفا معرفی کنه.
  8. #8
    2011/07/16
    شیراز
    140
    37

    پاسخ : ذخیره متغیر در حافظه فلش STM32

    دوست عزیز انتظار داشتم قبل از دادن یک پست جدید حداقل راه حلی که بهتون گفتم رو تست میکردید. این هم لینک اگر دوست دارید بیشتر بدونید:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    چون ظاهرا خیلی علاقه ای به مطالعه ندارید من یک آزمایش ساده روبرتون قرار میدم، یک آرایه به طول بیشتر از حافظه رمتون ایجاد کنید. قاعدتا با خطای کامپایلر مواجه میشید، این دفعه با const اینکار رو بکنید و به من بگید این آرایه که ایجاد شد در کجا ایجاد شده رم یا فلش؟
    چون میدونم باز میای پست میذاری به جای تست کردن خودم برات این تست رو انجام دادم ، روی یه میکروی STM32F103 که 20 کیلو بایت رم داره. یه آرایه 40 کیلوبایتی توی کد ایجاد کردم.( اون خط توی main هم فقط برای اینه که بهینه سازی کامپایلر حذف نکنه آرایه رو به خاطر این که استفاده ای ازش نشده. )
    عکس اول ایجاد آرایه روی رم


    عکس دوم ایجاد آرایه روی فلش



    توصیه من به شما اینه که بیشتر با کامپایلر و معماری پردازنده ای که باهاش کار میکنید آشنا بشید و علمی تر با قضیه برخورد کنید و صرفا به کد زدن از طریق کدهای آماده اکتفا نکنید.این روزا همه با گیت هاب کد نویس شدند. برای شروع تحقیق کن ببین اون چهار تا پارامتری که کیل هنگام کامپایل موفق تولید میکنه و جلوی program size نوشته شده (پایین عکس دوم) چه معنی میده.
    موفق باشید.
  9. #9
    2017/06/13
    210
    131

    پاسخ : ذخیره متغیر در حافظه فلش STM32

    نقل قول نوشته اصلی توسط gordany

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    دوست عزیز انتظار داشتم قبل از دادن یک پست جدید حداقل راه حلی که بهتون گفتم رو تست میکردید. این هم لینک اگر دوست دارید بیشتر بدونید:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    چون ظاهرا خیلی علاقه ای به مطالعه ندارید من یک آزمایش ساده روبرتون قرار میدم، یک آرایه به طول بیشتر از حافظه رمتون ایجاد کنید. قاعدتا با خطای کامپایلر مواجه میشید، این دفعه با const اینکار رو بکنید و به من بگید این آرایه که ایجاد شد در کجا ایجاد شده رم یا فلش؟
    چون میدونم باز میای پست میذاری به جای تست کردن خودم برات این تست رو انجام دادم ، روی یه میکروی STM32F103 که 20 کیلو بایت رم داره. یه آرایه 40 کیلوبایتی توی کد ایجاد کردم.( اون خط توی main هم فقط برای اینه که بهینه سازی کامپایلر حذف نکنه آرایه رو به خاطر این که استفاده ای ازش نشده. )
    عکس اول ایجاد آرایه روی رم


    عکس دوم ایجاد آرایه روی فلش



    توصیه من به شما اینه که بیشتر با کامپایلر و معماری پردازنده ای که باهاش کار میکنید آشنا بشید و علمی تر با قضیه برخورد کنید و صرفا به کد زدن از طریق کدهای آماده اکتفا نکنید.این روزا همه با گیت هاب کد نویس شدند. برای شروع تحقیق کن ببین اون چهار تا پارامتری که کیل هنگام کامپایل موفق تولید میکنه و جلوی program size نوشته شده (پایین عکس دوم) چه معنی میده.
    موفق باشید.
    سلام و عرض تشکر دوباره
    اتفاقا برعکس تصور شما من اصلا از کدهای آماده و به قول معروف لقمه جویده شده خوشم نمیاد! در مورد معماری چیزایی که باهاشون کار میکنم هم خیلی حساسم. همونطوری که گفتم در avr و اتمل استدیو باید از کلمه PROGMEM برای این منظور استفاده کرد و برای باز خوانی حافظه باید از یسری شبه تابع مثل PGM_READ_BYTE استفاده کرد. از اونجایی که اگر صرفا از کلمه const استفاده میشد، به شکل مستقیم میشد به متغییر دسترسی داشت و احتیاجی به استفاده از PGM_READ_BYTE و امثال اون نبود، پیش خودم نتیجه گرفتم که احتمالا کلمه const نباید ربطی به محل ذخیره داشته باشه. ظاهرا با استدلال شما تصوراتم تا حالا غلط بوده
    به هر صورت خودآموزی مشکلات این چنینی هم داره دیگه
  10. #10
    2011/07/16
    شیراز
    140
    37

    پاسخ : ذخیره متغیر در حافظه فلش STM32

    این رو در نظر بگیر کامپایلری که اونجا استفاده میکردی GCC بوده ولی کامپایلر keil (C51) متفاوته. یکی از تفاوت ها همین const.
نمایش نتایج: از 1 به 10 از 10

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

  1. پاسخ: 10
    آخرين نوشته: 2016/10/25, 22:51
  2. پاسخ: 2
    آخرين نوشته: 2015/06/12, 18:47
  3. ذخیره متغیر در حافظه فلش
    توسط mjsh401 در انجمن NXP
    پاسخ: 1
    آخرين نوشته: 2015/01/28, 15:26
  4. ذخیره کردن یک متغیر در یک ادرس خاص از حافظه در keil
    توسط mohsen p در انجمن پروسسورهای ARM
    پاسخ: 8
    آخرين نوشته: 2012/11/08, 21:50
  5. در بسکام، ذخیره متغیر Integer در متغیر Byte
    توسط shahriar در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2009/02/09, 19:29

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

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

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