আরডুইনোর জন্য কেউ কিউপি রাষ্ট্রের কাঠামোটি চাপিয়ে দিয়েছে?


12

আমার ডেটা লগিং প্রকল্পের সম্ভাব্য পন্থাগুলি পর্যালোচনা করে, আমি "সি / সি ++ এ ব্যবহারিক ইউএমএল স্টেটচার্টস" বইটি আরডুইনোর সাথে আরও গুরুতর কাজের জন্য অত্যন্ত আকর্ষণীয় বলে খুঁজে পেয়েছি। কিউপি এম্বেড থাকা সিস্টেমগুলির জন্য অতি-আলোক, মুক্ত উত্স, স্টেট মেশিন-ভিত্তিক ফ্রেমওয়ার্কের একটি পরিবার এবং তারা তাদের ফ্রেমওয়ার্কগুলির জন্য কোড এবং পোর্টগুলি বিতরণ করে (জিএনইউ জিপিএল 2) http://www.state-machine.com/ যেখানে তাদের একটি রয়েছে WinAVR / Gnu C ++ সরঞ্জাম সেট ব্যবহার করে AVR এবং AVR মেগা পোর্ট।

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


কিউপি রাষ্ট্রের বর্ণগুলি উল্লেখ করার জন্য +1 দেওয়ার বিষয়ে জেসন এস এর মন্তব্যে +1 ওহ, এছাড়াও স্টার এবং একটি বিষয় +1 ... কারণ এটি কৃপণ শোনায় এবং আমি উত্তরের অপেক্ষায় থাকি: পি (স্প্যামের জন্য দুঃখিত, আজ একটি মজার মেজাজে;))
সাইফঙ্ক

উত্তর:


4

প্লেগের মতো আমি এ জাতীয় জিনিস এড়াতে চাই।

বেশিরভাগ "গুরুতর" নিম্ন স্তরের সফ্টওয়্যার আমি এই ফর্মটিতে একটি স্টেট মেশিন হয়ে পড়েছি:

#include <stdio.h>

typedef enum
{
    STATE_INIT,     // Description
    STATE_RUNNING,  // Description
    STATE_COMPLETE  // Description
} state_t;

int main(void)
{
    state_t state = STATE_INIT; // setup the initial state

    while(1)
    {
        os_run(); // call the OS services (poll the UART, check buttons, etc.)

        switch(state)
        {
            case STATE_INIT:
                state = STATE_RUNNING;
                puts("init");
                break;
            case STATE_RUNNING:
                state = STATE_COMPLETE;
                puts("running");
                break;
            case STATE_COMPLETE:
                puts("complete");
                break;
        }
    }
    return 0;
}

সি / সি ++ এ প্রচুর অন্যান্য ভাল পন্থা রয়েছে তবে সেগুলি আমার পছন্দ নয়।

কিউপি-র মতো সরঞ্জামগুলির মধ্যে বড় সমস্যাটি হ'ল তারা আপনাকে চান না এমন কাজগুলি করা প্রায়শই খুব কঠিন। আপনি যদি কোডের সাথে ম্যানুয়ালি ঝাঁকুনি বেছে নেন তবে আপনাকে বিশেষ ক্ষেত্রে চিরতরে বজায় রাখতে হবে।

আমি বলব, ইউএমএল স্টেটচার্টগুলি ডকুমেন্টেশন, পাঠদান এবং বিশ্লেষণের জন্য দুর্দান্ত সরঞ্জাম। তবে, প্রকৃত প্রোগ্রামিংয়ের জন্য নয় - এর জন্য আরও অনেক ভাল সরঞ্জাম রয়েছে :)


1
আপনার কোড স্বত্বাধিকারী হলে QP- এর জন্য লাইসেন্স ফিগুলি ভুলে যাবেন না।
mjh2007

1
রাজ্য মেশিন কোডে সামান্য উন্নতি: এটি প্রায়শই রাষ্ট্রের পরিবর্তনগুলি সারি করার জন্য নির্ভরযোগ্যতা সহায়তা করে এবং স্যুইচ স্টেটমেন্টের ঠিক আগেই আসল রাষ্ট্র পরিবর্তন করতে পারে। আপনি নিজের স্টেটাকে STATE_COMPLETE এ পরিবর্তন করেছেন ভেবে ঠিক তখনই আপনাকে আপনার স্টেটকে STATE_INIT এ পরিবর্তনের বিষয়ে কোনও চিন্তা করতে হবে না।
রাগ করুন

3

জিপিএল লাইসেন্সের কারণে আমি ব্যক্তিগতভাবে কিউপি কাঠামো / লাইব্রেরি ব্যবহার করি নি। এই সময়ে, আমি ভাবিনি যে আমার নিয়োগকর্তা কিউপি ব্যবহার করে এইচএসএম (শ্রেণিবদ্ধ রাষ্ট্র মেশিন) পরীক্ষা করার জন্য আমার জন্য ময়দা কাটাতে প্রস্তুত ছিলেন was আমি আমার নিজের বাস্তবায়ন করতে হয়েছিল যখন আমি কিউপির অনুরূপ ছিলাম যখন আমি একটি জঘন্য রাষ্ট্রীয় মেশিনকে রিফেক্টর করছিলাম যা জোবির উদাহরণের মতো কয়েকশ লাইন কোড হাতে নিয়েছিল তবে 1000 বার। একটি পুরানো নকশা যা ধার করা হয়েছিল তা শক্তভাবে নির্ধারিত সময়সীমার দিকে চালিয়ে যাওয়ার জন্য এটি বজায় রাখতে ভয়ানক যন্ত্রণা ছিল। আমি অন্য কিছু ভেঙে যাওয়ার ভয়ে এতে নতুন কিছু যুক্ত করার চেষ্টা করতে ভয় পেয়েছিলাম।

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

আমার কোনও বন্ধু জাভা ব্যবহার করে কোয়ান্টাম ফ্রেমওয়ার্কটি একটি রোবোটে প্রয়োগ করেছে যা বেশ ভালভাবে কাজ করেছে। এটি নির্দিষ্ট ইনপুটগুলির উপর ভিত্তি করে রোবোটের অ্যালগরিদম তৈরির সিদ্ধান্তের অংশ ছিল। এটি রোবটের রাজ্যের উপর ভিত্তি করে যে সিদ্ধান্ত নিতে হয়েছিল তা দেওয়া স্বাভাবিক ছিল natural

কিউপি-র সৌন্দর্য সম্পর্কে আমি যা বুঝি তা হ'ল একটি রাষ্ট্রীয় মেশিন ডিজাইনের জন্য কাঠামো প্রস্তুত করার ক্ষমতা যা আপনার প্রসেসরের জন্য অনুকূলিত হয়েছে এবং অকার্যকর বয়লারপ্লিট কোডটি ছিটিয়ে CASE সরঞ্জামগুলিতে নির্ভর করতে হবে না। তবে, আমি কেবলমাত্র কিউপি ব্যবহার করব যদি আপনি আপনার নকশা বর্ণনা করে তা বাস্তবায়নের জন্য জটিল মেশিনগুলির সেট সেট করেন।

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


1

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


1

কেস স্টেটমেন্টটি ফাংশন পয়েন্টারগুলির একটি অ্যারে দিয়ে প্রতিস্থাপন করুন

যা কিউপি স্টাফগুলি কীভাবে কাজ করে। রাষ্ট্রের উপস্থাপনা হ'ল একটি ফাংশন পয়েন্টার (বর্তমান রাষ্ট্রের জন্য ফাংশনটিতে)। সি ++ এ এটি সদস্য ফাংশনের পয়েন্টার হতে পারে তবে মূলত একই the বর্তমান রাষ্ট্রীয় ফাংশন ইভেন্টগুলির সাথে সাথে কিছু সিউডো-ইভেন্টস (এন্ট্রি, প্রস্থান) সহ ডাকা হয়, যার মধ্যে একটি সর্বদা নিরস্ত থাকে এবং নেস্টেড ট্রানজিশনগুলি করার সময় রাষ্ট্রের নেস্টিং নির্ধারণ করতে ব্যবহৃত হয় (কিউপি হায়ারারিকাল স্টেট মেশিন সমর্থন করে)।

মিরো সামেক বলেছেন যে খুব শীঘ্রই তিনি একটি আরডিনো-টার্গেটযুক্ত বন্দর করতে যাচ্ছেন।

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