مهندس الکترونیک

#bitfiled
Канал
Логотип телеграм канала مهندس الکترونیک
@elec_sourceПродвигать
2,63 тыс.
подписчиков
269
фото
129
видео
274
ссылки
کانال تلگرام مهندس الکترونیک لینک حمایت در سایت رسمی حامی باش : 🌠https://hamibash.com/elec_source🌠 - لینک گروه : @elec_src_grp کانال یوتیوب https://youtube.com/@elec_source?si=oupCXK8o1DYDeAi9
#C
نکات برنامه نویسی در C برای میکرو کنترلر ها :
نکته ی شماره 14 :

#bitfiled

در زبان برنامه‌نویسی C، بیت فیلد (Bit Field) به عنوان یک نوع داده‌ای (Data Type) تعریف می‌شود که به کاربر اجازه می‌دهد تا بیت‌های داخل یک آدرس حافظه را به صورت مجزا کنترل کند. این داده‌ی نوع، در واقع به برچسب‌های مخصوصی که در داخل یکی از متغیرهای دیگر در C می‌توان اعمال کرد، ارجاع داده می‌شود.

مثال:

برای تعریف یک بیت فیلد در C، ابتدا باید یک ساختار (Struct) تعریف کرد. در این ساختار، می‌توان بیت‌های مختلف را با استفاده از مقادیر صحیح (Integer) تعریف کرد. به عنوان مثال، برای تعریف یک بیت فیلد به نام flags با دو بیت، می‌توان به شکل زیر عمل کرد:

struct {
unsigned int flag1: 1;
unsigned int flag2: 1;
} flags;


در این مثال، یک ساختار با دو عضو flag1 و flag2 تعریف شده است که هر کدام از آنها یک بیت از آدرس حافظه را تشکیل می‌دهد. با استفاده از این ساختار، می‌توان هر کدام از بیت‌های flag1 و flag2 را به صورت مجزا تنظیم کرد. به عنوان مثال:

flags.flag1 = 1; 
// تنظیم بیت flag1 به 1
flags.flag2 = 0;
// تنظیم بیت flag2 به 0


در این مثال، با استفاده از نام ساختار flags و عضو flag1 و flag2، هر کدام از بیت‌های مربوطه را به صورت مجزا تنظیم کردیم.

فرض کنید می خواهید از واحد ADC میکروکنترلر AVR برای خواندن ولتاژ ورودی استفاده کنید. می توانید از یک ساختار داده ای با فیلدهای بیت برای ذخیره نتایج ADC استفاده کنید:

typedef struct {
unsigned int channel : 3; // 3-bit field for channel selection
unsigned int value : 10; // 10-bit field for ADC value
} AdcResult;


حال می توانید این ساختار داده ای را در برنامه AVR خود استفاده کنید:

int main() {
AdcResult result;

// set channel to 0
result.channel = 0;

// start ADC conversion
ADCSRA |= (1 << ADSC);

// wait for conversion to complete
while (ADCSRA & (1 << ADSC));

// read ADC value and store in result
result.value = ADC;

// do something with the result

return 0;
}


در اینجا، ابتدا یک متغیر از نوع AdcResult تعریف شده است و سپس فیلد channel به مقدار 0 تنظیم شده است. سپس ADC شروع به تبدیل می کند و بعد از پایان تبدیل، مقدار ADC در فیلد value ذخیره می شود. سپس می توانید از این متغیر در برنامه AVR خود استفاده کنید.

استفاده از Bit field ها به عنوان یک روش بهینه سازی حافظه در برنامه نویسی C مورد استفاده قرار می گیرد. با استفاده از این روش، می توانید حجم حافظه را به صورت قابل توجهی کاهش دهید و در عین حال عملکرد برنامه را بهبود بخشید.

مطالعه بیشتر LINK


حمایت از کانال : 🔥🔥🔥🔥🔥🔥حامی باش🔥🔥🔥🔥🔥🔥
#مهندس_الکترونیک
#الکترونیک

🆔 @elec_source