Arduino / การประมวลผลเมื่อเทียบกับ. NET Micro Framework ภาษาที่ดีที่สุด? ฮาร์ดแวร์ที่ดีที่สุด?


10

ฉันยุ่งกับ Arduino มาระยะหนึ่งแล้วและฉันอยู่ในขั้นตอนการย้ายจากระดับเริ่มต้นไปจนถึงระดับกลาง ฉันต้องการความคิดเห็นเกี่ยวกับ. NET Micro Frameworkในแง่ของประสิทธิภาพและความพร้อมใช้งานของฮาร์ดแวร์

ฉันเป็นโปรแกรมเมอร์. NET แต่ฉันพบว่าการประมวลผลสำหรับ Arduino นั้นไม่ค่อยมีแรงเสียดทานเลย ... มันใกล้เคียงกับ C # มากแล้วสิ่งที่ฉันต้องการจะทำไม่จำเป็นต้องเดินทางไปที่เอกสาร

อย่างไรก็ตามไหนดีกว่ากัน?


ดูคำถามนี้ (ที่เกี่ยวข้องกับ C ++): chiphacker.com/questions/3027/…
Kevin Vermeer

คำตอบ:


17

หากคุณต้องการย้ายจากระดับเริ่มต้นไปยังระดับกลางภาษาที่คุณต้องเรียนรู้คือ C แม้ว่าคุณจะใช้การถกเถียงกันในการล็อค Windows ทั้งหมด แต่คุณต้องมีความสามารถในการเขียนโปรแกรมใน C มากก่อนที่คุณจะทำงานที่มีคุณภาพ ไมโครคอนโทรลเลอร์ในภาษาระดับสูงกว่าเช่น. NET Micro หรือ C ++

ระบบสมองกลฝังตัวที่มีองค์ประกอบของปิรามิดของความรู้และคุณต้องการจริงๆจะรู้ว่าอย่างน้อยบางส่วนของแต่ละขั้นตอนจะเป็นนักออกแบบที่ดี:
^ รหัสผู้ใช้
^^ ระบบปฏิบัติการ
^^^ ภาษา C
^^^^ ภาษา Assembly
^^^ ^^ สถาปัตยกรรมไมโครคอนโทรลเลอร์
^^^^^^ การออกแบบดิจิทัล
^^^^^^^ อุปกรณ์กึ่งตัวนำ
^^^^^^^^^ อุปกรณ์อิเล็กทรอนิกส์ขั้นพื้นฐาน (กฎของโอห์ม)

เฟรมเวิร์ก Arduino มอบตะขอที่สะดวกสบายสำหรับมือสมัครเล่นในปิรามิดที่อยู่ระหว่างภาษา C และระบบปฏิบัติการ

เฉพาะสำหรับคำถาม. NET Micro Framework ของคุณแล้วAboutพูดว่า:

อุปกรณ์. NET Micro Framework ทั่วไปมีโปรเซสเซอร์ 32 บิตที่ไม่มีหน่วยจัดการหน่วยความจำภายนอก (MMU) และอาจมีหน่วยความจำเข้าถึงโดยสุ่ม (RAM) 64K เพียงเล็กน้อย

แผ่นพับนั้นแตกต่างจากWindows Mobile , Windows Embedded , CE 6.0และ. NET Compact Framework และเปรียบเทียบกับ Linux, Real-Time, Java และระบบปฏิบัติการที่กำหนดเอง นี่เป็นการกระโดดครั้งใหญ่จากเฟรมเวิร์ก Arduino / Processing

Arduino ของคุณมีโปรเซสเซอร์ 8 บิตพร้อม RAM 1k นอกเหนือจากการสูญเสียพลังงาน 8 บิตเทียบกับ 32 บิตแล้วมันยังทำงานได้เร็วกว่าตัวประมวลผลส่วนใหญ่ที่แสดงไว้น้อยกว่าครึ่ง ในขณะที่ฉันจะไม่กีดกันคุณจากการย้ายไปยังตัวประมวลผลแบบ 32 บิตฉันขอแนะนำให้เป็นการย้ายระดับกลางถึงระดับสูง

เป็นเรื่องง่ายมากที่จะใช้เวลาและหน่วยความจำจำนวนมากด้วยสองสามบรรทัดใน C # หรือ C ++ ซึ่งไม่มีนัยสำคัญในโปรเซสเซอร์แบบ dual-core ที่ทำงานที่สองกิกะเฮิร์ตซ์ที่มีกิกะไบต์กิกะไบต์ แต่สามารถสร้างความแตกต่างอย่างมากบนอุปกรณ์ฝังตัว . จนกว่าคุณจะเก่งภาษาแอสเซมบลีและ / หรือ C หรือกูรูใน C # หรือ C ++ ฉันไม่แนะนำให้ใช้สำหรับการเขียนโปรแกรมแบบฝัง

ดังนั้นฉันจะเริ่มต้นด้วยการดาวน์โหลดWinAVRและโปรแกรมประจำ LED กะพริบง่ายใน C. หาก C สับสนโดยสิ้นเชิงให้คุณทำโค้ดเนทีฟ ("Hello World") บนพีซีของคุณจากนั้นย้ายไปที่ ไมโครคอนโทรลเลอร์ แต่ก็ไม่จำเป็น จากนั้นเลื่อนไปที่การสื่อสารบน UART เริ่มใช้การขัดจังหวะและทำซ้ำโครงการ Arduino ของคุณใน C จากนั้นหา (หรือสร้าง!) บอร์ดพัฒนาใหม่ที่มีไมโครคอนโทรลเลอร์ที่แตกต่างกันอาจเป็นPICหรือARMและบางโครงการ สารพัดอย่างเช่นหน้าจอ LCD, อีเธอร์เน็ต, การ์ด SDหรืออะไรก็ตามที่คุณต้องการและลองเรียนรู้ระบบใหม่ เมื่อคุณไปถึงที่นั่นคุณจะรู้ดีว่าคุณต้องการไปที่ไหนดี

เราจะอยู่ที่นี่เพื่อช่วยเหลือคุณตลอดทาง!


6
ฉันไม่เห็นด้วยว่าความรู้เกี่ยวกับแอสเซมเบลอร์และซีเป็นสิ่งจำเป็น มันเป็นสิ่งสำคัญที่จะเข้าใจวิธีการทำงานไมโครคอนโทรลเลอร์ การเรียนรู้แอสเซมเบลอร์ (c, น้อยกว่านั้น) เป็นเส้นทางเดียวในการทำความเข้าใจนี้ แต่มันไม่ใช่เส้นทางเดียว
Connor Wolf

4
@ ชื่อปลอม: แน่นอนนั่นคือเหตุผลที่ฉันพูดว่า "อย่างน้อยบางอย่าง" การติดตามโปรแกรมอย่างง่ายจาก C ถึงการประกอบเป็น hex และการทำความเข้าใจแต่ละขั้นตอนจะทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้น คุณสามารถปล่อยให้เวทมนตร์ทำสิ่งนั้นได้ในภายหลังหากคุณต้องการ แต่คุณต้องเข้าใจความสามารถของเครื่องจักรที่คุณทำงานด้วย
Kevin Vermeer

อ๊ะขอโทษ พลาด "บางส่วน"
Connor Wolf

7

ฉันไม่มีประสบการณ์กับ ".NET Micro Framework" แต่ฉันสงสัยอย่างมากเกี่ยวกับการใช้งานเครื่องเสมือนบนแพลตฟอร์มแบบฝังตัวที่ใช้พลังงานต่ำ มันดูเหมือนว่าจะทำให้ฉันเสียเปล่า คุณต้องการตัวประมวลผลพลังงานมากขึ้นหน่วยความจำมากขึ้นใช้พลังงานมากขึ้นเพื่อให้ได้ผลเช่นเดียวกับการใช้แพลตฟอร์มเฉพาะเพิ่มเติมที่รวบรวมลงในรหัสเครื่องพื้นเมือง อาจเป็นเพราะเหตุใดโทรศัพท์ Android 528MHz ของฉันที่ใช้งานเครื่องเสมือน (คล้ายกับ JVM) มักจะรู้สึกช้ากว่า Palm Treo 312MHz ที่ผ่านมาหลายปีก่อนซึ่งรันแอปพลิเคชันที่รวบรวมไว้สำหรับรหัสเครื่องท้องถิ่น

จากการมองอย่างรวดเร็ว. NET MF ต้องใช้หน่วยประมวลผล ARM ซึ่งเป็นขั้นตอนข้างต้นในด้านพลังงานและความซับซ้อนจากชิป ATMega 8 บิตที่ใช้ใน Arduino

ข้อเสนอแนะของฉันคือถ้า Arduino ทำในสิ่งที่คุณต้องการ ถ้าไม่คุณสามารถดูชิพ ATMega หรือ ATXmega ที่ทรงพลังกว่าและเหนือกว่านั้นใช้ได้กับ ARM โดยตรงใน C / C ++ โดยไม่ต้องมีเลเยอร์การแปล. NET เพิ่มเติมด้านบน


2
ฉันเห็นด้วยอย่างเต็มที่ แต่ฉันไม่คิดว่านั่นคือสิ่งที่เกิดขึ้น ฉันคิดว่า IL ได้รับการแปลเป็นรหัสเฉพาะของเครื่องเมื่อมีการปรับใช้ นี่คือลิงค์ที่เกิดขึ้นภายใต้สมมติฐานที่ว่า: microsoft.com/downloads/ … ฉันมีความสุขมากกับ Arduino จนถึงตอนนี้ ... ฉันคิดว่าสิ่งเดียวที่น่าดึงดูดใจฉันก็คือฉันได้พบการเลือกโล่ที่น่าประทับใจใน tinyclr.com .. . ฉันไม่ได้เห็นว่ามีตัวเลือกโล่มากมายสำหรับ Arduino
Chris B. Behrens

1
ความพยายามที่ทำให้เกิดการสูญเสียความสามารถของโปรแกรมเมอร์คือเหตุผลว่าทำไมพีซีเดสก์ท็อปของเราใช้เวลาในการบูตและเปิดโปรแกรมนานเท่าที่คอมพิวเตอร์ที่เราใช้เมื่อ 5 หรือ 10 ปีก่อน
Kevin Vermeer

@Chris - ปัญหาไม่ใช่ว่ามันไม่ได้เรียกใช้รหัสเครื่อง แต่มันก็ทำงานผ่าน abstractions สิ่งที่เป็นนามธรรม, วัตถุ, ไลบรารีทั่วไป, แบบแยกส่วน ฯลฯ ล้วนเป็นสิ่งที่ดีในการทำให้การเขียนโปรแกรมง่ายขึ้น แต่ก็ต้องใช้เวลาและพื้นที่
Kevin Vermeer

ใช่ แต่ฉันคิดว่าชั้นนามธรรมมีอยู่เท่านั้น (หรืออย่างน้อยส่วนใหญ่เท่านั้น) ในเครื่องพัฒนา แต่แน่นอนว่านี่เป็นข้อมูลที่ฉันต้องการ
Chris B. Behrens

2
@Chris - abstractions จะแพร่กระจายไปจนถึงรหัสเครื่อง ในท้ายที่สุดเครื่องจะดำเนินการกับที่อยู่: โหลดจัดเก็บเพิ่มสาขาตามเงื่อนไข ฯลฯ การประกอบคือการแปลรหัสเครื่องแบบหนึ่งต่อหนึ่งและแผนที่ C ใกล้เคียงกับมันมาก อย่างไรก็ตามภาษาระดับสูงมีงานต้องทำมากมายเพราะไม่มีพูดลอง / จับคำสั่งในชุดคำสั่งของโปรเซสเซอร์ใด ๆ รหัสเครื่องที่จำเป็นสำหรับการใช้งานตัวจัดการข้อยกเว้นนั้นไม่สำคัญ
Kevin Vermeer

4

หากคุณต้องการย้ายไปที่ระดับกลางคุณควรลองใช้แพลตฟอร์มที่อยู่นอกสภาพแวดล้อมของ Arduino มีให้เลือกมากมายคุณสามารถพักได้ที่ 8 บิตแม้จะมี Atmel MCU หรือย้ายไปที่หนึ่งจากผู้ขายรายอื่น ใช้ IDE เขียนรหัสภาษา C เข้าใจวิธีการทำงานของ MCU เขียนโค้ด bootloader ของคุณเองหรือใช้โปรแกรมเมอร์ในวงจรและเคลื่อนไหวต่อไป

แต่ถ้าคุณต้องการลองเขียนใน C # สำหรับไมโครคอนโทรลเลอร์ลองนี้: http://www.trygtech.com/products/sh7619_evb.php

ใช้ MCU ที่ใหญ่กว่ามากโดยปกติ. NET footprint นั้นมีหน่วยความจำแฟลชประมาณ 512K และ RAM ขนาด 256k


2
ระบบนั้นใช้. NET Micro framework มันเป็นระบบที่คริสมองหาความคิดเห็น
Kevin Vermeer

4

ฉันเพิ่งเห็นNetduinoซึ่งอาจเป็นสิ่งที่น่าสนใจสำหรับคุณ ฉันไม่มีความคิดเกี่ยวกับรายละเอียดหรือรายละเอียดของระบบ แต่ดูเหมือนว่าจะใช้. NET Micro ดังนั้นจึงดูเหมือนเป็นวิธีที่ดีที่จะลองใช้กรอบงานนั้นเป็นอย่างน้อย


3

ปัญหาเดียวที่ใหญ่ที่สุดสำหรับฉันกับ Processing / Arduino คือการขาดตัวดีบักที่เหมาะสม ฉันมีมังกร AVR แต่มันก็ไม่ได้ช่วยอะไรมากนักเนื่องจากดีบักเกอร์ (a) AVR Studio นั้นช้าและบั๊กกี้หรือ (b) การดีบักใน Eclipse นั้นค่อนข้างช้าและในขณะที่ยังน้อย ฉันไม่ได้มีโอกาสลองใช้ใน WinAVR แต่นั่นเป็นรายการถัดไป

แน่นอนว่าไม่มีดีบักเกอร์ใน Arduino IDE

เมื่อคุณก้าวออกจากแอพพลิเคชั่นที่เรียบง่ายและเริ่มสร้างแอพที่ต้องทำสิ่งที่เกี่ยวข้องในระดับเครือข่ายแบบใช้สายและไร้สายมันค่อนข้างน่าผิดหวัง นี่คือเหตุผลหลักว่าทำไมฉันถึงต้องเอาจริงเอาจังกับ. NET MF - กำลังเล่นกับ SDK และมีฮาร์ดแวร์บางอย่างเปิดตัวเร็ว ๆ นี้


โอ๊ะ ... มีสมาธิ! ฉันใช้ WinAVR เช่นเดียวกันกับ eclipse ;-)

1
ฉันจะสารภาพ ... มันไม่เคยเกิดขึ้นกับฉันว่าในระบบใดระบบหนึ่งที่จะมีการดีบักเกอร์นอกเหนือจากพิน 13 ที่จำเป็นต้องมีการตรวจสอบครั้งที่สองที่ Netduino ...
Chris B. Behrens

อ๋อ; คุณสามารถใช้ DebugWire บน ATMegas ขนาดเล็กและ JTAG บนชิปขนาดใหญ่ (1280 ขึ้นไปที่ฉันคิดว่า) เพื่อทำการดีบักบนแอพ Arduino ของแอพ Arduino ผ่านสภาพแวดล้อมทั้งสองที่กล่าวถึงข้างต้น คุณต้องมีฮาร์ดแวร์ในการทำเช่นนี้และสำหรับฉัน Dragon ที่ราว ๆ $ 50USD นั้นเป็นการซื้อที่ดี

แต่อย่างที่ฉันพูดถึงตัวเลือกทั้งคู่ดูเหมือนจะเป็นประสบการณ์ที่ดีที่สุดโดยเฉลี่ย ฉันรอคอยที่จะทำการเปรียบเทียบการดีบักกับ netduino ฉันได้มา

1
อัปเดตเกี่ยวกับเรื่องนี้ - รับ netduino บวกสองสามวันที่ผ่านมาและได้เล่นกับมัน ฉันต้องบอกว่าประสบการณ์นอกกรอบนั้นยอดเยี่ยมมากเมื่อเทียบกับสถานะการเล่นปัจจุบันใน Arduino ไม่ต้องแฟนซีอะไร - เพียงแค่ visual studio (คุณสามารถใช้รุ่น 'express' ฟรี) และสาย usb และคุณพร้อมใช้งานการแก้ไขข้อบกพร่องบนกระดานในระยะเวลาอันสั้น สิ่ง Intellisense ทั้งหมดทำงานใน IDE และฉันต้องบอกว่า - แม้ว่าฉันได้ทำงานกับ c / c ++ บนแพลตฟอร์มอื่น ๆ แล้วก็ตามการใช้. NET ทำให้การสร้างโค้ดฝังตัว buildnig ง่ายอาชญากร ;-)

2

คุณอาจต้องการที่จะตรวจสอบNetduino มันถูกสร้างขึ้นเพื่อให้เข้ากันได้กับเค้าโครงและพินของ Arduino และรัน. NET Micro Framework ดังนั้นคุณสามารถโค้ดใน C # และแม้แต่ดีบักภายใน Visual Studio!

จนถึงตอนนี้ฉันพบว่ามันดีมากและใช้งานง่าย ในขณะที่ฉันยังไม่พบบทเรียนมากมายฉันคิดว่าคุณสามารถทำสิ่งต่างๆมากมายของ Arduino ได้ ฉันเป็นคนใหม่ฉันสามารถพอร์ตการติดตั้ง photoresistor / photocell และรหัสได้อย่างง่ายดายจากบทช่วยสอน Arduino


1

คุณสามารถลองทำการพัฒนา Arduino สไตล์ C บน STM32 (ARM M3) ผ่านหนึ่งในโครงการโอเพ่นซอร์สหลายโครงการ LeafLabsและxduinoทั้งคู่มีฮาร์ดแวร์ที่ใช้งานได้และชุดเครื่องมือที่ใช้ Arduino ฉันใช้ Leaflabs Maple board เมื่อฉันต้องการไมโครคอนโทรลเลอร์ขนาด 32 บิตมากกว่าชิป Atmega ทั่วไป


1

คุณสามารถดูhttp://www.hpinfotech.ro/html/cvavr.htm ซึ่งเป็น IDE ที่ใช้งานง่ายสำหรับ Atmel และเขียน CI บางตัวใช้ CI นี้อย่างมืออาชีพและดีมากเช่นระดับความสะดวกสบายของคุณ ได้รับจาก IDE เช่น Visual Studio ฉันมี Eclipse ที่จะเป็น clunky เล็กน้อยสำหรับการพัฒนา Android ไม่ลื่นเหมือนซื้อ

ฉันมี Netduino ซึ่งฉันใช้ระบบควบคุม Tricopter เพื่อความสนุกซึ่งเป็นแบบเรียลไทม์และใช้งานได้อย่างน่าเชื่อถือเขียนด้วย C # ด้วย Visual Studio 2010 การดีบักบนอุปกรณ์นั้นยอดเยี่ยมมากฉันซิงค์ข้อมูลอัตโนมัติผ่านทาง wifi และฉันมีเซิร์ฟเวอร์ HTTP ขนาดเล็กบนเครื่องบิน


0

เราใช้. NET Micro Framework ในแอปพลิเคชั่นการผลิต (อุปกรณ์วัดความแม่นยำ) มันใช้งานได้ดี

ไมโครโปรเซสเซอร์ของวันนี้ได้เข้าสู่สถานะเมื่อคุณสามารถใช้กระบวนทัศน์ 'create-see-profile-change-see -... ... ' จำนวนหน่วยความจำมีขนาดค่อนข้างใหญ่และราคาถูกในตอนนี้ดังนั้นส่วนใหญ่คุณอาจไม่ได้อยู่ในสภาพที่มีหน่วยความจำไม่เพียงพอ

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

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