আরডুইনো ফাংশনগুলি কল করার দ্রুততম বিকল্পগুলি কী digitalread()
এবং digitalwrite()
? এভিআর-নির্দিষ্ট বা চিপ-নির্দিষ্ট সমাধানগুলি গ্রহণযোগ্য।
আরডুইনো ফাংশনগুলি কল করার দ্রুততম বিকল্পগুলি কী digitalread()
এবং digitalwrite()
? এভিআর-নির্দিষ্ট বা চিপ-নির্দিষ্ট সমাধানগুলি গ্রহণযোগ্য।
উত্তর:
সরাসরি ডিজিটাল বন্দরগুলি অ্যাক্সেস করুন!
আমি পরীক্ষা 3 পদ্ধতি ছিল
- ডিজিটাল রাইট (পিন, কম); ডিজিটাল রাইট (পিন, উচ্চ);
- সিএলআর (পোর্টটিবি, 0); সেট (পোর্টটিবি, 0);
- পোর্টটিবি | = _বিভি (0); পোর্টটিবি & = ~ (_বিভি (0));
[...]
আপনি দেখতে পাচ্ছেন, ডিজিটাল রাইটটি সম্পূর্ণ হতে প্রায় 56 চক্র নেয়, যখন সরাসরি পোর্ট অ্যাড্রেসিংয়ে 2 চক্র লাগে। আইও অপারেশনগুলির প্রচুর প্রোগ্রামগুলির জন্য এটি সময়ের চেয়ে বড় পার্থক্য!
এই লাইব্রেরিটি একটি ভাল বিকল্প: http://code.google.com/p/digitalwritefast/
উপরে প্রস্তাবিত হিসাবে, সরাসরি ডিজিটাল পোর্টগুলি অ্যাক্সেস করুন। কিন্তু স্টাইল দিয়ে!
হার্ডওয়্যার রেজিস্টারগুলিতে সরাসরি হার্ড-কোডেড মানগুলি লিখে, আপনি পঠনযোগ্যতা এবং বহনযোগ্যতা .িলা করেন।
আমি গিথুবকে এমন একটি সরঞ্জাম প্রকাশ করেছি যাতে আমি এইচডাব্লুএ বলেছিলাম যা আপনাকে হার্ডওয়্যারটিতে একটি অবজেক্ট-ভিত্তিক ইন্টারফেস ব্যবহার করতে দেয় যার জন্য সি ++ সংকলক প্রয়োজন হয় না এবং উচ্চ দক্ষতার বাইনারি কোড তৈরি করে।
এইচডব্লিউএ আছে: https://github.com/duparq/hwa
আরডুইনোএসই-র লোকেরা ইতিমধ্যে এটি নিয়ে আলোচনা এবং পরীক্ষা করেছে। এটি দেখা যাচ্ছে যে digitalWriteFast()
নিয়মিত তুলনায় উন্নতি খুব বেশি নয় digitalWrite()
। ডাইরেক্ট পোর্ট অ্যাক্সেস তবে এর চেয়ে প্রায় 35-40 গুণ বেশি দ্রুত digitalWrite()
।
চিপকিট আনো 32 ব্যবহার করুন । এটি এভিআর ভিত্তিক আরডুইনোসের চেয়ে অনেক দ্রুত। এটি আপনার সময় সংক্রান্ত সমস্যাগুলিও মোকাবেলা করবে।