আমার প্রিয় AVR- থেকে-স্ক্র্যাচ-ইন-টি টিউটোরিয়ালটি https://www.mainframe.cx/~ckuethe/avr-c-tutorial/
ছোট এমবেডেড সিস্টেমগুলির জন্য প্রত্যেকেরই নিজস্ব স্টাইল রয়েছে। এখানে আমার:
আমি ফাংশনগুলির জন্য প্রত্যেকটির নাম তৈরি করে প্রচুর সি ফাইল ব্যবহার করতে চাই। উদাহরণস্বরূপ, led_init()
এবং led_tick()
উভয় হয় led.c
। এটি জিনিসগুলিকে মডুলার রাখে এবং বহনযোগ্যতার সাথে সহায়তা করে।
common.h
প্রকারগুলি সংজ্ঞায়িত করতে আমি একটি শিরোনাম ফাইল ব্যবহার করি তবে প্রতিটি মডিউলটির জন্য স্বতন্ত্র অন্তর্ভুক্ত।
আমি একটি একক freerunning সিস্টেম টাইমার ব্যবহার করার ঝোঁক (এ systime.c
) এর পরে systime_get()
সিস্টেমে টিক্স বা মিলিসেকেন্ডে বর্তমান সময় আনতে মডিউলগুলিতে একটি ফাংশন ডেকে আনি। প্রতিটি মডিউল তার পরে X_tick()
ফাংশনগুলি ব্যবহার করে সফ্টওয়্যার টাইমারগুলির মাধ্যমে ইভেন্টগুলির শিডিউল করতে পারে।
common.h:
#ifndef COMMON_H
#define COMMON_H
#include <stdio.h> // general purpose headers
#include <stdint.h>
#include <stdbool.h>
...
#endif
uart.h:
#ifndef UART_H
#define UART_H
#include <avr/usart.h> // microcontroller specific headers for uart
...
void uart_init(void);
void uart_putc(uint8_t ch);
...
#endif
uart.c:
#include "common.h"
#include "uart.h"
void uart_isr(void) __interrupt VECTOR
{
// handle incoming data
}
void uart_init(void)
{
// setup hardware
}
void uart_putc(uint8_t ch)
{
UART_TX_FIFO_REGISTER = ch;
while(!TX_COMPLETE_REGISTER);
}
led.h:
#ifndef LED_H
#define LED_H
#include <avr/ioports.h> // microcontroller specific headers for port io
...
#define LED_DDR PORTAD
#define LED_PIN 5
#define LED_MASK (1 << LED_PIN)
#define LED_PORT PORTA
void led_init(void);
void led_set(void);
void led_tick(void);
...
#endif
led.c:
#include "common.h"
#include "led.h"
void led_init(void)
{
LED_DDR |= LED_MASK;
}
void led_set(void)
{
LED_PORT |= LED_MASK;
}
void led_tick(void)
{
// animate LEDs in an amusing fashion
}
main.c:
#include "common.h"
#include "led.h"
#include "uart.h"
int main(void)
{
led_init();
uart_init();
...
led_set();
while(1)
{
led_tick();
uart_tick();
}
return 0;
}
AVR এবং MSP430 এর জন্য এই স্টাইলটি ব্যবহার করে এখানে দুটি "রিয়েল ওয়ার্ল্ড" প্রকল্প রয়েছে ।