AVR-LibC কি? গুরুত্বপূর্ণ হেডার ফাইলএবং ফাংশন পরিচিতি

Bangla tutorial series on Microcontroller, retreived from my previous blog d15tech.com. Dated here according to the original published date.

Posted by Shadly on January 7, 2014

সি প্রোগ্রামিং ল্যাংগুয়েজ এর সাথে আমরা মোটামুটি সবাই পরিচিত। সি প্রোগ্রামিং দিয়ে অনেক জটিল কাজ করা সম্ভব। ঠিক ধরেছ, এটা দিয়ে মাইক্রোকন্ট্রোলার প্রোগ্রামিং ও করা সম্ভব। কিন্তু দুঃখের কথা হচ্ছে যে সি প্রোগ্রামিং এ মাইক্রোকন্ট্রোলার প্রোগ্রাম করার জন্য কোন নিজস্ব লাইব্রেরি নেই। তাই বুদ্ধি করে গুরুজনেরা মাইক্রোকন্ট্রোলার প্রোগ্রামিংএর জন্য একটি লাইব্রেরি তৈরি করেছেন যা হল AVR-LibC। সহজ কথায় AVR মাইক্রোকন্ট্রোলার প্রোগ্রাম করার জন্য যে সি লাইব্রেরি তার নাম হল AVR-LibC।

সাধারণ সি প্রোগ্রামিং এর মতোই মাইক্রোকন্ট্রোলারকে প্রোগ্রাম করতে বেশ কিছু হেডার ফাইল দরকার হয় যা AVR-LibC তে আছে। মাইক্রোকন্ট্রোলার প্রোগ্রাম করার জন্য যেসব হেডার ফাইল ও ফাংশন সচরাচর দরকার হয় সেসব সম্পর্কে আমরা এখন জানবো।

io.h

মাইক্রোকন্ট্রোলার প্রোগ্রাম করার জন্য সবচেয়ে দরকারি যে হেডার ফাইল তা হল io.h হেডার ফাইলটি। এতে আছে “AVR device-specific IO definitions”। অর্থাৎ কোন AVR মাইক্রোকন্ট্রোলারে কোন ইনপুট-আউটপুট পিন কিভাবে আছে, কোন রেজিস্টারে, কোন এড্রেসে কি আছে সব কিছুই এই হেডার ফাইলে দেয়া আছে। অর্থাৎ সকলAVR মাইক্রোকন্ট্রোলারের খুঁটিনাটি এই হেডার ফাইলে সংরক্ষিত আছে যা সে প্রয়োজন অনুযায়ী কাজে লাগাতে পারে। এই হেডার ফাইলকে কোডে সংযুক্ত করতে লিখতে হবে,

1
#include <avr/io.h>

delay.h

মাইক্রোকন্ট্রোলার প্রোগ্রাম করার জন্য আরও একটি জরুরি হেডার ফাইল হল delay.h । এই হেডার ফাইলে আছে কিছু গুরুত্বপূর্ণ ফাংশন যেমনঃ _delay_ms(), _delay_us(), _delay_loop_2() ইত্যাদি জরুরি কিছু ফাংশন যেগুলো মূলত delay তৈরি করতে কাজে লাগে। একে কোডে সংযুক্ত করতে হলে লিখতে হবে,

1
#include <util/delay.h>

delay ফাংশনগুলোর প্রধান কাজ হল কোন কোডকে নির্দিষ্ট সময় পর্যন্ত থামিয়ে রাখা।

interrupt.h

চলমান কোন কোডে হঠাৎ বাঁধা দেয়া হচ্ছে interrupt। মনে করি, আমাদের মাইক্রোকন্ট্রোলারটি একটি LED কে এক সেকেন্ড পর পর জ্বালা-নিভা করছে। হঠাৎ একটি বাটন চাপা হল যা কিনা মাইক্রোকন্ট্রোলারের কোন Interrupt পিনের সাথে লাগানো আছে। এখন বাটন চাপার সাথে সাথে মাইক্রোকন্ট্রোলারটি তার আগের কাজ বাদ দিয়ে এখন একটি অন্য কাজ করবে যা তাকে আগেই Interrupt কোডে বলা আছে। এটিই হল Interrupt এবং Interrupt এর জন্য লেখা আলাদা ফাংশনকে Interrupt routine বলে। Interrupt routine সাধারণত কোডের main() ফাংশনের বাইরে থাকে। Interrupt এর বিভিন্ন কাজের জন্য যে হেডার ফাইল তা হল interrupt.h। এর উল্লেখযোগ্য ফাংশন হল sei() এবং cli() যা যথাক্রমে Interrupt কে Enable ও Disable করে। বিভিন্ন ধরণের Interrupt এর মধ্যে ADC Interrupt, Timer Interrupt এবং Hardware Interrupt উল্লেখ্য।একে কোডে সংযুক্ত করতে হলে লিখতে হবে,

1
#include<avr/interrupt.h>

এছাড়াও AVR-LibC তে আছে আরও গুরুত্বপূর্ণ কিছু হেডার ফাইল। যেমনঃ wdt.h, eeprom.h , math.h , twi.h ইত্যাদি। AVR-LibC এর সকল হেডার ফাইলের নাম ও শর্ট ডেসক্রিপশন নিচে দেয়া হলঃ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<alloca.h>: Allocate space in the stack
<assert.h>: Diagnostics
<ctype.h>: Character Operations
<errno.h>: System Errors
<inttypes.h>: Integer Type conversions
<math.h>: Mathematics
<setjmp.h>: Non-local goto
<stdint.h>: Standard Integer Types
<stdio.h>: Standard IO facilities
<stdlib.h>: General utilities
<string.h>: Strings
<avr/boot.h>: Bootloader Support Utilities
<avr/eeprom.h>: EEPROM handling
<avr/fuse.h>: Fuse Support
<avr/interrupt.h>: Interrupts
<avr/io.h>: AVR device-specific IO definitions
<avr/lock.h>: Lockbit Support
<avr/pgmspace.h>: Program Space Utilities
<avr/power.h>: Power Reduction Management
<avr/sfr_defs.h>: Special function registers
<avr/signature.h>: Signature Support
<avr/sleep.h>: Power Management and Sleep Modes
<avr/version.h>: avr-libc version macros
<avr/wdt.h>: Watchdog timer handling
<util/atomic.h> Atomically and Non-Atomically Executed Code Blocks
<util/crc16.h>: CRC Computations
<util/delay.h>: Convenience functions for busy-wait delay loops
<util/delay_basic.h>: Basic busy-wait delay loops
<util/parity.h>: Parity bit generation
<util/setbaud.h>: Helper macros for baud rate calculations
<util/twi.h>: TWI bit mask definitions
<compat/deprecated.h>: Deprecated items
<compat/ina90.h>: Compatibility with IAR EWB 3.x

হেডার ফাইলের সংখ্যা দেখে ভয় পাবার কিছুই নেই। এদের হাতেগোনা কিছু হেডার ফাইল ছাড়া বাকিগুলো আমরা কখনো ধরেও দেখবনা। Trust me.