پاسخ : آموزش winavr و avrlib - مهاجرت از codevision به winavr avr gcc
تا جایی که من میدونم فایل کامپایل شده دارای بخش (section) های متفاوتیه. text - data - bss - progmem و غیره. با قید کردن:
unsigned char a[] __attribute__ ((progmem))="Exit";
داریم میگیم:
یک چند بایتی داریم به اندازه رشته Exit یعنی 5 بایت که در بخش progmem قرار داره.
این بخشها:
text: شامل دستورالعملهای برنامه نوشته شده هستند که در avr در فلش ذخیره میشه.
data: شامل کلیه متغیر های عمومی و static هست که مقدار اولیه داشته باشه.
bss: شامل کلیه متغیر های عمومی و static هست که مقدار اولیه نداشته باشه. این محدوده در executable جایی رو اشغال نمیکنه اما در image نهایی وجود داره و در ابتدای اجرای برنامه با مقدار 0x00 پر میشه.
progmem: در حقیقت همون flash هست ولی اطلاعات ثابت و فقط خواندنی مثل رشته های کاراکتری ثابت در اون ذخیره میشه.
شما میتونی بجای قید این attribute از ماکروی PROGMEM هم استفاده کنی.
این گونه قید ها رو که جزئ اصلی زبان نیستن و بخاطر بعضی لحاظ برای توسعه امکانات کامپایلر در یک نسخه کامپایلر ایجاد و استفاده میشند رو META-COMMAND میگن.
مثلا شما میتونی برای یک تابع قید کنی که کد آغازین و انتهایی ایجاد نشه (NAKED). میتونی قید کنی که یک تابع بخصوص هیچ وقت اجراش تموم نمیشه(NORETURN). بنا براین صداکردن یک تابع دیگه بعد از این تابع منجر به تولید یک هشدار WARNING میشه.
تا جایی که من میدونم فایل کامپایل شده دارای بخش (section) های متفاوتیه. text - data - bss - progmem و غیره. با قید کردن:
unsigned char a[] __attribute__ ((progmem))="Exit";
داریم میگیم:
یک چند بایتی داریم به اندازه رشته Exit یعنی 5 بایت که در بخش progmem قرار داره.
این بخشها:
text: شامل دستورالعملهای برنامه نوشته شده هستند که در avr در فلش ذخیره میشه.
data: شامل کلیه متغیر های عمومی و static هست که مقدار اولیه داشته باشه.
bss: شامل کلیه متغیر های عمومی و static هست که مقدار اولیه نداشته باشه. این محدوده در executable جایی رو اشغال نمیکنه اما در image نهایی وجود داره و در ابتدای اجرای برنامه با مقدار 0x00 پر میشه.
progmem: در حقیقت همون flash هست ولی اطلاعات ثابت و فقط خواندنی مثل رشته های کاراکتری ثابت در اون ذخیره میشه.
شما میتونی بجای قید این attribute از ماکروی PROGMEM هم استفاده کنی.
این گونه قید ها رو که جزئ اصلی زبان نیستن و بخاطر بعضی لحاظ برای توسعه امکانات کامپایلر در یک نسخه کامپایلر ایجاد و استفاده میشند رو META-COMMAND میگن.
مثلا شما میتونی برای یک تابع قید کنی که کد آغازین و انتهایی ایجاد نشه (NAKED). میتونی قید کنی که یک تابع بخصوص هیچ وقت اجراش تموم نمیشه(NORETURN). بنا براین صداکردن یک تابع دیگه بعد از این تابع منجر به تولید یک هشدار WARNING میشه.
دیدگاه