ไมโครคอนโทรลเลอร์พร้อม Java API


10

ทีมฮาร์ดแวร์ของฉันวางแผนที่จะใช้ไมโครคอนโทรลเลอร์ Atmel AVR 8 บิตสำหรับโครงการในอนาคต

เท่าที่ฉันรู้มันจะต้องตั้งโปรแกรมใน C. ฉันได้พบJVMสำหรับ AVR แม้ว่ามันจะมีข้อ จำกัด มากกว่าไลบรารี่ C ดั้งเดิมจาก Atmel

คุณช่วยแนะนำไมโครคอนโทรลเลอร์ 8 บิตที่สนับสนุน Java ได้ไหม

PS ฉันไม่รู้ C และฉันไม่มีประสบการณ์ในการเขียนโปรแกรมไมโครโปรเซสเซอร์


28
สมมติว่ามีใครบางคนกำลังขายกระโปรงลอยน้ำขนาดใหญ่และมีเสายาว ๆ ที่พวกเขาบอกว่าคุณสามารถใช้กับรถของคุณเพื่อตกปลาในทะเลสาบ หลังจากที่ต้องดิ้นรนเป็นเวลาสามวันคุณจะได้เข้าไปในทะเลสาบประมาณ 15 ฟุตก่อนที่รถของคุณจะพลิกและจม คุณพ่อกำลังจะโกรธ คุณผ่านร้านขายเรือท้องถิ่นด้วยเรือแคนูที่สวยงาม เรือแคนูคือคอมไพเลอร์ C ของไมโครและรถที่ลอยด้วยไม้คือ Java บนไมโครคอนโทรลเลอร์ 8 บิต โชคดีที่สิ่งนี้ไม่ได้เกิดขึ้น ... คุณกำลังขอให้เราหาสถานที่ล่องลอย ดังนั้นในฐานะพ่อของคุณฉันขอพูดว่า "คุณกำลังคิดอะไรอยู่!
darron

6
ฉันมีปัญหาในการมองเห็นภาพกระโปรงรถที่ลอยด้วยไม้ คุณมีรูปบ้างไหม?
endolith

8
@darron - ไม่ควรเป็นbig_floating_skirtวัตถุที่ใช้boatอินเทอร์เฟซในorg.buoyantแพคเกจและpoleวัตถุที่มีรูปแบบการสืบทอดแบบแปลก ๆjava.netที่ฉันจำไม่ได้ตอนนี้ (แต่อธิบายไว้อย่างชัดเจนใน UML)?
Kevin Vermeer

2
@sterz: ฉันคิดว่าไม่มีพื้นหลังไมโครโปรเซสเซอร์มันเป็นที่เข้าใจได้อย่างสมบูรณ์แบบว่าคุณอาจไม่ได้รู้ว่า Java ใน 8-bit micro นั้นเป็นอย่างไร ขออภัยถ้าความคิดเห็นแรกของฉันฟังรุนแรง ... เรียบง่าย "อย่าทำอย่างนั้น" ดูเหมือนอ่อนแอเกินไป
darron

1
@darron: ขอบคุณสำหรับ "นกยิงด้วยปืนใหญ่" คล้ายคลึง
sterz

คำตอบ:


32

หากคุณไม่มีประสบการณ์ในด้านการเขียนโปรแกรมไมโครโปรเซสเซอร์ / ไมโครคอนโทรลเลอร์คุณควรเรียนรู้ C ก่อนเพื่อที่คุณจะได้เข้าใจว่าเมื่อใดและเพราะเหตุใด Java จึงเป็นตัวเลือกที่แย่สำหรับโครงการไมโครคอนโทรลเลอร์ส่วนใหญ่

คุณอ่านข้อ จำกัด ของ JVM ที่คุณเชื่อมโยงอยู่หรือไม่? มันรวมถึงปัญหาต่อไปนี้:

  • หน่วยความจำโปรแกรมน้อย 512 ไบต์ (ไม่ใช่ KB และไม่ใช่ MB แน่นอน)
  • RAM ขนาดเล็กเพียง 768 ไบต์ (ซึ่งตัวแปรของคุณไปคุณ จำกัด อักขระได้ไม่เกิน 768 ตัวอักษรโดยข้อ จำกัด นี้)
  • ประมาณ 20k Java opcodes ต่อวินาทีบน 8 Mhz AVR
  • รวมเฉพาะ java.lang.Object, java.lang.System, java.io.PrintStream, java.lang.StringBuffer, คลาสควบคุม JVM และคลาส IO ดั้งเดิม คุณจะไม่สามารถนำเข้า java.util. *; และรับคลาสทั้งหมดที่ไม่อยู่ในรายการนี้

หากคุณไม่คุ้นเคยกับความหมายของข้อ จำกัด เหล่านี้ตรวจสอบให้แน่ใจว่าคุณมีแผนขหากปรากฏว่าคุณไม่สามารถทำโครงการกับ Java ได้จริงเนื่องจากข้อ จำกัด ด้านพื้นที่และความเร็ว

หากคุณยังต้องการไปกับ Java อาจเป็นเพราะคุณคาดหวังว่าอุปกรณ์จะได้รับการตั้งโปรแกรมโดยผู้คนจำนวนมากที่รู้จัก Java เพียงอย่างเดียวฉันขอแนะนำให้ใช้ฮาร์ดแวร์ที่มีขนาดใหญ่กว่า ดูหน้านี้จาก Oracleเพื่อดูรายละเอียดที่จะยิงเพื่อใช้งาน JVM ในตัวในคำถามที่พบบ่อยของการสนทนาพวกเขาแนะนำ RAM ขั้นต่ำ 32MB และ 32MB ของ Flash นั่นคือประมาณ 32,000 เท่าของ RAM และ 1,0000 เท่าของแฟลช AVR ที่คุณกำลังดู หน้าJava Embedded Introของ Oracle มีรายละเอียดเพิ่มเติมเกี่ยวกับข้อ จำกัด ของ JVM น้ำเสียงของพวกเขาคืออย่างที่คุณคิดว่าเป็นมิตรกับ Java มากกว่าของฉัน โปรดทราบว่าฮาร์ดแวร์ประเภทนี้ออกแบบได้ยากกว่า AVR 8 บิต

ฉันเป็นนักเรียนวิศวกรรมคอมพิวเตอร์ที่มีวิทยาการคอมพิวเตอร์เล็กน้อย แผนก CS ของมหาวิทยาลัยของฉันเมา Java Kool-aid ดังนั้นนักเรียนในโปรแกรมวิศวกรรมจำนวนมากรู้เพียง Java (ซึ่งเป็นเรื่องเศร้าสำหรับโปรแกรมเมอร์อย่างน้อยเรียนรู้ Python หรือ C ++ บางอย่างถ้าคุณไม่ ต้องการเรียนรู้ C ... ) ดังนั้นหนึ่งในอาจารย์ของฉันจึงตีพิมพ์C Cheat Sheetสำหรับนักเรียนที่มีประสบการณ์เกี่ยวกับ Java เป็นเวลาหนึ่งปี เพียง 75 หน้าเท่านั้น ฉันแนะนำให้คุณอ่านหรืออ่านอย่างรอบคอบก่อนตัดสินใจ ในความคิดของฉัน C เป็นภาษาที่มีประสิทธิภาพทนทานและเป็นมืออาชีพมากที่สุดในการพัฒนาโครงการฝังตัว

ทางเลือกอีกทางที่ต้องพิจารณาคือเฟรมเวิร์กArduino มันใช้ภาษาWiringในเวอร์ชั่นที่แปลแล้วซึ่งคล้ายกับ C ++ ที่ไม่มีวัตถุหรือส่วนหัว มันสามารถทำงานบนชิป AVR หลายตัวได้แน่นอนไม่ได้ จำกัด อยู่ที่ฮาร์ดแวร์ของพวกเขา มันจะช่วยให้คุณเรียนรู้ได้ง่ายกว่าการกระโดดเข้าไปใน C โดยตรง

โดยสรุป
XKCD Golden Hammer
ข้อความ Alt: เอาฉันห้าพยายามหาหนึ่งที่เหมาะสม แต่ฉันพยายามกู้คืนของเราคืน - ถ้าไม่เรือ - ในท้ายที่สุด


5
หนึ่งในการ์ตูนเรื่องโปรดของฉันที่ฉันเคยสนุก
Kortuk

1
อืมมมผู้ช่วยเท่ห์ +1
tyblu

ฉันสงสัยว่า JVM นั้นเปรียบเทียบกับ "Java iButtons" ที่มีให้เมื่อสองสามทศวรรษที่ผ่านมาได้อย่างไร
supercat

@kevin ลิงก์ "C Cheat sheet" ไม่ทำงาน! โปรดอัปเดต!
Charansai

6

สภาพแวดล้อมการเขียนโปรแกรมที่นิยมมากที่สุดสำหรับ Atmel AVR เป็นArduino ภาษา Arduino เป็นเซตย่อยของ C ++

Arduino "สเก็ตช์" / โปรแกรมปรากฏขึ้นในลักษณะคล้ายกันมากกับ Java ภาษาเดินสายซึ่งบุคลากร Arduino จากมีการใช้งานใน C ++ ( Arduino ), Java ( ประมวลผล ) และ Javascript ( processing.js )

ทั้งสองภาษามีสไตล์การประกาศร่วมกันสร้างแบบวนซ้ำและตัวดำเนินการทางคณิตศาสตร์เนื่องจากบรรพบุรุษร่วมกันใน Algol68 โดยปกติแล้ววัตถุทั้งหมดใน Arduino จะถูกประกาศไปทั่วโลกหรือบนสแต็กดังนั้นเช่น Java ฟังก์ชันสมาชิกจะถูกเรียกด้วย.โอเปอเรเตอร์ (เช่นLED.flash())

ภาษาจะคุ้นเคยกับโปรแกรมเมอร์ Java มาก แต่ที่สำคัญคือร่างสเกตช์ Arduino ถูกรวบรวมเป็นโค้ดเนทีฟซึ่งทำงานด้วยความเร็วสูงสุดพร้อมการเข้าถึงฮาร์ดแวร์เต็มรูปแบบ นี่เป็นสิ่งสำคัญสำหรับการได้รับประโยชน์สูงสุดจากไมโครคอนโทรลเลอร์ของคุณ

นี่คือAPI

Arduino จัดเตรียมทุกสิ่งที่คุณต้องการ: ฮาร์ดแวร์ราคาประหยัดสภาพแวดล้อมการพัฒนาแบบรวมและตัวบูตฟรี (เพื่อให้คุณสามารถโหลดรหัสผ่าน USB / ซีเรียล)


3
จะมีความแม่นยำมากขึ้นเป็นไปได้มากที่สุด (เป็นไปได้) สภาพแวดล้อมการเขียนโปรแกรมที่นิยมมากที่สุดกับมือสมัครเล่น แต่ไม่จำเป็นต้องมากกว่านักพัฒนา AVR ทั้งหมด
pfyon

2
ฉันขอยืนยันว่า Arduino นั้นได้รับความนิยมสูงสุดตามจำนวนผู้ใช้ แต่ไม่ใช่ตามจำนวนของผลิตภัณฑ์ที่จัดส่งที่มีเฟิร์มแวร์ Arduino มีผู้ใช้ Arduino จำนวนมากอยู่ที่นั่น
Toby Jaffey

1
แม้ว่าคอมไพล์ "สเก็ตช์" จะสามารถเพิ่มความเร็วการเข้าถึง IO ได้อย่างมากโดยใช้ C หรือชุดประกอบ
tyblu

1
C ++ และ Java ดูแตกต่างจากฉันมาก ("Arduino" เป็นเพียง C ++ ที่มีโครงสร้างที่แปลกประหลาดบางอย่างเพื่อซ่อนบิตทางเทคนิคบางส่วน)
Nick T

2
@Jason S "Arduino" sketches "/ โปรแกรมปรากฏคล้ายกับ Java"
Toby Jaffey

4

ฉันต้องการทำให้ชัดเจนว่าฉันไม่ได้ใช้มาก่อน แต่เคยมีคนหนึ่งชื่อ Javelin เป็นไปได้ว่า Parallax ได้รับมาหรือบางสิ่งบางอย่างเพราะตอนนี้สิ่งเดียวที่เกิดขึ้นคือ "Javelin Stamp" เมื่อหลายปีก่อนเคยเป็น บริษัท ที่ชื่อว่า Velocity Semiconductor ซึ่งทำหน้าที่แทนโมดูลหลักของแรบบิทเซมิคอนดักเตอร์และมี JVM ในฮาร์ดแวร์ แต่ บริษัท ดังกล่าวก็หายไปอย่างเห็นได้ชัด ขอให้โชคดีในการค้นหาของคุณ!


4

Sun Microsystems ใช้ในการสร้างแพลตฟอร์มที่เรียกว่า Sun Spot ซึ่งเป็นแพลตฟอร์มจาวาแบบฝังตัวโดยทั่วไป ตอนนี้เห็นได้ชัด Sun Microsystems ไม่รอบอีกต่อไป (Oracle ซื้อพวกเขา) แต่ดูเหมือนว่าคุณยังคงสามารถซื้อจุดที่ดวงอาทิตย์ - http://www.sunspotworld.com/products/ ฉันไม่ได้ใหญ่ในความคิดของการใช้ Java ในสภาพแวดล้อมที่ฝังตัว (ระดับที่ไม่ถูกต้องของ abstraction สำหรับงาน imho) แต่ดูเหมือนจะเป็นแพลตฟอร์มฝังตัวที่เป็นธรรมชาติที่สุดสำหรับ Java จดรายละเอียดเกี่ยวกับสิ่งเหล่านี้ - พวกมันเป็นงานหนัก 180MHz / 512k RAM และพวกมันไม่ถูกที่ 400 เหรียญสหรัฐสำหรับชุดเริ่มต้น

ดังนั้นฉันจะเป็นหนึ่งหรือสองในผู้ตอบโต้ผู้สนับสนุนของ Arduino สำหรับคำถามนี้ ชุมชนแห่งนี้มีนรกแห่งหนึ่งให้การสนับสนุนหากคุณต้องการความช่วยเหลือ และหากคุณต้องการอุปกรณ์ต่อพ่วงค้นหา "Arduino Shields" บน google และประหลาดใจ - คุณสามารถทำอะไรก็ได้ตั้งแต่การควบคุมเซอร์โวมอเตอร์ไปจนถึงเครือข่ายไร้สาย 802.11 พร้อมการรวมกันของโล่ มันไม่มีประโยชน์ที่จะเรียนรู้ C (ตัวชี้บอกว่าอะไร!?) โดยไม่มีเวลาฝึกฝน แต่คุณสามารถเริ่มเขียนภาพร่าง Arduino ในเวลาไม่นาน ... คุณสามารถได้รับแพลตฟอร์ม Arduino "ของจริง" ประมาณ $ 30 และโคลน (เช่น RBBB หรือ DorkBoard) ราคาต่ำกว่า $ 15


อาใช่ฉันเห็นว่าที่ Maker Faire เมื่อสองปีที่แล้ว! อุปกรณ์สวย ๆ
เดฟ

คุณสมบัตินักฆ่าสำหรับ SunSpots ไม่ใช่ Java แต่เป็นอุปกรณ์ไร้สายในตัวที่ช่วยให้พวกเขาสามารถสื่อสารระหว่างกันได้ หากคุณต้องการการรับรู้ของกันและกันหรือการสื่อสารไร้สายง่าย ๆ กับฐานบ้านนั่นเป็นสิ่งที่ดีมาก
Thorbjørn Ravn Andersen

3

Parallax จัดทำJavelin Stampซึ่งเป็น CoM (Computer-on-Module) ที่เรียกใช้ JVM

มันคือ $ 60 และประหารชีวิตคำสั่ง Java ~ 8,500 คำสั่ง / วินาที

นอกจากนี้ PCB ก็เป็นสีชมพู (จริง ๆ !)


2

ระบบ Ajile สร้างจาวาชิปแบบฝังตัวแบบเรียลไทม์และบอร์ด eval ที่หลากหลาย

พวกเขาเรียกใช้จาวาโลหะเปลือย เป็นที่พอใจมาก

www.ajile.com สร้างชิปและกระดานทดลอง

www.systronix.com ขายจาวาฮาร์ดแวร์ฝังตัวที่หลากหลาย

ฉันใช้ AJ-100 จาก ajile เพื่อเรียกร้องงานพวกเขาดีมากที่จะทำงานด้วย และไม่พวกมันไม่ถูกเหมือน avr แต่ประมวลผลข้อมูลเช่น pentium ระดับล่าง

ชิปของ Ajiles ตอบสนองต่ออินเทอร์รัปต์


'ไม่เคยทำเช่นนั้นในระบบ C ที่ฝังตัว' ??? ทำอะไร? 1 ความล่าช้าแฝงหรือไม่ ความเร็วสูง? แทบจะไม่ ฉันคิดว่าคุณลืม 1GHz + DSP จำนวนมาก ARMs และอื่น ๆ อีกไม่กี่คน ผู้คนมากมายเขียนสิ่งเหล่านี้ด้วยโลหะเปลือย C (ไม่มีระบบปฏิบัติการ ฯลฯ ) ฉันจะให้คุณว่าสิ่งประเภทนี้เป็นวิธีที่มีเหตุผลครึ่งทางที่จะใช้ Java ในการฝังตัว (นอกระบบปฏิบัติการ Linux เต็มรูปแบบ) ... แม้ว่าหลังจากที่ได้ดูอย่างรวดเร็วที่ Systronix ฉันบอกว่ามันดูเหมือนว่าคุณกำลังจ่าย พรีเมี่ยมที่ดีสำหรับความสะดวกสบายที่น้อย ฉันจะไปฝัง ARM แน่นอน นอกจากนี้ลิงก์จำนวนมากไปยังโครงการเหล่านั้นนอก Systronix ก็ตายแล้ว
darron

อ๋อและ TINI ก็โง่ไปหมด JVM ใน ROM บน 8051 ฉันพยายามอย่างบ้าคลั่งทางเดียวเมื่อฉันต้องการอีเธอร์เน็ตที่ใช้งานง่ายและแม้กระทั่งใน C สิ่งนั้นก็ล้นมือไปตามปริมาณการออกอากาศของ LAN องค์กรปกติ มันจะเป็นผลิตภัณฑ์ที่ดีถ้าพวกเขาทำการตลาดเหมือนกับแสตมป์พื้นฐานของ Parallax แต่พวกเขาทำไม่ได้ มันไม่เหมาะสำหรับวัตถุประสงค์ที่ไม่ใช่งานอดิเรก
darron

1
ชิปเหล่านี้ทำงานที่หลายร้อยเมกะเฮิร์ตซ์ 1uS latency เป็นไปได้เมื่อตั้งโปรแกรมใน C บนโปรเซสเซอร์ที่ทำงานช้ากว่าอุปกรณ์เหล่านี้ 100 เท่า คุณสามารถทำสิ่งที่น่าสนใจ (เช่น iPhone และโทรศัพท์ Droid) ด้วยตัวประมวลผลที่เทียบเท่ากัน แต่การโพสต์สิ่งนี้เป็นทางเลือกของ AVR แบบ 8 บิตในคำถามนี้แทบจะเป็นการเปรียบเทียบแอปเปิ้ลกับแอปเปิ้ล
Kevin Vermeer

@reemrevnivek: เนื่องจาก OP ต้องการ Java ฉันจึงคิดว่าส่วน Ajile นั้นเหมาะสมที่จะเป็นหนึ่งในวิธีที่สมเหตุสมผลในการใช้งานจาวาแบบฝังตัว (นอก Linux OS เต็มหรือบางอย่าง) หากย่อหน้าสุดท้ายและบิต TSTIK ไม่มีอยู่ที่นั่นฉันก็จะโหวตขึ้น
darron

2

ประสบการณ์ส่วนตัวของฉันคือรหัส C ในการเขียนโปรแกรมและเริ่มต้นใช้งาน AVR นั้นค่อนข้างง่ายฉันยังมาจากหลายปีของการทำจาวาและหลังจากนั้นประมาณ 2 เดือนในการใช้ภาพร่าง arduino ฉันทิ้งสภาพแวดล้อมและไปที่เว็บไซต์ avr-gcc เช่น avrfreaks ทำให้ง่ายต่อการค้นหาคำตอบสำหรับปัญหาทั่วไป (ฉันยังคงทำทุกอย่างกับ Arduino Duemillenove ที่ไว้ใจได้ของฉัน)

การใช้ eclipse เพื่อคอมไพล์และ "ปรับใช้" เช่นเขียนไปยังชิปก็ดีเพราะฉันไม่ต้องจัดการกับ IDE ตัวอื่น

ฉันคิดว่าเป็นการยากที่จะทำให้คุณจดจ่อกับการลงทะเบียน 16 บิทเรจิสเตอร์และอ่านตามลำดับที่เหมาะสมขัดจังหวะตัวจับเวลาตัวประมวลผลฮาร์ดแวร์ PWM มากกว่าภาษาการเขียนโปรแกรมเอง


1

ในขณะที่ฉันมักจะเป็น "เรียนรู้ C และทำความเข้าใจกับสิ่งที่โปรเซสเซอร์ทำจริง" ค่ายที่งานฝังตัวเป็นห่วงมันก็คุ้มค่าที่ชี้ให้เห็นว่าชิปแขนขนาดเล็กนั้นไม่แพงกว่า AVR มากและอยู่ในสภาพที่น่าเชื่อถือ ตำแหน่งเพื่อจัดการงานง่าย ๆ ด้านบนของ jvm


1

NanoVMเป็น Java Virtual Machine ที่ออกแบบมาเพื่อทำงานบนไมโครคอนโทรลเลอร์ AVR แบบ 8 บิต

(จากหน้าแรก)

ไม่ใช่ Java VM ที่มีคุณสมบัติครบถ้วนและจะไม่มีวันเป็นเช่นนั้น มันจะถูก จำกัด เพียงชุดย่อยเล็ก ๆ ของภาษาจาวาและไลบรารีจาวามาตรฐานและวิธีการเฉพาะแอปพลิเคชันบางอย่าง นอกจากนี้ไม่ได้หมายถึงการแทนที่ C เป็นวิธีมาตรฐานของการเขียนโปรแกรมไมโครคอนโทรลเลอร์ มีความยืดหยุ่นน้อยกว่าและมีประสิทธิภาพต่ำกว่า C หรือโปรแกรมแอสเซมเบลอร์

NanoVM เป็นวิธีการจัดหาอินเตอร์เฟสการเขียนโปรแกรมที่ จำกัด แต่สามารถควบคุมได้ให้กับอุปกรณ์ที่ใช้ไมโครคอนโทรลเลอร์ ด้วยรหัสเฉพาะฮาร์ดแวร์ส่วนใหญ่ที่เป็นส่วนหนึ่งของ NanoVM เองผู้ใช้สามารถมุ่งเน้นไปที่แอปพลิเคชันเอง หากผู้ใช้ได้รับอุปกรณ์ที่มี NanoVM เขาไม่จำเป็นต้องคิดถึงฮาร์ดแวร์เอง นอกจากนี้เขาไม่ต้องการคอมไพเลอร์เฉพาะเป้าหมายหรือสิ่งที่ชอบ สิ่งที่เขาต้องการก็คือคอมไพเลอร์ java มาตรฐานและ NanoVMTool ซึ่งตัวมันเองเขียนด้วยภาษาจาวา ดังนั้นห่วงโซ่การพัฒนาทั้งหมดทำงานบนอุปกรณ์ใด ๆ ที่มีคอมไพเลอร์ java และสามารถเรียกใช้โค้ดจาวา ด้วยสิ่งที่เป็นนามธรรมที่ NanoVM มอบให้ผู้ใช้ไม่จำเป็นต้องสนใจเกี่ยวกับประเภทของไมโครคอนโทรลเลอร์ที่เป็นเป้าหมาย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.