माइक्रोकंट्रोलर और कैसे शुरू करें कोडिंग इनिट या मेन लूप या टाइमर या इंटरप्ट


9

मैं कुछ वर्षों से AVR और PIC माइक्रोकंट्रोलर कोड को काम के लिए संशोधित कर रहा हूं, लेकिन स्क्रैच से कभी भी कुछ भी नहीं लिखा है, मैं इसे बहुत अच्छी तरह से समझता हूं।

मैं अब अपना कोड लिखना शुरू कर रहा हूं और शुरू करने में परेशानी हो रही है। मैं सोच रहा था कि अन्य लोग कोड लिखना कैसे शुरू करते हैं और अगर कोई किताब या ट्यूटोरियल है तो लोग इस पर सलाह देंगे।

क्या आप अपने इनिशियलाइज़ेशन फंक्शन को कोडिंग से शुरू करते हैं, फिर उसके बाद टाइमर्स को बाधित करते हैं, जबकि मुख्य (1) लूप ... मैं सोच रहा हूं कि शुरुआत करने का सबसे अच्छा तरीका क्या है।

धन्यवाद

जवाबों:


7
  1. पहली चीज जो किसी भी माइक्रोकंट्रोलर प्रोजेक्ट में होती है, वह है एक एलईडी ब्लिंक; इसे पलक झपकते रहें और इसे एक नाम दें (" ब्लिंक ") , भी। यह आपके विजेट की दिल की धड़कन है, और हमेशा तब तक काम करेगा जब तक आपका प्रोग्राम अटक न जाए।
  2. स्थानीय संस्करण नियंत्रण भंडार के लिए प्रतिबद्ध है।
  3. अगला आपके प्रोग्राम फ्लो डायग्राम या आपके द्वारा सब्सक्राइब किए गए तरीकों के आधार पर छद्म / बकवास में पूरे कार्यक्रम के माध्यम से उड़ान भरने के लिए है। यदि कुछ काम नहीं करता है या आप इसे पसंद नहीं करते हैं, तो इसे टिप्पणी करें लेकिन इसे वहां रखें ताकि आप इसे बाद में ठीक करना जान सकें। यदि आप कुछ करना नहीं जानते हैं, तो यह लिखें कि टिप्पणियों में क्या करना है।
  4. स्थानीय संस्करण नियंत्रण भंडार के लिए प्रतिबद्ध है।
  5. रिक्त स्थान भरने का समय! एक समय में एक फ़ंक्शन को लागू करें, उदाहरण के लिए टाइमर, और इसका परीक्षण करें । आपका कार्यक्रम हमेशा संकलन और अपेक्षा के अनुरूप काम करना चाहिए। मैं इस बिंदु पर किसी भी उपयोगकर्ता इंटरफ़ेस कनेक्शन को लागू करना पसंद करता हूं, जैसे UART -> RS232 -> पीसी लिंक या एलसीडी डिस्प्ले। ब्लिंक के बारे में मत भूलना ।
  6. स्थानीय संस्करण नियंत्रण भंडार के लिए प्रतिबद्ध है।
  7. कठोर परीक्षण दिनचर्या के साथ अपने कोड को तोड़ने की कोशिश करें; डिबग। दूसरों को अपने कोड की समीक्षा करें ; डिबग। अपने विजेट को नियमित रूप से इसके डिजाइन मापदंडों के माध्यम से चलाएं, जैसे तापमान भिन्नता; डिबग।
  8. स्थानीय संस्करण नियंत्रण भंडार के लिए प्रतिबद्ध है।
  9. ब्लिंक को डिस्कनेक्ट करें यदि आप एक बेरहम मूर्ख हैं, और जहाज।

AVRFreaks में डीन कैमरा (उर्फ। Abcminuser ) द्वारा लिखित एक उत्कृष्ट ट्यूटोरियल है, जिसे C कोड को संशोधित करना: अन्य परियोजनाओं का प्रबंधन करना है । जेम्स वैगनर द्वारा माइक्रोप्रोसेसरों के लिए स्टेट मशीन पढ़ने में भी आपकी रुचि हो सकती है ।


3
स्रोत नियंत्रण के बारे में बिल्कुल सहमत हैं। जल्दी करो, अक्सर कमिट करो
टोबी जाफ़े

प्रतिबद्ध के साथ, इसे एक नई निर्देशिका की जांच करना और इसका पुनर्निर्माण करना है। स्रोत नियंत्रण में एक फ़ाइल जोड़ने के लिए भूल जाने से बदतर कुछ भी नहीं है।
रॉबर्ट

6

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.