PROGMEM در آردوینو

blog
۱۳۹۶-۰۴-۲۶
4 دقیقه

PROGMEM در آردوینو داده‌ها را به‌جای SRAM، در حافظه‌ی (برنامه) flash ذخیره می‌کند. برای توضیحات بیشتر راجع به انواع حافظه‌های موجود در برد آردوینو به اینجا مراجعه کنید.

کلمه‌ی کلیدی PROGMEM یک توصیف‌کننده‌ی متغیر است و باید فقط با نوع‌داده‌هایی که در pgmspace تعریف شده‌اند استفاده شود. PROGMEM به کامپایلر می‌گوید: “این داده را در حافظه‌ی فلش قرار بده.” (به‌جای قرار دادن در SRAM که معمولاً داده‌ها به این حافظه می‌روند.)

PROGMEM بخشی از کتاب‌خانه‌ی pgmspace.h است که فقط در معماری AVR قابل‌دسترس است. پس اول باید این کتاب‌خانه را به بالای کد اضافه (include) کنید؛ مثل کد زیر:

سینتکس (نحو)

  • dataType: هر نوع از انواع متغیر
  • variableName: نامی برای آرایه‌ای از داده‌هایتان

توجه کنید که از آن‌جایی که PROGMEM یک توصیف‌کننده‌ی متغیر است، قانون واضحی که کجا باید قرار بگیرد وجود ندارد؛ پس کامپایلر آردوینو همه‌ی تعاریف زیر (که مترادف و مشابه هم هستند) را می‌پذیرد. اما تجربه نشان داده است که PROGMEM در ورژن‌های متفاوت آردوینو (مربوط به ورژن GCC)، ممکن است در جایی کار کند و در جایی دیگر نه. مثال “string table” (جدول رشته) زیر برای کار با آردوینو 13 تست شده است. در ورژن‌های قدیمی‌ترِ IDE، اگر PROGMEM بعد از نام متغیر بیاید، ممکن است بهتر کار کنند.

درست است که از PROGMEM می‌توان برای یک متغیر هم استفاده کرد، اما فقط هنگامی ارزش دارد که شما بلاک بزرگ‌تری از داده را دارید و نیاز به ذخیره‌ی آن دارید که معمولاً آرایه ساده‌ترین روش ذخیره است. (یا یک ساختمان داده‌ی دیگر C که فراتر از بحث ماست.)

استفاده از PROGMEM هم رویه‌ای دو مرحله‌ای است. بعد از گذاشتن داده در حافظه‌ی فلش، برای خواندن داده از حافظه‌ی برنامه و قرار دادن در SRAM، نیاز به متد (فانکشن‌هایی) خاص است که آن‌ها هم در کتاب‌خانه‌ی pgmspace.h تعریف شده‌اند تا بتوانیم با آن کارهای مفید انجام دهیم.

مثال

قطعه کد زیر، نحوه‌ی خواندن و نوشتن char (بایت) و ints (دو بایت) به PROGMEM را نشان می‌دهد:

آرایه‌ای از رشته‌ها

هنگامی‌که مشغول کار کردن با حجم زیادی از متن هستید (مثل پروژه‌هایی با نمایشگر LCD) معمولاً راحت‌تر است که آرایه‌ای از رشته‌ها را ایجاد کنید. از آن‌جایی که رشته‌ها خود آرایه هستند، این کار مثالی از رشته‌های دو بعدی است.

این‌ها احتمالاً‌ ساختارهای بزرگی هستند پس معمولاً قرار دادنشان در حافظه‌ی برنامه (program memory) مطلوب است. کد زیر این ایده را نشان می‌دهد:

 

نکته

توجه کنید که برای کار با PROGMEM، متغیرها یا باید به‌صورت global و یا با کلمه‌ی کلیدی static تعریف شده باشند.

کد زیر کار نخواهد کرد هنگامی‌که درون یک تابع تعریف شده باشد:

کد زیر کار خواهد کرد حتی اگر درون یک تابع و به‌صورت local تعریف شده باشد:

ماکروی ()F

هنگامی‌که دستوری شبیه به دستور زیر استفاده می‌‌شود:

رشته‌ای که قرار است چاپ شود معمولاً در RAM ذخیره می‌شود. اگر کد شما چیزهای زیادی را روی مانیتور سریال چاپ می‌کند، شما RAM را پر خواهید کرد. اگر فضای خالی در حافظه‌ی FLASH  دارید، می‌توانید به‌راحتی و با کد زیر مشخص کنید که رشته باید در حافظه‌ی فلش ذخیره شود:

 

 

منبع

اطلاعات
4
0
لینک و اشتراک
profile

Yalda

متخصص الکترونیک

علاقه‌مند به یادگیری چیزهای جدید!

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند.
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند.
family

دیدگاه ها

profile
مهدی گفت :
۱۴۰۰-۰۲-۱۸ ۰۲:۴۸

سلام واقعا خدا خیرتان دهد. اجرتون با اقا. کارم به شدت راه افتاد.

profile
Yalda گفت :
۱۴۰۰-۰۲-۲۰ ۰۰:۳۴

سلام. خوشحالیم مفید بوده. امیدوارم از بقیه مطالب هم استفاده کنید و سیسوگ رو به دوستاتون هم معرفی کنید.

profile
علی گفت :
۱۳۹۸-۰۵-۰۵ ۱۱:۵۷

سلام .لطفا کتابخانه avr/pgmspace.h فایل zip رو میشه لطفا ایمیل کنید.لطفا

profile
زئوس Zeus گفت :
۱۳۹۸-۰۵-۰۵ ۱۷:۰۷

سلام دوست عزیز
توضیح توابع این هدر رو میتونید در pgmspace مشاهده کنید و کل کتابخانه های AVR رو هم در لینک زیر دانلود کنید.
http://download.savannah.gnu.org/releases/avr-libc/

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله