मेरा पसंदीदा 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 के लिए इस शैली का उपयोग करने वाली दो "वास्तविक दुनिया" परियोजनाएं हैं ।