এভিআর মাইক্রোকন্ট্রোলার এবং কীভাবে কোডিং আরম্ভ করতে হবে বা মূল লুপ বা টাইমার বা বিঘ্ন ঘটবে


9

আমি কাজের জন্য কয়েক বছর ধরে এভিআর এবং পিআইসি মাইক্রোকন্ট্রোলার কোডটি সংশোধন করছি তবে কখনও স্ক্র্যাচ থেকে কিছুই লিখিনি, আমি এটি বেশ ভালই বুঝতে পারি।

আমি এখন নিজের কোডটি লিখতে শুরু করছি এবং শুরু করতে সমস্যা হচ্ছে। আমি ভাবছিলাম যে অন্যান্য লোকেরা কীভাবে কোড লেখা শুরু করে এবং যদি কোনও বই বা টিউটোরিয়াল থাকে তবে লোকেরা এই বিষয়ে সুপারিশ করবে।

আপনি কি আপনার প্রারম্ভিককরণ ক্রিয়াকলাপটি কোডিং দিয়ে শুরু করেন তারপরে বাধা দেয় তারপরে টাইমারগুলি পরে মূল যখন (1) লুপ ... আমি ভাবছি যে শুরু করার সর্বোত্তম উপায়টি কী।

ধন্যবাদ

উত্তর:


7
  1. যে কোনও মাইক্রোকন্ট্রোলার প্রকল্পে প্রথম কাজটি হ'ল একটি এলইডি জ্বলজ্বল করে; এটি জ্বলজ্বলে রাখুন এবং এটিকে একটি নাম দিন ("ব্লিঙ্কি" ) ও। এটি আপনার উইজেটের হার্ট বিট , এবং আপনার প্রোগ্রামটি আটকে না যাওয়ার কারণে সর্বদা এতক্ষণ কাজ করবে।
  2. স্থানীয় সংস্করণ নিয়ন্ত্রণ ভান্ডার প্রতিশ্রুতিবদ্ধ।
  3. এর পরে আপনার প্রোগ্রাম ফ্লো ডায়াগ্রাম বা আপনি যে সাবস্ক্রাইব করেছেন এমন যেকোনো পরিকল্পনার পদ্ধতির উপর ভিত্তি করে সিউডো / ক্রপকোডে পুরো প্রোগ্রামটি পেরিয়ে যাওয়া। যদি কিছু কাজ না করে বা আপনি এটি পছন্দ করেন না তবে মন্তব্য করুন তবে এটি সেখানে রাখুন যাতে আপনি পরে এটি ঠিক করতে জানেন। আপনি যদি কিছু করতে জানেন না তবে মন্তব্যে কী করা উচিত তা লিখুন।
  4. স্থানীয় সংস্করণ নিয়ন্ত্রণ ভান্ডার প্রতিশ্রুতিবদ্ধ।
  5. শূন্যস্থান পূরণ করার সময়! একবারে একটি ফাংশন প্রয়োগ করুন, উদাহরণস্বরূপ টাইমার এবং এটি পরীক্ষা করুন । আপনার প্রোগ্রামটি সর্বদা সংকলন করা উচিত এবং প্রত্যাশা অনুযায়ী কাজ করা উচিত। আমি এই মুহুর্তে ইউআরটি -> আরএস 232 -> পিসি লিঙ্ক বা এলসিডি প্রদর্শনগুলির মতো যেকোনও ইউজার ইন্টারফেস সংযোগগুলি প্রয়োগ করতে চাই। সম্পর্কে ভুলবেন না ব্লিঙ্কি
  6. স্থানীয় সংস্করণ নিয়ন্ত্রণ ভান্ডার প্রতিশ্রুতিবদ্ধ।
  7. কঠোর পরীক্ষার রুটিনগুলির সাথে আপনার কোডটি ভাঙ্গার চেষ্টা করুন; ডিবাগ। অন্যদের আপনার কোড পর্যালোচনা করতে ; ডিবাগ। আপনার উইজেটটিকে নিয়মিতভাবে ডিজাইনের পরামিতিগুলি দিয়ে চালান, যেমন তাপমাত্রার বৈচিত্রগুলি; ডিবাগ।
  8. স্থানীয় সংস্করণ নিয়ন্ত্রণ ভান্ডার প্রতিশ্রুতিবদ্ধ।
  9. ব্লিঙ্কিকে সংযোগ বিচ্ছিন্ন করুন যদি আপনি একজন হৃদয়হীন বোকা এবং জাহাজী হন।

AVRFreaks একটি চমৎকার টিউটোরিয়াল ডিন ক্যামেরা (। ওরফে দ্বারা লিখিত হয়েছে abcminuser ) নামক বড় বড় প্রকল্পের ম্যানেজিং: Modularizing সি কোড । আপনি জেমস ওয়াগনার দ্বারা মাইক্রোপ্রসেসরগুলির জন্য স্টেট মেশিনগুলি পড়তে আগ্রহী হতে পারেন ।


3
উত্স নিয়ন্ত্রণ সম্পর্কে সম্পূর্ণ একমত agree তাড়াতাড়ি প্রতিশ্রুতি দিন, প্রায়শই প্রতিশ্রুতিবদ্ধ হন
টবি জাফি

প্রতিশ্রুতিবদ্ধতা সহ এটি একটি নতুন ডিরেক্টরিতে এটি পরীক্ষা করে এটি পুনর্নির্মাণ করা। উত্স নিয়ন্ত্রণে কোনও ফাইল যুক্ত করতে ভুলে যাওয়ার চেয়ে খারাপ আর কিছুই নয়।
রবার্ট

6

আমার প্রিয় 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 এর জন্য এই স্টাইলটি ব্যবহার করে এখানে দুটি "রিয়েল ওয়ার্ল্ড" প্রকল্প রয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.