मेरा पसंदीदा AVR-from-scratch-in-C ट्यूटोरियल https://www.mainframe.cx/~ckuethe/avr-c-tutorial/ है।
छोटे एम्बेडेड सिस्टम के लिए हर किसी की अपनी शैली है। ये मेरा:
मैं प्रत्येक कार्य के लिए उपसर्ग बनाने के नाम के साथ बहुत सी फ़ाइलों का उपयोग करना पसंद करता हूं। उदाहरण के लिए, led_init()और led_tick()दोनों में हैं led.c। यह चीजों को मॉड्यूलर रखता है और पोर्टेबिलिटी के साथ मदद करता है।
मैं common.hप्रकारों को परिभाषित करने के लिए एक हेडर फ़ाइल का उपयोग करता हूं , लेकिन प्रत्येक मॉड्यूल के लिए अलग-अलग शामिल हैं।
मैं सिंगल फ्रीरेन्जिम सिस्टम टाइमर (a 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;
}
एवीआर और एमएसपी 430 के लिए इस शैली का उपयोग करने वाली दो "वास्तविक दुनिया" परियोजनाएं हैं ।