মাইক্রো-নিয়ন্ত্রণকারীদের জন্য দক্ষ সি কোড রচনার সংস্থানগুলি? [বন্ধ]


15

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

আমি একটি জাভা প্রোগ্রামার হিসাবে শুরু করেছি এবং জাভাতে এটি বেশ কাটা এবং শুকনো; প্রোগ্রামগুলি যদি খুব বড় হয়ে যায় তবে ক্লাসে এটিকে টুকরো টুকরো করে আরও ফাংশন করুন। গাইডলাইনগুলি পছন্দ করুন, কোডটি পাঠযোগ্য এবং মন্তব্য যুক্ত করুন। তথ্য গোপন এবং OOP কৌশল ব্যবহার করুন। যার কয়েকটি এখনও সি এর জন্য প্রযোজ্য

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

আমার প্রশ্নটি হ'ল: আমি কোনও সংস্থান নষ্ট না করে 8-বিট মাইক্রোকন্ট্রোলারের জন্য একটি কোড লেখার পরিকল্পনা করছি । জানি যে আমি জাভা ব্যাকগ্রাউন্ড থেকে এসেছি তাই জিনিসগুলি এখন আর আগের মতো নয় ... সংস্থানসমূহ / বই / লিঙ্ক / টিপস অনেক প্রশংসা করা হবে। পারফরম্যান্স এবং আকার এখন গুরুত্বপূর্ণ। 8 বিট মাইক্রো-কন্ট্রোলারের জন্য দক্ষ (উত্সাহগুলির মধ্যে) দক্ষতার উপর সংস্থানগুলি / কৌশলগুলি?

এছাড়াও, inline assemblyমাইক্রো-কন্ট্রোলার স্ট্যান্ডার্ডের কাছাকাছি থাকা পাশাপাশি গুরুত্বপূর্ণ ভূমিকা পালন করে। কিন্তু দক্ষতার ক্ষেত্রে কি সাধারণ নিয়ম রয়েছে যা সবার জন্য প্রযোজ্য?

উদাহরণস্বরূপ: যে কোনও সময় register unsigned int variable_name;পছন্দ করা হয় char। অথবা uint8_t আপনার যদি বড় সংখ্যার দরকার না হয় তবে ব্যবহার করছেন ।

সম্পাদনা: সমস্ত উত্তর এবং পরামর্শের জন্য আপনাকে অনেক ধন্যবাদ। জ্ঞান ভাগ করে নেওয়ার জন্য প্রত্যেকের প্রচেষ্টাকে আমি প্রশংসা করি।


2
এটি প্রায়শই কোনও x86 প্রসেসরের ক্ষেত্রে হয় না, তবে একটি মাইক্রোকন্ট্রোলারের ক্ষেত্রে, আপনি যদি প্রতি শেষ ড্রপ পারফরম্যান্স পেয়েছেন তা নিশ্চিত করতে চান, তবে আপনি সম্ভবত এর পরিবর্তে অ্যাসেম্বলি ব্যবহার করতে চাইবেন।
রে মিয়াসাকা

3
@ রি: হ্যান্ড কার্টেড অ্যাসেমব্লি খুব কমই হয়, যদি কখনও হয় তবে কম স্মৃতি ব্যবহার করে এবং আধুনিক সি সংকলকগুলির চেয়ে দ্রুত faster এটি সমাবেশে কোড করার সময় নষ্ট করা যখন এটি সি হিসাবে করা উচিত (যেমন হওয়া উচিত)
ম্যাট্নজ

1
@ ম্যাটনজ আধুনিক, আপনি কী নতুন সম্পর্কে কথা বলছেন? সমস্ত সততার সাথে আমি প্রায় এক দশকে মাইক্রোকন্ট্রোলারের জন্য কোড লিখিনি।
রেই মিয়াসাকা

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

1
রী মিয়াসাক @ রক্ষণাবেক্ষণ ব্যয়ের বিশাল পরিমাণে বৃদ্ধি করুন। একটি ভাল সি সংকলক খুব অভিজ্ঞ প্রোগ্রামার হিসাবে প্রায় একই কোড উত্পাদন করতে পারে।

উত্তর:


33

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

আপনি যখন "কোনও সংস্থান নষ্ট না করে" প্রোগ্রাম করেন, আপনি কি আপনার সময়টিকে একটি সংস্থান হিসাবে বিবেচনা করবেন? যদি তা না হয় তবে কে আপনাকে আপনার সময়ের জন্য মূল্য দিচ্ছে এবং যদি কেউ না হয় তবে আপনার এটির সাথে আরও ভাল কিছু করতে হবে। যে কোনও এমবেডেড সিস্টেম ডিজাইনারের পছন্দটি একবার বেছে নিতে হবে ইঞ্জিনিয়ারিং সময়ের জন্য হার্ডওয়ারের দামের দাম। আপনি যদি 100 ইউনিট শিপিং করছেন, 100,000 ইউনিটে একটি বৃহত মাইক্রো ব্যবহার করুন, প্রতি ইউনিট প্রতি 1 ডলার সাফল্য 1 মিলিয়ন ইউনিটে সফটওয়্যার বিকাশের 1 ম্যান ইয়ার (বাজারে সময়, সুযোগ ব্যয় ইত্যাদি উপেক্ষা করে) এর সমান, আপনি শুরু করেন রিসোর্স ব্যবহার সম্পর্কে উদ্বিগ্ন হওয়ার জন্য আরওআই পাওয়া, তবে সাবধানতা অবলম্বন করুন কারণ অনেকগুলি এমবেডেড প্রকল্পই কখনই 1 মিলিয়ন চিহ্ন তৈরি করে না কারণ তারা 1 মিলিয়ন (স্বল্প উত্পাদন ব্যয় সহ উচ্চ প্রাথমিক বিনিয়োগ) বিক্রি করার নকশা করেছিল এবং তারা সেখানে পৌঁছানোর আগেই আবক্ষু হয়ে যায়।

এটি বলেছিল, আপনার (ছোট) এম্বেড থাকা সিস্টেমগুলির সাথে আপনার যে বিষয়গুলি বিবেচনা করা উচিত এবং সচেতন হওয়া প্রয়োজন, কারণ এগুলি এটি অপ্রত্যাশিত উপায়ে কেবল এটি ধীরে ধীরে চলবে না, তা কাজ করা বন্ধ করে দেবে।

ক) স্ট্যাক - আপনার সাধারণত একটি ছোট স্ট্যাক আকার এবং প্রায়শই সীমিত স্ট্যাক ফ্রেমের আকার থাকে। আপনার স্ট্যাকের ব্যবহারটি সর্বদা কী তা সম্পর্কে আপনাকে অবশ্যই সচেতন হতে হবে। সতর্কতা অবলম্বন করুন, স্ট্যাকের সমস্যাগুলি সবচেয়ে कपटी ত্রুটিগুলির কারণ ঘটায়।

খ) গাদা - আবার, ছোট ছোট গাদা আকারগুলি তাই অনিয়ন্ত্রিত মেমরির বরাদ্দ সম্পর্কে সতর্ক হন। খণ্ডন একটি ইস্যুতে পরিণত হয়। এই দুটি দিয়ে, আপনার রান আউট হওয়ার পরে আপনি কী করবেন তা জানতে হবে - এটি ওএস প্রদত্ত পেজিংয়ের কারণে কোনও বড় সিস্টেমে ঘটে না। অর্থাত্ যখন malloc NULL ফেরত দেয়, আপনি কি এটি পরীক্ষা করেন এবং কী করেন। প্রত্যেক ম্যালোর জন্য একটি চেক এবং হ্যান্ডলার, কোড ব্লাট দরকার ?. গাইড হিসাবে - কোনও বিকল্প থাকলে এটি ব্যবহার করবেন না। বেশিরভাগ ছোট সিস্টেমগুলি এই কারণে ডায়নামিক মেমরি ব্যবহার করে না।

গ) হার্ডওয়্যার বিঘ্ন - আপনাকে কীভাবে নিরাপদ এবং সময়োচিত পদ্ধতিতে পরিচালনা করতে হবে তা জানতে হবে। নিরাপদ পুনরায় প্রবেশকারী কোড কীভাবে বানাবেন তাও আপনার জানতে হবে। উদাহরণস্বরূপ, সি স্ট্যান্ডার্ড লিবগুলি সাধারণত পুনরায় প্রবেশ করা হয় না, তাই বাধা হ্যান্ডলারের অভ্যন্তরে ব্যবহার করা উচিত নয়।

d) সমাবেশ - প্রায় সর্বদা অকালীন অপটিমাইজেশন। সি কিছু করতে পারে না এমন কিছু অর্জনের জন্য সর্বাধিক অল্প পরিমাণে (ইনলাইনড) প্রয়োজন। অনুশীলন হিসাবে, হাতের তৈরি কারিগরীতে একটি ছোট পদ্ধতি লিখুন (স্ক্র্যাচ থেকে)। সি তে একই কাজ করুন কর্মক্ষমতা পরিমাপ করুন। আমি বাজি ধরছি সি দ্রুততর হবে, আমি জানি এটি আরও পাঠযোগ্য, রক্ষণাবেক্ষণযোগ্য এবং প্রসারিত হবে able এখন মহড়ার অংশ 2 এর জন্য - এসেম্বলি এবং সি-তে একটি কার্যকর প্রোগ্রাম লিখুন
, অন্য একটি অনুশীলন হিসাবে, লিনাক্স কার্নাল সম্পর্কে লিনাক্স কার্নাল কতটা এসেম্বলার, এটি পড়ুন, নীচের অনুচ্ছেদটি দেখুন।

এটি কীভাবে করবেন তা জেনে রাখা মূল্যবান, এটি এক বা দুটি সাধারণ মাইক্রোগুলির জন্য ভাষাগুলিতে দক্ষ হতেও পারে।

ঙ) "স্বাক্ষরবিহীন ইন্ট ভেরিয়েবল_নামটি নিবন্ধ করুন", "নিবন্ধক" হ'ল, এবং সর্বদা, সংকলকটির জন্য একটি ইঙ্গিত, নির্দেশ নয়, 70 এর দশকের প্রথম দিকে (40 বছর আগে), এটি অর্থবোধ করে। ২০১২ সালে, এটি কীস্ট্রোকগুলির অপচয় হওয়ায় সংকলকগুলি এত স্মার্ট এবং মাইক্রো নির্দেশাবলী এত জটিল sets

আপনার লিনাক্স মন্তব্যে ফিরে যান - আপনার এখানে সমস্যাটি হ'ল আমরা কেবল 1 মিলিয়ন ইউনিট নিয়ে কথা বলছি না, আমরা চিরকালীন জীবনকাল নিয়ে 100 মিলিয়ন এর সাথে কথা বলছি। প্রকৃতি হিসাবে এটি যতটা সম্ভব সম্ভব হিসাবে সর্বোত্তম পাওয়ার জন্য ইঞ্জিনিয়ারিং সময় এবং ব্যয় মূল্যবান। যদিও খুব ভাল ইঞ্জিনিয়ারিং অনুশীলনের একটি ভাল উদাহরণ, তবে বেশিরভাগ এম্বেড থাকা সিস্টেম বিকাশকারীদের লিনাক্স কার্নালের প্রয়োজনীয় পেডেন্টিক হওয়া বাণিজ্যিক আত্মহত্যা হবে be


4
ম্যাটনজ:। স্ট্যাকেক্সচেঞ্জ সাইটগুলিতে এটি একটি সুন্দর উত্তর।
আহমেদ মাসুদ

1
এই উত্তরে আমি উন্নতি করতে পারি না। আমি কেবল এটিকে যোগ করতে পারি যে অ্যাসেম্বলি কোড খুব কমই সন্নিবেশ করানো পারফরম্যান্সের জন্য অর্থবোধ করে তবে I / O চিপস বা অন্যান্য হার্ডওয়্যার ট্রিকস পোকার মতো বিষয়গুলির জন্য এটি বোধগম্য হতে পারে যা সি-তে করা সহজ হতে পারে না
মাইক ডানলাভে

@ ম্যাটনেজ ভাল উত্তর দেওয়া জন্য ধন্যবাদ। +1
AceofSpades

1
@ মাইকডুনলাভে এসেম্বলারের মাঝে মাঝে সঠিক সময়ের প্রয়োজন হয়। সবেমাত্র একটি ভিডিও ওভারলে শেষ হয়েছে যা আইটি / ও পিনে এনটিএসসি ভিডিও উত্সাহিত করতে বিট বিং ব্যবহার করে, সময়টির পরিপ্রেক্ষিতে হয় - 3 ঘন্টা চক্রের জন্য ভোল্টেজ উচ্চ, তারপরে 6 এর জন্য কম ....
মার্টিন বেকেট

@ মার্টিন: এটি সঠিক ধারণা দেয় sense আমি যে স্তরে কোড করেছি এটি অনেক দিন।
মাইক ডুনলাভে

3

আপনার প্রশ্ন ("সম্পদ নষ্ট না করে") খুব সাধারণ, তাই বেশি পরামর্শ দেওয়া শক্ত। আক্ষরিক অর্থে নেওয়া হয়েছে, আপনি যদি সংস্থানগুলি নষ্ট করতে না চান, তবে আপনার কোনও পদক্ষেপ ফিরে নেওয়া উচিত এবং মূল্যায়ন করা উচিত আপনার কিছু করার দরকার আছে কিনা, অর্থাত্, আপনি অন্যান্য উপায়ে সমস্যার সমাধান করতে পারেন কিনা।

এছাড়াও, দরকারী পরামর্শগুলি আপনার সীমাবদ্ধতার উপর খুব নির্ভর করে - আপনি কোন ধরণের সিস্টেম তৈরি করছেন এবং আপনি কোন ধরণের সিপিইউ ব্যবহার করছেন? এটি কি একটি হার্ড রিয়েল-টাইম সিস্টেম? কোড এবং ডেটা জন্য আপনার কত স্মৃতি আছে? এটি স্থানীয়ভাবে সমস্ত সি অপারেশনগুলিকে সমর্থন করে (বিশেষত উল্লেখযোগ্যভাবে, গুণ এবং ভাগ) এবং কোন ধরণের জন্য? আরও সাধারণভাবে: পুরো ডেটা শীটটি পড়ুন এবং এটি বুঝতে পারেন।

সর্বাধিক গুরুত্বপূর্ণ পরামর্শ: এটি সহজ রাখুন।

উদাহরণস্বরূপ: জটিল ডেটা স্ট্রাকচার (হ্যাশ, গাছ, সম্ভবত লিঙ্কযুক্ত তালিকাগুলি) সম্পর্কে ভুলে যান এবং স্থির আকারের অ্যারেগুলি ব্যবহার করুন। অ্যারেগুলি খুব ধীরে ধীরে ধাপে পরিমাপ করে প্রমাণিত হওয়ার পরে আরও জটিল ডেটা স্ট্রাকচারের ব্যবহারের অনুমতি দেওয়া হয়।

এছাড়াও, অতিরিক্ত নকশা করবেন না (জাভা / সি # দেবের কিছু করার প্রবণতা রয়েছে): খুব বেশি লেয়ার ছাড়াই সোজা পদ্ধতিগত কোড লিখুন। বিমূর্তনের একটি খরচ আছে!

গ্লোবাল ভেরিয়েবল এবং গোটো ব্যবহারের ধারণার সাথে স্বচ্ছন্দ হন [ব্যতিক্রমের অভাবে ক্লিনআপগুলির জন্য খুব দরকারী];)

আপনার যদি বাধা মোকাবেলা করতে হয় তবে পুনরায় পুনর্বিবেচনা সম্পর্কে পড়ুন। রেন্টারেন্ট কোড লেখা খুব অ-তুচ্ছ।


3

আমি ম্যাটঞ্জের উত্তরটির সাথে একমত - বেশিরভাগ অংশের জন্য। আমি 30৮০ বছর আগে 8085 এর উপরে প্রোগ্রামিং শুরু করেছি, তারপরে জেড 80, তারপর দ্রুত 8031 ​​এ চলে গেছে that এর পরে আমি 68300 সিরিজের মাইক্রোকন্ট্রোলারগুলিতে গিয়েছিলাম, তারপরে 80x86, এক্সস্কেল, এমএক্সএল এবং (শেষ অবধি) 8 বিট পিকস, যা আমি অনুমান করার অর্থ আমি পুরো বৃত্তে এসেছি। রেকর্ডের জন্য, আমি উল্লেখ করতে পারি যে বেশ কয়েকটি বড় মাইক্রোপ্রসেসর প্রস্তুতকারীরা এফএই'র উদ্দেশ্যমূলক কোড পুনরায় ব্যবহারের জন্য কোনও বস্তু ভিত্তিক ফ্যাশনে সত্ত্বেও এসেম্বলার ব্যবহার করে।

অনুমোদিত উত্তরে আমি যা দেখছি না তা হ'ল লক্ষ্য প্রসেসরের ধরণ এবং / অথবা প্রস্তাবিত আর্কিটেকচারের আলোচনা। এটি কি 0.50 $ 8 টি সীমিত স্মৃতির সাথে তিক্ত? এটি কি পাইপলাইনিং এবং 8 মেগ ফ্ল্যাশ সহ একটি এআরএম 9 কোর? মেমোরি ম্যানেজমেন্ট কোপ্রোসেসর? এটি একটি ওএস থাকবে? কিছুক্ষণ (1) লুপ? 100000 ইউনিট অন্তর্নির্মিত উত্পাদন সহ একটি গ্রাহক ডিভাইস? বড় আইডিয়া এবং স্বপ্ন নিয়ে একটি স্টার্ট আপ সংস্থা?

যদিও আমি সম্মত হই যে আধুনিক সংকলকগণ অপ্টিমাইজেশনের দুর্দান্ত কাজ করেন, আমি ৩০ বছরে কখনও কোনও প্রকল্পে কাজ করিনি যেখানে আমি ডিবাগারটি বন্ধ করি নি এবং উত্পন্ন সমাবেশের কোডটি দেখতে পাই না কেবল হুডের নীচে কী চলছে (দেখুন) স্বীকৃতিস্বরূপ যখন পাইপলাইনিং এবং অপ্টিমাইজেশন কার্যকর হয় তখন একটি দুঃস্বপ্ন), সুতরাং সমাবেশ সম্পর্কে জ্ঞান গুরুত্বপূর্ণ।

এবং আমার কাছে কখনই সিইও, ইঞ্জিনিয়ারিংয়ের ভিপি নেই, এমন গ্রাহক যিনি আমাকে কোয়ার্টারের পাত্রে কোনও গ্যালন চেষ্টা করতে বা স্টাফ করার জন্য চাপ দেননি বা একটি নিরাপদ সমাধানের জন্য একটি সফ্টওয়্যার সমাধান ব্যবহার করে .05 save সংরক্ষণ করেননি (আরে এটি কেবল সফটওয়্যার ঠিক আছে? এত কঠিন কি?)। মেমরি (কোড বা ডেটা) অপ্টিমাইজেশন সর্বদা গণনা করা হবে।

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


হাই জিও, দয়া করে আপনার পোস্টগুলিতে অপ্রয়োজনীয় এইচটিএমএল এড়িয়ে চলুন এবং পরিবর্তে মার্কডাউন সিনট্যাক্সটি ব্যবহার করুন। জন্য <br />আপনি শুধু এন্টার টিপুন পারে, এবং অনুচ্ছেদ মাত্র তাদের মধ্যে একটি খালি লাইন ছেড়ে। এছাড়াও যখন আপনি অন্য উত্তরটি উল্লেখ করেন, দয়া করে এটিতে একটি লিঙ্ক যুক্ত করুন। এই মুহুর্তে কেবলমাত্র কয়েকটি উত্তর থাকতে পারে তবে অনেক পৃষ্ঠাতে আরও বিতরণ করা যেতে পারে এবং আপনার উত্তরটি কী বোঝানো হয়েছে তা খুব পরিষ্কার হবে না। পরীক্ষা করে দেখুন পুনর্বিবেচনা ইতিহাস আমার সম্পাদনাগুলো দেখতে।
ইন্নিস

@ জিও অন্যান্য গুরুত্বপূর্ণ বিষয় উল্লেখ করার জন্য ধন্যবাদ। +1 :)
AceofSpades

+1 - আমার উত্তরের সুন্দর সম্প্রসারণ।
mattnz

1

"ক্লোজ-টু-হার্ডওয়্যার" প্রোগ্রামিংটি কীভাবে করা যায় সে সম্পর্কে ম্যান্টজ উত্তর এটিকে সবচেয়ে ভাল পয়েন্ট দেয়। এটি সি এর অর্থ বোঝানোর পরেও after

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

আপনি এই উত্তরটি বিবেচনা করতে পারেন: সি প্রোগ্রামগুলির জন্য ওও সেরা অনুশীলন যা এই বিষয়টিকে ব্যাখ্যা করে।

এখানে কিছু সংস্থান রয়েছে যা আপনাকে সি তে ভাল অবজেক্ট ওরিয়েন্টেড কোড লিখতে সহায়তা করবে

ক। সিতে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং
। এটি একটি ভাল জায়গা যেখানে লোকেরা ধারণা বিনিময় করে
সি। এবং এখানে পুরো বই

আপনাকে পরামর্শ দেওয়ার মতো আরেকটি ভাল উত্স হ'ল:

রাইট গ্রেট কোড সিরিজ । এটি দুটি ভলিউম বই। প্রথম বইটিতে নিম্ন স্তরের কাজগুলিতে মেশিনগুলির খুব প্রয়োজনীয় দিকগুলি রয়েছে। দ্বিতীয় বইটি স্পর্শ করে হ'ল "চিন্তা করা নিম্ন স্তরের - উচ্চ স্তরের লেখা"


1

আপনার কয়েকটি সমস্যা আছে। প্রথমে আপনি কি এই প্রকল্প / কোডটি পোর্টেবল হতে চান? বহনযোগ্যতা আপনার কর্মক্ষমতা এবং আকার ব্যয় করে, আপনার পছন্দ এবং কার্যভারের প্ল্যাটফর্মটি কী অতিরিক্ত আকার এবং কম কর্মক্ষমতা সহ্য করতে পারে?

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

কেবল ইনলাইনে সমাবেশ নয়, সাধারণভাবে সমাবেশের ভাষা। ইনলাইন অ্যাসেমব্লি খুব অ-বহনযোগ্য এবং কেবল একটি asm ফাংশন কল করার চেয়ে ভাল লিখতে শক্ত। হ্যাঁ আপনি কল সেটআপ জ্বালিয়েছেন এবং ফিরে আসছেন তবে সহজ বিকাশ, আরও ভাল রক্ষণাবেক্ষণ এবং নিয়ন্ত্রণের ব্যয়ে। বিধিটি এখনও প্রযোজ্য, কেবলমাত্র এটি asm এ লিখুন আপনার যদি সত্যিই প্রয়োজন হয়, আপনি কি এই সিদ্ধান্তে সিদ্ধান্ত নিয়ে কাজটি করেছেন যে এই অঞ্চলে সংকলক আউটপুটটি আপনার সমস্যা এবং হাত দ্বারা এটি করার মাধ্যমে আপনি কতটা পারফরম্যান্স লাভ করতে পারেন। তারপরে বহনযোগ্যতা এবং রক্ষণাবেক্ষণে ফিরে আসার সাথে সাথে আপনি সি এবং এএসএম মিশ্রণ শুরু করার সাথে সাথে এবং প্রতিবার সি এবং এসএম মিশ্রণ করলে আপনি আপনার বহনযোগ্যতার ক্ষতি করতে পারেন এবং অন্য কে এই কাজ করছেন তার উপর নির্ভর করে প্রকল্পটি কম রক্ষণাবেক্ষণ করতে পারে বা যদি এটি এমন একটি পণ্য যা আপনি এখন বিকাশ করছেন এবং অন্য কাউকে রাস্তাটি বজায় রাখতে হবে। একবার আপনি এই বিশ্লেষণটি সম্পন্ন করার পরে আপনি স্বয়ংক্রিয়ভাবে জানেন যে আপনাকে ইনলাইন যেতে হবে বা সোজা সমাবেশ করতে হবে কিনা। আমার ক্ষেত্রে ক্ষেত্রের 25+ বছর রয়েছে, সি এবং asm মিশ্রণগুলি প্রতিদিন লিখুন, হার্ডওয়্যার / সফ্টওয়্যার স্তরটিতে / লাইভ থাকুন এবং ভাল, কখনই ইনলাইন asm ব্যবহার করবেন না। এটি খুব কমই প্রচেষ্টার পক্ষে মূল্যবান, খুব সংকলক নির্দিষ্ট, আমি যেখানেই সম্ভব (প্রায় সব জায়গায়) সংকলক অ-নির্দিষ্ট কোড লিখি।

আপনার পুরো প্রশ্নের মূল চাবিকাঠিটি হল আপনার সি কোডটি বিচ্ছিন্ন করা। আপনার কোডটির সাথে সংকলকটি কী করে তা শিখুন এবং সময়ের সাথে সাথে, আপনি যদি চান তবে আপনি যতটা asm অবলম্বন না করে আপনার কোডটি তৈরি করতে সংকলকটি পরিচালনা করতে শিখতে পারেন। আরও সময় সহ আপনি এসএমএর অবলম্বন না করেই কোডটিকে আরও পোর্টেবল করে তুলতে একাধিক লক্ষ্যবস্তুতে দক্ষ কোড তৈরি করতে সংকলকটি হেরফের করতে শিখতে পারেন। 8-বিট মাইক্রোতে সাইন ইন না করে ফাংশন থেকে স্বাক্ষরিত চরটি কেন স্ট্যাটাস রিটার্ন হিসাবে আরও ভাল কাজ করে তা আপনার দেখার কোনও সমস্যা নেই, একইভাবে স্বাক্ষরযুক্ত চরটি 16 এবং 32 বিট সিস্টেমে আরও ব্যয়বহুল হয়ে উঠবে (কিছু আর্কিটেকচার আপনাকে সহায়তা করে) আউট, কিছু না)।

কিছু 8 বিট মাইক্রোকন্ট্রোলার, সব ?, খুব নির্লিপ্তভাবে সংকলক এবং কোনও সংকলক ভাল কোড তৈরি করে না। সেই লক্ষ্যগুলির জন্য একটি দুর্দান্ত সংকলক তৈরি করতে সেই ডিভাইসগুলির জন্য একটি সংকলক বাজার তৈরি করার পর্যাপ্ত চাহিদা নেই তাই সেখানে যে সংকলকগুলি রয়েছে সেখানে আরও ব্যবসায়, অন-এসএম প্রোগ্রামার আকৃষ্ট করার জন্য রয়েছে, এবং নয় যে কম্পাইলার হস্ত লিখিত এসএম এর চেয়ে ভাল not । এই পৃথিবীতে প্রবেশ করানো বাহু এবং মাইপগুলি সেই মডেলটি পরিবর্তন করছে কারণ আপনার লক্ষ্যগুলি রয়েছে যেগুলি সংকলক রয়েছে যা তাদের উপর প্রচুর পরিমাণে কাজ করেছে, সংকলকগুলি যা বেশ ভাল কোড তৈরি করে ইত্যাদি প্রসেসরের সাথে মাইক্রোগুলির জন্য অবশ্যই আপনার এখনও আছে আপনি যেখানে asm এ নেমে যেতে চান, তবে এটি প্রায়শই হয় না, এটি ব্যবহার না করার চেয়ে আপনি কেবল যা চান তা সংকলককে বলা সহজ। নোট করুন যে একটি সংকলক হেরফের করা কিছু কুৎসিত, অপঠনযোগ্য কোড নয়, আসলে এটি বিপরীত, সুন্দর পরিষ্কার, সোজা কোড, সম্ভবত কয়েকটি আইটেম পুনরায় সাজানো। আপনার ফাংশনগুলির আকার এবং পরামিতিগুলির সংখ্যা নিয়ন্ত্রণ করে, এই ধরণের জিনিসটি সংকলক আউটপুটটিতে একটি বিশাল পার্থক্য করে। সংকলক বা ভাষার ঘি-ঝকঝকে বৈশিষ্ট্যগুলি এড়িয়ে চলুন, কেআইএসএস, এটিকে সাধারণ বোকা রাখুন, প্রায়শই অনেক বেশি ভাল এবং দ্রুত কোড তৈরি করে।


আপনি যে ধরণের পণ্য উত্পাদন করেন তা আপনি বর্ণনা করেন না, আমি ধরে নেব এটি হয় খুব উচ্চ ভলিউম, কম মার্জিন বা পাগল মার্জিন সহ নির্দিষ্ট কুলুঙ্গি বাজার। এটি আপনার ব্যবসায়ের পর্যায়ে সিদ্ধান্ত নেওয়া সমালোচনা করে যদি আপনার একটি ছোট 8 বিট মাইক্রো এবং হ্যান্ড ক্র্যাফটেড এসেম্ব্লারার বা একটি বড় মাইক্রো এবং সি ব্যবহার করা উচিত তবে আপনার (মুছে ফেলা?) মন্তব্যটির অনুরোধে - আমি 8 বিট মাইক্রো নিয়ে কাজ করি, তবে আমরা প্রয়োজনীয় মাইক্রো থেকে বৃহত্তর দিয়ে শুরু করুন এবং কেবল তখনই সংশোধন করুন যখন এবং যদি বিওএমের ব্যয় একটি ইস্যু হয়ে যায়) বাজারের সময়, অপার্টিউটিউটি ব্যয় এবং অমিত উন্নয়ন ব্যয় আমাদের বিওমে 10 বা 20 সেন্ট যোগ করার বিলাসিতা দেয়।
mattnz
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.