বিকল্প 1: বর্ণিত ভাষা
এটি সরাসরি প্রশ্নের উত্তর দেয় না (যা একটি দুর্দান্ত প্রশ্ন, বিটিডাব্লু, এবং আমি একটি উত্তর থেকে শিখতে আশা করি যা এর সরাসরি সমাধান করে) তবে বাইরের প্রোগ্রামগুলি লেখার জন্য বাহ্যিক প্রোগ্রামগুলি লোড করতে পারে এমন প্রকল্পগুলি করার সময় এটি খুব সাধারণ বিষয় common একটি অনুবাদিত ভাষা। যদি সংস্থানগুলি শক্ত থাকে (যা তারা এই প্রসেসরের উপর থাকবে, আপনি কি এর জন্য কোনও পিক 32 বা ছোট এআরএম প্রসেসর ব্যবহার করার কথা ভেবেছেন?), সম্পূর্ণ স্পেসিফিকেশনের একটি উপসেটে ভাষা সীমাবদ্ধ করা সাধারণ common এমনকি চেইনের নিচে ডোমেন-নির্দিষ্ট ভাষাগুলি কেবল কয়েকটি কাজ করে।
উদাহরণস্বরূপ, এলুয়া প্রকল্পটি স্বল্প সংস্থান (64 কেবি র্যাম) ব্যাখ্যা করা ভাষার উদাহরণ। আপনি কিছু বৈশিষ্ট্যগুলি সরিয়ে ফেললে আপনি এটি 32 কেএম র্যামে চেপে ধরতে পারেন (দ্রষ্টব্য: এটি আপনার বর্তমান প্রসেসরের উপর কাজ করবে না, এটি একটি 8-বিট আর্কিটেকচার। বহিরাগত র্যাম ব্যবহার সম্ভবত গ্রাফিক্সের জন্য খুব ধীর হবে)। এটি একটি দ্রুত, নমনীয় ভাষা সরবরাহ করে যাতে নতুন ব্যবহারকারীরা যদি আপনি একটি ন্যূনতম এপিআই সরবরাহ করেন তবে সহজেই গেমগুলি প্রোগ্রাম করতে পারে। অনলাইনে ভাষার জন্য প্রচুর ডকুমেন্টেশন উপলব্ধ। অন্যান্য ভাষা রয়েছে (যেমন ফোরথ এবং বেসিক) যা আপনি একইভাবে ব্যবহার করতে পারেন তবে আমি মনে করি যে এই মুহুর্তে লুয়া হ'ল সেরা বিকল্প।
অনুরূপ শিরাতে, আপনি নিজের ডোমেন-নির্দিষ্ট ভাষা তৈরি করতে পারেন। আপনাকে আরও একটি পূর্ণাঙ্গ API এবং বহিরাগত ডকুমেন্টেশন সরবরাহ করতে হবে তবে গেমগুলি যদি একই রকম হয় তবে এটি খুব বেশি কঠিন হবে না।
যাই হোক না কেন, PIC18 সম্ভবত এমন কোনও প্রসেসর নয় যা আমি কাস্টম প্রোগ্রামিং / স্ক্রিপ্টিং এবং গ্রাফিক্সের সাথে জড়িত এমন কোনও জিনিসের জন্য ব্যবহার করব। আপনি এই শ্রেণীর প্রসেসরের সাথে পরিচিত হতে পারেন, তবে আমি পরামর্শ দেব যে ডিসপ্লে ড্রাইভার এবং আরও বেশি স্মৃতি সহ কিছু ব্যবহার করার জন্য এটি ভাল সময় হবে।
বিকল্প 2: কেবল পুরো বিষয়টি পুনরায় প্রোগ্রাম করুন
তবে, আপনি যদি ইতিমধ্যে সি তে সমস্ত গেমস প্রোগ্রাম করার পরিকল্পনা করে থাকেন তবে এসডি কার্ড থেকে কেবল গেমের যুক্তি লোড করে বিরক্ত করবেন না । পুনরায় প্রোগ্রাম করার জন্য আপনার কাছে মাত্র 32 কেবি ফ্ল্যাশ রয়েছে এবং এর জন্য খুব সহজেই 4 জিবি মাইক্রোএসডি কার্ড পেতে পারেন। (দ্রষ্টব্য: বৃহত্তর কার্ডগুলি প্রায়শই এসডিএইচসি হয় যার সাথে ইন্টারফেস করা শক্ত)। ধরে নিই যে আপনি আপনার 32 কেবি প্রতি শেষ বাইট ব্যবহার করেন যা আপনার ফার্মওয়্যারের 131,072 কপির জন্য এসডি কার্ডের জন্য জায়গাটি ছেড়ে দেয় যা আপনার প্রয়োজন গেম যুক্তি সহ with
এএন 851 এর মতো পিআইসি-র জন্য বুটলোডার লেখার জন্য প্রচুর অ্যাপনোট রয়েছে । কোনও নির্দিষ্ট মেমরির অঞ্চল (সম্ভবত মেমরি অঞ্চলের শীর্ষস্থানীয়, আপনি এটি লিঙ্কারে উল্লেখ করতে পারেন) দখল করতে আপনাকে আপনার বুটলোডারটি ডিজাইন করতে হবে এবং নির্দিষ্ট ফার্মওয়্যার প্রকল্পগুলি এই অঞ্চলে পৌঁছাবে না তা নির্দিষ্ট করতে হবে। অ্যাপনোটটি আরও বিশদে এটি বানান। কেবলমাত্র "PIC18F452 এর বুট বিভাগটি" সংযুক্ত করুন "আমি লিঙ্কারে নির্দিষ্ট করা বুট বিভাগ" দিয়ে প্রতিস্থাপন করুন এবং এটি সমস্ত অর্থবোধ করবে।
তারপরে, আপনার বুটলোডারটিকে কেবল এসডি কার্ড থেকে চালানোর জন্য কোনও প্রোগ্রাম নির্বাচন করার অনুমতি দিতে হবে এবং পুরো জিনিসটি অনুলিপি করতে হবে। একটি ইউআই হতে পারে যে নির্বাচনের মোডে প্রবেশের জন্য ব্যবহারকারীকে একটি পুশ বোতামটি ধরে রাখতে হবে। সাধারণত, বুটলোডার কেবল পুনরায় সেট করার সময় এই বোতামটির স্থিতি পরীক্ষা করতে পারে এবং যদি এটিটি ধরে না রাখা হয় তবে গেমটিতে প্রবেশ করুন। যদি এটি চেপে ধরে থাকে তবে ব্যবহারকারীর এসডি কার্ডে একটি ফাইল চয়ন করতে, প্রোগ্রামটি অনুলিপি করতে এবং [নতুন] গেমটিতে বুট করা চালিয়ে যাওয়ার প্রয়োজন হবে।
এটি আমার বর্তমান সুপারিশ।
বিকল্প 3: ডিপ ম্যাজিক হেক্স ফাইলের কেবলমাত্র অংশ সংরক্ষণ করে
আপনার কল্পনা করা মেকানিজমের সমস্যাটি হ'ল প্রসেসর এপিআই এবং ফাংশন কলগুলির সাথে ডিল করে না, এটি সংখ্যার সাথে সম্বোধন করে - নির্দেশিকাগুলি লাফিয়ে লাফাতে পারে এবং এমন কোনও কোডের প্রত্যাশা করতে পারে যা কোনও এপিআই স্পেস অনুসারে কোনও ফাংশন কল কার্যকর করে। আপনি যদি প্রোগ্রামটির কেবল একটি অংশ সংকলন করার চেষ্টা করেন, লিঙ্কার আপনি কল করবেন check_button_status()
বা করবেন তখন কী করতে হবে তা জানতে পারে না toggle_led()
। আপনি হয়ত জানেন যে প্রসেসরের হেক্স ফাইলে functions ফাংশনগুলি বিদ্যমান রয়েছে তবে তারা কোন ঠিকানায় অবস্থান করছে তা অবশ্যই সঠিকভাবে জানা দরকার।
লিঙ্কার ইতিমধ্যে আপনার কোডটিকে একাধিক বিভাগে বিভক্ত করে; আপনি তাত্ত্বিকভাবে কিছু -section
এবং #pragma
প্ররোচনা দিয়ে এটি অতিরিক্ত বিভাগে বিভক্ত করতে পারেন । আমি কখনই এটি করিনি, এবং কীভাবে জানি না। উপরের দুটি পদ্ধতি আমাকে ব্যর্থ না করা পর্যন্ত (বা কেউ এখানে একটি দুর্দান্ত উত্তর পোস্ট করেছেন), আমি সম্ভবত এই পদ্ধতিটি শিখব না, এবং তাই আমি আপনাকে এটি শেখাতে পারি না।