जावा एपीआई के साथ माइक्रोकंट्रोलर


10

मेरी हार्डवेयर टीम भविष्य के प्रोजेक्ट के लिए Atmel AVR 8-बिट माइक्रोकंट्रोलर का उपयोग करने की योजना बना रही है।

जहां तक ​​मुझे पता है, इसे सी में क्रमादेशित किया जाना चाहिए। मैंने एवीआर के लिए एक जेवीएम पाया है , हालांकि यह एटम से देशी सी पुस्तकालयों की तुलना में अधिक सीमित है।

क्या आप मुझे 8-बिट माइक्रोकंट्रोलर सुझा सकते हैं जो जावा का समर्थन करता है?

पुनश्च। मैं C नहीं जानता और मैं माइक्रोप्रोसेसर प्रोग्रामिंग में अनुभवहीन हूं।


28
कहते हैं कि कोई व्यक्ति एक बड़ी फ़्लोटिंग स्कर्ट बेच रहा था और कुछ लंबे डंडे उन्होंने कहा कि आप अपनी कार से झील पर मछली पकड़ने जा सकते हैं। इसे लगाने के लिए तीन दिनों तक संघर्ष करने के बाद, आप अपनी कार के ऊपर और डूबने से पहले लगभग 15 फीट झील में उतर जाते हैं। तुम पिताजी के लिए जा रहे हो -आराम से पेशाब। आपने एक अच्छी डोंगी के साथ स्थानीय नाव की दुकान को पार किया था। डोंगी माइक्रो का सी कंपाइलर है, और स्टिक के साथ फ्लोटी कार 8-बिट माइक्रोकंट्रोलर पर जावा है। सौभाग्य से, ऐसा नहीं हुआ ... आप हमसे पूछ रहे हैं कि आप कहां-कहां तैर सकते हैं। तो, अपने पिता के रूप में, मुझे कहने दो "तुम क्या सोच रहे हो? एक डोंगी जाओ!"
डे्रॉन

6
मुझे स्टिक के साथ फ्लोटी स्कर्ट कार की कल्पना करने में परेशानी हो रही है। क्या आपके पास कोई तस्वीर है?
एंडोलिथ

8
@ डार्रॉन - ऐसा big_floating_skirtऑब्जेक्ट नहीं होना चाहिए जो पैकेज boatमें इंटरफ़ेस को लागू करता है org.buoyant, और poleऑब्जेक्ट्स, जिनमें कुछ प्रकार के अजीब वंशानुक्रम पैटर्न हैं java.netजो मुझे अब याद नहीं हैं (लेकिन स्पष्ट रूप से यूएमएल में वर्णित है)?
केविन वर्मियर

2
@sterz: मुझे लगता है कि माइक्रोप्रोसेसर पृष्ठभूमि के साथ यह पूरी तरह से समझ में आता है कि आपको एहसास नहीं हुआ होगा कि वास्तव में 8-बिट माइक्रो पर जावा किस तरह से है। क्षमा करें यदि मेरी पहली टिप्पणी कठोर लग रही थी ... एक सरल "ऐसा मत करो" बहुत कमजोर लग रहा था।
darron

1
@ डार्रॉन: "शूटिंग के लिए एक तोप के साथ पक्षियों" सादृश्य के लिए धन्यवाद
10

जवाबों:


32

यदि आप माइक्रोप्रोसेसर / माइक्रोकंट्रोलर प्रोग्रामिंग क्षेत्र में अनुभवहीन हैं, तो आपको संभवतः C सबसे पहले सीखना चाहिए, ताकि आप समझ सकें कि जावा कब और क्यों अधिकांश माइक्रोकंट्रोलर परियोजनाओं के लिए खराब विकल्प है।

क्या आपने जेवीएम से जुड़े प्रतिबंधों को पढ़ा है? इसमें निम्नलिखित समस्याएं शामिल हैं:

  • 512 बाइट्स प्रोग्राम मेमोरी (KB नहीं, और निश्चित रूप से MB नहीं)
  • कम से कम 768 बाइट्स RAM (जहाँ आपके वैरिएबल चलते हैं। आप इस प्रतिबंध द्वारा स्ट्रिंग्स के 768 वर्णों तक सीमित हैं।)
  • 8 मेगाहर्ट्ज AVR पर लगभग 20k जावा ऑपकोड प्रति सेकंड।
  • केवल java.lang.Object, java.lang.System, java.io.PrintStream, java.lang.StringBuffer, एक JVM नियंत्रण वर्ग और एक देशी IO वर्ग शामिल हैं। आप एक आयात java.util नहीं कर पाएंगे। *; और इस सूची में नहीं सभी वर्गों को मिलता है।

यदि आप इन प्रतिबंधों से परिचित नहीं हैं, तो सुनिश्चित करें कि आपके पास एक प्लान B है यदि यह पता चला है कि आप वास्तव में जावा के साथ अंतरिक्ष और गति प्रतिबंधों के कारण प्रोजेक्ट नहीं कर सकते हैं।

यदि आप अभी भी जावा के साथ जाना चाहते हैं, तो शायद इसलिए कि आप डिवाइस को बहुत से लोगों द्वारा प्रोग्राम किए जाने की उम्मीद करते हैं, जो केवल जावा को जानते हैं, मैं दृढ़ता से बड़ा हार्डवेयर प्राप्त करने का सुझाव देता हूं, कुछ ऐसी चीज जो एम्बेडेड लिनक्स चलाता है। ओरेकल के इस पृष्ठ को एम्बेडेड JVM को चलाने के लिए शूट करने के लिए कुछ स्पेक्स के लिए, उनकी चर्चा के अक्सर पूछे जाने वाले प्रश्नों में, वे न्यूनतम 32MB RAM और 32MB फ़्लैश की सलाह देते हैं। यह लगभग 32,000 बार रैम और 1,0000 बार फ्लैश ऑफ एवीआर जिसे आप देख रहे हैं। ओरेकल का जावा एंबेडेड इंट्रो पेज जेवीएम के प्रतिबंधों के बारे में अधिक विस्तार से बताता है। जैसा कि आप अनुमान लगा सकते हैं, उनका स्वर बेहतर है, मेरे मुकाबले एक अच्छा सौदा अधिक जावा-अनुकूल है। ज्ञात हो कि इस तरह के हार्डवेयर को 8-बिट एवीआर की तुलना में डिजाइन करना अधिक कठिन होता है।

मैं कंप्यूटर इंजीनियरिंग का छात्र हूँ और कंप्यूटर साइंस में मामूली हूँ। मेरे विश्वविद्यालय के सीएस विभाग ने जावा कूल-सहायता को पिया है, इसलिए इंजीनियरिंग कार्यक्रम में बहुत सारे छात्र केवल जावा को जानते हैं (जो एक प्रोग्रामर के लिए दुख की स्थिति है, कम से कम कुछ पायथन या सी ++ सीखें यदि आप नहीं करते हैं C सीखना चाहते हैं ...), इसलिए मेरे एक प्रोफेसर ने जावा अनुभव के एक वर्ष के लिए छात्रों के लिए एक सी चीट शीट प्रकाशित की । यह केवल 75 पृष्ठ है; मेरा सुझाव है कि निर्णय लेने से पहले आप इसे पढ़ें या स्किम करें। मेरी राय में, सी सबसे कुशल, टिकाऊ और पेशेवर भाषा है जिसमें एक एम्बेडेड प्रोजेक्ट विकसित करना है।

विचार करने के लिए एक अन्य विकल्प Arduino ढांचा है। यह वायरिंग भाषा के एक स्ट्रिप्ड डाउन संस्करण का उपयोग करता है , जो ऑब्जेक्ट्स या हेडर के बिना C ++ की तरह है। यह कई एवीआर चिप्स पर चल सकता है, यह निश्चित रूप से उनके हार्डवेयर तक सीमित नहीं है। यह आपको सी में सीधे कूदने की तुलना में एक आसान सीखने की अवस्था देगा।

अंत में,
एक्सकेसीडी गोल्डन हैमर
ऑल्ट टेक्स्ट: मुझे पाँचों को सही खोजने की कोशिश करता है, लेकिन मैं अपनी रात को बाहर निकालने में कामयाब रहा - अगर नाव नहीं - अंत में।


5
मेरी पसंदीदा कॉमिक स्ट्रिप्स में से एक जिसका मैंने कभी आनंद लिया है।
कोर्तुक

1
मम्म, शांत-सहयोगी। +1
tyblu

मुझे आश्चर्य है कि जेवीएम की तुलना "जावा आईबॉटन्स" के साथ की गई है जो कुछ दशक पहले उपलब्ध थे?
सुपरकैट

@kevin "सी चीट शीट" लिंक काम नहीं कर रहा है! कृपया अद्यतन करें!
चारणसाई

6

Atmel AVR के लिए सबसे लोकप्रिय प्रोग्रामिंग वातावरण Arduino है । Arduino भाषा C ++ का सबसेट है।

Arduino "रेखाचित्र" / कार्यक्रम जावा के समान ही वाक्यात्मक रूप से दिखाई देते हैं। जिस वायरिंग भाषा का अर्थ है Arduino C ++ ( Arduino ), Java ( प्रसंस्करण ) और जावास्क्रिप्ट ( प्रसंस्करणJs ) में कार्यान्वयन है ।

दोनों भाषाएं समान घोषणा शैली, लूप निर्माण और अंकगणितीय संचालकों को अल्गोल 68 में उनके सामान्य वंश के कारण साझा करती हैं। आमतौर पर, Arduino में सभी ऑब्जेक्ट वैश्विक रूप से या स्टैक पर घोषित किए जाते हैं, इसलिए जावा की तरह, सदस्य कार्यों को .ऑपरेटर (जैसे। LED.flash()) के साथ बुलाया जाता है ।

जावा प्रोग्रामर के लिए भाषा बहुत परिचित होगी - लेकिन, महत्वपूर्ण रूप से, Arduino स्केच को मूल कोड में संकलित किया जाता है जो पूर्ण हार्डवेयर एक्सेस के साथ पूरी गति से चलता है। यह आपके माइक्रोकंट्रोलर से सबसे अधिक प्राप्त करने के लिए महत्वपूर्ण है।

यहाँ एपीआई है

Arduino आपको वह सब कुछ प्रदान करता है जो आपको प्राप्त करने की आवश्यकता होती है: कम लागत वाला हार्डवेयर, एक निःशुल्क एकीकृत विकास परिवेश और एक बूटलोडर (ताकि आप USB / सीरियल पर कोड लोड कर सकें)।


3
अधिक सटीक होने के लिए, यह (सबसे अधिक संभावना है) शौकियों के साथ सबसे लोकप्रिय प्रोग्रामिंग वातावरण है, लेकिन जरूरी नहीं कि सभी एवीआर डेवलपर्स पर।
pfyon

2
मुझे लगता है कि Arduino उपयोगकर्ताओं की संख्या से सबसे लोकप्रिय है, लेकिन Arduino फर्मवेयर युक्त उत्पाद इकाइयों की संख्या से नहीं। वहाँ बहुत सारे Arduino उपयोगकर्ता हैं
Toby Jaffey

1
हालांकि "स्केच" संकलित किए गए हैं, सी या असेंबली का उपयोग करके आईओ एक्सेस गति में बहुत सुधार किया जा सकता है।
tyblu

1
C ++ और Java मुझे बहुत अलग लगते हैं। ("अरुडिनो" बस सी ++ है कुछ विचित्र के साथ कुछ तकनीकी बिट्स को छिपाने के लिए संरचना शामिल है।)
निक टी

2
@ जैसन एस "अरुडिनो" स्केच "/ कार्यक्रम जावा के समान दिखाई देते हैं"
टोबी जाफे

4

मैं यह स्पष्ट करना चाहता हूं कि मैंने पहले एक का उपयोग नहीं किया है, लेकिन एक साल पहले जैवलिन कहा जाता था। यह संभव है कि लंबन ने उन्हें या कुछ हासिल कर लिया है, क्योंकि अब जो एकमात्र आता है वह "जेवलिन स्टैम्प" है। कई साल पहले वेलोसिटी सेमीकंडक्टर नाम की एक कंपनी भी हुआ करती थी, जिसने रैबिट सेमीकंडक्टर के कोर मॉड्यूल्स के लिए (माना जाता है) ड्रॉप-इन रिप्लेसमेंट बनाया, और इसमें हार्डवेयर में एक जेवीएम था, लेकिन वह कंपनी स्पष्ट रूप से गायब हो गई है। तुम्हारी खोज के लिए बधाई!


4

सन माइक्रोसिस्टम्स ने सन स्पॉट नामक एक प्लेटफॉर्म बनाया था जो मूल रूप से एक एम्बेडेड जावा प्लेटफॉर्म था। अब जाहिर है कि सन माइक्रोसिस्टम्स आसपास नहीं हैं (ओरेकल ने उन्हें खरीदा है), लेकिन ऐसा लगता है कि आप अभी भी सन स्पॉट्स खरीद सकते हैं - http://www.sunspotworld.com/products/ । मैं एम्बेडेड वातावरण में जावा का उपयोग करने के विचार पर बड़ा नहीं हूं (नौकरी imho के लिए अमूर्त का गलत स्तर), लेकिन यह जावा के लिए सबसे स्वाभाविक एम्बेडेड मंच प्रतीत होगा। इन चीजों पर चश्मा ध्यान दें - वे भारी शुल्क 180MHz / 512k RAM हैं, और वे स्टार्टर किट के लिए $ 400 पर सस्ते नहीं हैं।

इसलिए मैं इस सवाल का जवाब देने वाले अरुडिनो के दूसरे या तीसरे नंबर पर रहूंगा। यदि आपको सहायता की आवश्यकता हो तो वहां एक समुदाय का नरक है। और अगर आपको परिधीय हार्डवेयर की आवश्यकता है, तो Google पर "Arduino शील्ड्स" देखें और चकित हो जाएं - आप 802.11 वायरलेस नेटवर्क पर शील्ड के सही संयोजन के साथ नियंत्रण सर्वो मोटर्स से कुछ भी कर सकते हैं। कुछ अभ्यास समय के बिना C (पॉइंटर क्या कहता है ??) सीखना व्यावहारिक नहीं है, लेकिन आप बिना समय के बगल में Arduino स्केच लिखना शुरू कर सकते हैं ... आप $ 30 और क्लोन (जैसे RBBB) के आसपास "वास्तविक" Arduino प्लेटफॉर्म भी प्राप्त कर सकते हैं। DorkBoard) $ 15 से कम के लिए।


आह हाँ, मैंने देखा कि दो साल पहले मेकर फेयर में! बहुत अच्छा उपकरण।
डेव

SunSpots के लिए हत्यारा सुविधा जावा नहीं है, लेकिन वायरलेस सामान में निर्मित है जो उन्हें एक दूसरे के साथ संवाद करने की अनुमति देता है। अगर आप होम बेस के साथ एक-दूसरे या आसान वायरलेस संचार के बारे में जागरूकता चाहते हैं, तो यह बहुत अच्छा है।
Thorbjørn रेवन एंडरसन

3

लंबन बनाने भाला स्टाम्प , एक कॉम (कम्प्यूटर-ऑन-मॉड्यूल) एक JVM चलाता है।

यह $ 60 है और धधकते ~ 8,500 जावा निर्देशों / सेकंड को अंजाम देता है।

इसके अलावा, पीसीबी गुलाबी है (वास्तव में!)


2

Ajile Systems विभिन्न प्रकार के देशी एम्बेडेड, रीयल टाइम जावा चिप्स और इवेल बोर्ड बनाते हैं।

वे नंगे धातु जावा चलाते हैं। यह बहुत सुखद है।

www.ajile.com चिप्स और इवेल बोर्ड बनाते हैं।

www.systronix.com विभिन्न प्रकार के एम्बेडेड हार्डवेयर बेचते हैं।

मैं ajile से AJ-100 का उपयोग मांगलिक कार्य के लिए करता हूं, वे साथ काम करने के लिए बहुत अच्छे हैं। और नहीं, वे एक avr के रूप में सस्ते नहीं हैं, लेकिन वे एक कम-अंत पेंटियम की तरह डेटा को संसाधित करते हैं।

अजिलेस के चिप्स 1 माइक्रोसेकंड के तहत इंटरप्ट (व्यवधान विलंबता) का जवाब देते हैं।


'एक एम्बेडेड सी प्रणाली पर ऐसा कभी नहीं करते' ??? क्या करें? 1 यूएस विलंबता तीव्र गति? मुश्किल से। मुझे लगता है कि आप 1GHz + DSPs, बहुत सारे ARM और कुछ अन्य लोगों को भूल रहे हैं। बहुत से लोग सिर्फ नंगे धातु सी (कोई ओएस, आदि) के साथ इन के लिए लिखते हैं। मैं आपको अनुदान दूंगा कि इस प्रकार की चीज़ जावा में एम्बेडेड (पूर्ण लिनक्स-स्केल ओएस के बाहर) का उपयोग करने का एक आधा तर्कसंगत तरीका है ... हालांकि सिस्ट्रोनिक्स पर एक त्वरित नज़र डालने के बाद मैं कहूँगा कि यह प्रतीत होता है कि आप भुगतान कर रहे हैं उस छोटी सी सुविधा के लिए अच्छा प्रीमियम। मुझे यकीन है कि एआरएम एम्बेडेड होगा। इसके अलावा, सिस्ट्रोनिक्स से उन परियोजनाओं के बहुत सारे लिंक मर चुके हैं।
डे्रॉन

ओह, और टीआईएनआई बिलकुल गूंगा है। 8051 में ROM में JVM। मैंने आसान ईथरनेट को चाहने पर एक तरह से वापस करने की कोशिश की, और सी में भी एक सामान्य कॉरपोरेट लैन के प्रसारण ट्रैफ़िक से ही बात बन गई। यह एक अच्छा उत्पाद होगा यदि वे इसे पैरलैक्स के बेसिक टिकटों की तरह विपणन करते हैं, लेकिन वे नहीं करते हैं। यह किसी भी गैर-शौक़ीन उद्देश्य के लिए फिट नहीं है।
डे्रॉन

1
ये चिप्स कई सौ मेगाहर्ट्ज़ पर चल रहे हैं। इन उपकरणों की तुलना में 100 गुना धीमी गति से चलने वाले प्रोसेसर पर C में प्रोग्राम किए जाने पर 1uS विलंबता संभव है। आप बराबर प्रोसेसर के साथ कुछ सुंदर शांत चीजें (जैसे कि आईपैड और ड्रॉयड फोन) कर सकते हैं, लेकिन इस सवाल में 8-बिट AVR के विकल्प के रूप में पोस्ट करना शायद ही एक सेब से सेब की तुलना है।
केविन वर्मेयर

@reemrevnivek: ओपी को जावा को देखते हुए, मैं अजाइल भाग को उचित मानता हूं कि यह एम्बेडेड जावा (पूर्ण लिनक्स ओएस या कुछ के बाहर) को चलाने के लिए एकमात्र उचित तरीकों में से एक है। अगर पिछले पैराग्राफ और TSTIK बिट्स नहीं थे, तो मैं भी इसे बढ़ा दूंगा।
डे्रन

2

मेरा निजी अनुभव यह है कि AVR के साथ प्रोग्राम और आरंभ करने के लिए C कोड बहुत आसान है, मैं जावा करने के कई वर्षों से भी आता हूं, और arduino स्केच का उपयोग करने के लगभग 2 महीने बाद मैंने पर्यावरण को गिरा दिया और avr-gcc, साइटों के लिए चला गया आम समस्याओं की तरह उत्तर ढूंढना आसान है। (मैं अभी भी अपने भरोसेमंद Arduino Duemillenove पर सभी करता हूं)

संकलित और "परिनियोजित" करने के लिए ग्रहण का उपयोग करना, यानी चिप पर लिखना, यह भी अच्छा है क्योंकि मुझे किसी अन्य आईडीई से निपटने की आवश्यकता नहीं है

मुझे लगता है कि वास्तव में अपने सिर को रजिस्टरों, 16 बिट रजिस्टरों के आसपास प्राप्त करना और उन्हें प्रोग्रामिंग भाषा की तुलना में उचित क्रम, इंटरप्ट, टाइमर, हार्डवेयर पीडब्लूएम में पढ़ना कठिन है।


1

जबकि मैं आम तौर पर "सी सीखता हूं और समझता हूं कि प्रोसेसर वास्तव में क्या करते हैं" शिविर जहां एम्बेडेड काम का संबंध है, यह इंगित करने के लायक है कि एक छोटे हाथ की चिप एक AVR की तुलना में अधिक महंगी नहीं है, और लगभग प्रशंसनीय है एक jmm के शीर्ष पर सरल कार्यों को संभालने की स्थिति।


1

NanoVM एक जावा वर्चुअल मशीन है जिसे 8-बिट AVR माइक्रोकंट्रोलर पर चलने के लिए डिज़ाइन किया गया है।

(मुखपृष्ठ से)

यह एक पूर्ण विशेषताओं वाला जावा वीएम नहीं है और यह कभी नहीं होगा। यह हमेशा जावा भाषा के छोटे उपसमूह और मानक जावा पुस्तकालयों और कुछ एप्लिकेशन विशिष्ट विधियों तक सीमित रहेगा। इसके अलावा, यह प्रोग्रामिंग माइक्रोकंट्रोलर के मानक तरीके के रूप में सी को बदलने के लिए नहीं है। यह कम लचीला है और इसमें C या कोडांतरक कार्यक्रमों की तुलना में कम प्रदर्शन है।

NanoVM एक माइक्रोकंट्रोलर आधारित डिवाइस के लिए एक सीमित लेकिन नियंत्रणीय प्रोग्रामिंग इंटरफ़ेस प्रदान करने का एक तरीका है। अधिकांश अधिकांश हार्डवेयर विशिष्ट कोड NanoVM का हिस्सा होने के साथ, उपयोगकर्ता स्वयं एप्लिकेशन पर ध्यान केंद्रित कर सकता है। यदि किसी उपयोगकर्ता को NanoVM से लैस एक उपकरण दिया जाता है, तो उसे स्वयं हार्डवेयर के बारे में सोचने की आवश्यकता नहीं है। इसके अलावा, उन्हें किसी भी लक्ष्य विशिष्ट संकलक या इस तरह की आवश्यकता नहीं है। उसे केवल एक मानक जावा कंपाइलर और नैनो वीएमटूल की आवश्यकता होती है, जिसे स्वयं जावा में लिखा जाता है। इस प्रकार, संपूर्ण विकास श्रृंखला किसी भी डिवाइस पर काम करती है जिसमें जावा कंपाइलर होता है और जावा कोड चला सकता है। NanoVM प्रदान करने वाले हार्डवेयर एब्स्ट्रैक्शन के साथ, उपयोगकर्ता को लक्ष्य पर आधारित माइक्रोकंट्रोलर प्रकार के बारे में भी परवाह नहीं है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.