Arduino / Xử lý so với .NET Micro Framework? Ngôn ngữ tốt nhất? Phần cứng tốt nhất?


10

Tôi đã loay hoay với Arduino một thời gian rồi và tôi đang trong quá trình chuyển từ người mới bắt đầu sang trung cấp. Tôi muốn một số ý kiến ​​về .NET Micro Framework , về hiệu năng và tính sẵn sàng của phần cứng.

Tôi là một lập trình viên .NET, nhưng tôi thấy Xử lý cho Arduino có độ ma sát khá lớn ... Nó rất gần với C # mà bất cứ điều gì tôi muốn làm thậm chí không cần đến một tài liệu.

Nhưng dù sao, cái nào tốt hơn?


Xem thêm câu hỏi này (Liên quan đến C ++): chiphacker.com/questions/3027/iêu
Kevin Vermeer

Câu trả lời:


17

Nếu bạn muốn chuyển từ người mới bắt đầu sang trung cấp, ngôn ngữ bạn cần học là C. Ngay cả khi bạn đặt toàn bộ cuộc tranh luận về khóa Windows sang một bên, bạn cần phải rất giỏi lập trình trong C trước khi bạn có thể làm việc chất lượng trên một vi điều khiển trong một ngôn ngữ cấp cao hơn như .NET Micro hoặc C ++.

Hệ thống nhúng được cấu tạo của một kim tự tháp của kiến thức, và bạn thực sự cần phải biết ít nhất một số từng bước để trở thành một nhà thiết kế tốt:
^ mã người dùng
^^ Hệ điều hành
^^^ Ngôn ngữ C
^^^^ ngôn ngữ hội
^^^ ^^ Vi điều khiển kiến trúc
^^^^^^ kỹ thuật số thiết kế
^^^^^^^ Semiconductors
^^^^^^^^ cơ bản điện tử (định luật Ohm)

Khung Arduino cung cấp một móc nối thuận tiện cho những người có sở thích vào kim tự tháp ở đâu đó giữa ngôn ngữ C và một hệ điều hành.

Cụ thể với câu hỏi .NET Micro Framework của bạn, About nói:

Thiết bị .NET Micro Framework thông thường có bộ xử lý 32 bit không có bộ quản lý bộ nhớ ngoài (MMU) và có thể có ít nhất 64K bộ nhớ truy cập ngẫu nhiên (RAM).

Ngoài ra, tài liệu này phân biệt nó với Windows Mobile , Windows Embedded , CE 6.0 và .NET Compact Framework và so sánh nó với Linux, Real-Time, Java và các hệ điều hành tùy chỉnh. Đây là một bước nhảy lớn từ khung Arduino / Chế biến.

Arduino của bạn có bộ xử lý 8 bit với RAM 1k. Ngoài việc mất điện 8 bit so với 32 bit, nó cũng chạy nhanh hơn một nửa so với hầu hết các bộ xử lý được liệt kê. Mặc dù tôi không khuyến khích bạn chuyển sang bộ xử lý 32 bit, tôi sẽ khuyên bạn nên sử dụng nó như một bước chuyển từ trung cấp đến nâng cao.

Thật dễ dàng để sử dụng nhiều thời gian và bộ nhớ với một vài dòng trong C # hoặc C ++, không đáng kể trên bộ xử lý lõi kép chạy ở một vài gigahertz với RAM gigabyte, nhưng có thể tạo ra sự khác biệt lớn trên thiết bị nhúng . Cho đến khi bạn giỏi ngôn ngữ lắp ráp và / hoặc C, hoặc một bậc thầy về C # hoặc C ++, tôi không khuyên bạn nên sử dụng nó cho lập trình nhúng.

Vì vậy, tôi bắt đầu với việc tải xuống WinAVR và lập trình thói quen nhấp nháy LED đơn giản trong C. Nếu C hoàn toàn khó hiểu với bạn, hãy thực hiện một chút mã gốc ("Hello World") trên PC của bạn, sau đó chuyển sang vi điều khiển, nhưng điều đó không cần thiết. Tiếp theo, chuyển sang giao tiếp qua UART, bắt đầu sử dụng các ngắt và làm lại một số dự án Arduino của bạn trong C. Sau đó, tìm (hoặc thực hiện!) Một bảng phát triển mới với một vi điều khiển khác, có thể là PIC hoặc ARM và một số những thứ tốt như màn hình LCD, Ethernet, thẻ SD hoặc bất cứ thứ gì bạn muốn và cố gắng học một hệ thống mới. Khi bạn đến đó, bạn sẽ biết rõ hơn nơi bạn muốn đi.

Chúng tôi sẽ ở đây để giúp bạn trên đường đi!


6
Tôi không đồng ý rằng kiến ​​thức về trình biên dịch chương trình và C là rất cần thiết. Điều quan trọng là phải hiểu làm thế nào vi điều khiển làm việc . Học trình biên dịch (c, ít hơn) chắc chắn là một lộ trình cho sự hiểu biết này, nhưng nó không phải là con đường duy nhất.
Sói Connor

4
@Fake Name: Chắc chắn, đó là lý do tại sao tôi nói "ít nhất là một số." Theo một chương trình đơn giản từ C để lắp ráp thành hex và hiểu từng bước sẽ giúp bạn trở thành một lập trình viên tốt hơn rất nhiều. Sau này bạn có thể để phép thuật làm điều đó nếu bạn muốn, nhưng bạn cần hiểu khả năng của cỗ máy bạn đang làm việc.
Kevin Vermeer

Rất tiếc, xin lỗi. Bỏ lỡ "Một số".
Sói Connor

7

Tôi không có kinh nghiệm với ".NET Micro Framework", nhưng tôi rất nghi ngờ về bất cứ điều gì liên quan đến việc chạy một máy ảo trên các nền tảng nhúng được cung cấp năng lượng thấp. Nó chỉ có vẻ như một sự lãng phí đối với tôi. Bạn cần nhiều bộ xử lý năng lượng hơn, nhiều bộ nhớ hơn, tiêu thụ nhiều năng lượng hơn để đạt được hiệu quả tương tự như chạy một nền tảng chuyên dụng hơn để biên dịch thành mã máy gốc. Có thể tại sao điện thoại Android 528 MHz của tôi chạy máy ảo (tương tự JVM) thường cảm thấy chậm hơn so với Palm Treo 312 MHz trước đây của tôi chạy các ứng dụng được biên dịch cho mã máy gốc.

Từ cái nhìn nhanh, .NET MF yêu cầu bộ xử lý ARM, đây là một bước vượt trội về sức mạnh & độ phức tạp từ các chip ATMega 8 bit được sử dụng trong Arduino.

Đề nghị của tôi là nếu Arduino làm những gì bạn muốn, hãy gắn bó với điều đó. Nếu không, bạn có thể tìm đến các chip ATMega hoặc ATXmega mạnh hơn và trên đó hoạt động với ARM trực tiếp trong C / C ++, mà không cần thêm lớp dịch .NET trên đầu trang.


2
Tôi chân thành đồng ý, nhưng tôi không nghĩ đó là những gì đang xảy ra. Tôi nghĩ IL được dịch sang mã cụ thể của máy khi được triển khai. Đây là một liên kết bao gồm giả định: microsoft.com/doads/ hiện Tôi khá hài lòng với Arduino ... Tôi nghĩ điều duy nhất có thể thuyết phục tôi là tôi đã tìm thấy một lựa chọn khiên khá ấn tượng trên tinyclr.com .. Tôi chưa thấy rằng lựa chọn lá chắn cho Arduino.
Chris B. BehDR

1
Sự đánh đổi nỗ lực từ lập trình viên cũng là lý do tại sao các máy tính để bàn của chúng ta chỉ mất nhiều thời gian để khởi động và khởi chạy các chương trình như các máy tính chúng ta đã sử dụng 5 hoặc 10 năm trước.
Kevin Vermeer

@Chris - Vấn đề không phải là nó không chạy mã máy, mà là nó chạy nó thông qua một loạt các khái niệm trừu tượng. Trừu tượng hóa, các đối tượng, thư viện chung, mô đun hóa, v.v ... đều tốt ở chỗ chúng đơn giản hóa việc lập trình, nhưng chúng tốn thời gian và không gian.
Kevin Vermeer

Vâng, nhưng tôi nghĩ các lớp trừu tượng chỉ tồn tại (hoặc ít nhất là duy nhất) trên máy phát triển. Nhưng tất nhiên, đây chỉ là loại thông tin tôi cần.
Chris B. BehDR

2
@Chris - Các tóm tắt được truyền bá xuống tận mã máy. Cuối cùng, máy thực hiện các thao tác trên các địa chỉ: Tải, lưu trữ, thêm, nhánh có điều kiện, v.v. Hội là bản dịch một-một của mã máy và C ánh xạ tương đối gần với nó. Tuy nhiên, các ngôn ngữ cấp cao hơn có rất nhiều việc phải làm, bởi vì không có hướng dẫn thử / bắt trong bất kỳ tập lệnh nào của bộ xử lý. Mã máy cần thiết để thực hiện một trình xử lý ngoại lệ không phải là nhỏ.
Kevin Vermeer

4

Nếu bạn muốn chuyển sang trung gian, bạn nên thử một nền tảng bên ngoài môi trường Arduino. Có rất nhiều trong số chúng để lựa chọn, bạn có thể giữ nguyên 8 bit, ngay cả với MCU Atmel hoặc chuyển sang một từ nhà cung cấp khác. Sử dụng IDE, viết ngôn ngữ mã C, hiểu cách MCU hoạt động, viết mã bộ tải khởi động của riêng bạn hoặc sử dụng một lập trình viên trong mạch và tiếp tục di chuyển.

Nhưng nếu bạn thực sự muốn thử viết bằng C # cho vi điều khiển, hãy thử điều này: http://www.trygtech.com/products/sh7619_evb.php

Nó sử dụng MCU lớn hơn nhiều, dấu chân .NET điển hình là khoảng 512K bộ nhớ flash và 256k RAM.


2
Hệ thống đó sử dụng khung .NET Micro. Nó chính xác là loại hệ thống mà Chris đang tìm kiếm ý kiến.
Kevin Vermeer

4

Tôi chỉ thấy Netduino có thể là một sự thỏa hiệp thú vị cho bạn. Tôi không có ý tưởng về thông số kỹ thuật hoặc chi tiết hệ thống nhưng có vẻ như sử dụng .NET Micro nên nghe có vẻ như là một cách tốt để ít nhất thử dùng khung đó.


3

Vấn đề lớn nhất đối với tôi với Chế biến / Arduino là thiếu trình gỡ lỗi đàng hoàng. Tôi có một con rồng AVR, nhưng điều này không giúp được gì nhiều vì (a) trình gỡ lỗi của AVR Studio chậm và có lỗi, hoặc (b) gỡ lỗi trong Eclipse chỉ đơn giản là chậm và trong khi ít hơn, vẫn còn lỗi. Tôi chưa có cơ hội dùng thử trong WinAVR, nhưng đó là cái tiếp theo trong danh sách.

Tất nhiên không có trình gỡ lỗi trong Arduino IDE.

Khi bạn bước ra ngoài các ứng dụng đơn giản và bắt đầu xây dựng các ứng dụng phải thực hiện các công việc liên quan ở cấp độ mạng có dây và không dây, điều đó khá bực bội. Đây chủ yếu là lý do tại sao tôi xem xét nghiêm túc về .NET MF - đã chơi với SDK và sẽ sớm có một số phần cứng.


Rất tiếc ... mất tập trung! Tôi đang sử dụng WinAVR toochain với nhật thực ;-)

1
Tôi sẽ thú nhận ... điều đó chưa bao giờ xảy ra với tôi rằng trong cả hai hệ thống sẽ có trình gỡ lỗi, ngoài pin 13. Điều đó chắc chắn cần một cái nhìn thứ hai về Netduino ...
Chris B.

Vâng; bạn có thể sử dụng DebugWire trên các ATMegas nhỏ hơn và JTAG trên các chip lớn hơn (1280 trở lên tôi nghĩ) để thực hiện gỡ lỗi trên các ứng dụng Arduino thông qua hai môi trường được đề cập ở trên. Tuy nhiên, bạn phải có phần cứng để làm điều này và đối với tôi, Rồng với mức giá khoảng 50USD là một khoản mua tốt

Nhưng, như tôi đã đề cập cả hai lựa chọn dường như là trung bình ở những trải nghiệm tốt nhất. Tôi đang mong đợi để thực hiện so sánh gỡ lỗi với netduino tôi sắp tới.

1
Một bản cập nhật về điều này - đã nhận được một netduino cộng với một vài ngày trước và đã chơi với nó. Tôi phải nói rằng trải nghiệm vượt trội là tuyệt vời so với trạng thái chơi hiện tại trong Arduino. Không có gì ưa thích - chỉ cần phòng thu trực quan (bạn có thể sử dụng phiên bản 'express' miễn phí) và cáp usb và bạn đang chạy và chạy với gỡ lỗi trên tàu trong nháy mắt. Tất cả các công cụ intellisense đều hoạt động trong IDE và tôi phải nói rằng - mặc dù tôi đã thực hiện một loạt các c / c ++ hoạt động trên các nền tảng khác, sử dụng .NET giúp xây dựng mã nhúng dễ dàng hình sự ;-)

2

Bạn có thể muốn kiểm tra Netduino . Nó được xây dựng để tương thích với bố trí và chân của arduino và chạy .NET Micro Framework. Vì vậy, bạn có thể mã bằng C # và thậm chí gỡ lỗi trong Visual Studio!

Cho đến nay tôi đã tìm thấy nó là rất tốt và dễ dàng để làm việc với. Mặc dù tôi không tìm thấy nhiều hướng dẫn, tôi nghĩ rằng bạn có thể chuyển nhiều thứ cho Arduino. Tôi là một người mới, tôi có thể dễ dàng chuyển một thiết lập và mã quang điện tử từ một hướng dẫn Arduino.


1

Bạn có thể xem xét thực hiện phát triển C theo kiểu Arduino trên STM32 (ARM M3), thông qua một trong một số dự án nguồn mở. LeafLabsxduino đều có phần cứng hoạt động và bộ công cụ dựa trên Arduino. Tôi đã sử dụng bảng Leaflabs Maple khi tôi cần một bộ vi điều khiển 32 bit, trên các chip Atmega thông thường


1

Bạn có thể xem http://www.hpinfotech.ro/html/cvavr.htm , một IDE dễ sử dụng cho Atmel và viết một số CI đã sử dụng nó một cách chuyên nghiệp và rất tốt, giống như mức độ tiện lợi của bạn lấy từ IDE như Visual Studio. Tôi có Eclipse là một chút lộn xộn để phát triển Android không trơn tru như đã mua.

Tôi có Netduino mà tôi đã triển khai một hệ thống điều khiển Trbest để giải trí, rất nhiều thời gian thực và nó hoạt động đáng tin cậy, được viết bằng C # với Visual Studio 2010. Việc gỡ lỗi trên thiết bị nói chung là tuyệt vời, tôi có nó tự động đồng bộ hóa dữ liệu qua wifi và tôi có một máy chủ HTTP nhỏ trên máy bay.


0

Chúng tôi sử dụng .NET Micro Framework trong các ứng dụng sản xuất (thiết bị đo chính xác). Nó hoạt động tốt.

Bộ vi xử lý ngày nay đã đạt đến trạng thái khi bạn có thể sử dụng mô hình 'tạo-xem-hồ sơ-thay đổi-xem ...'. Số lượng bộ nhớ hiện tại khá lớn và rẻ, vì vậy hầu hết có thể bạn sẽ không xếp chồng với các điều kiện hết bộ nhớ.

Và là một nhà phát triển C #, bạn biết rằng việc lập hồ sơ đầy đủ để đạt được điều kiện mong muốn là cách sống tốt hơn so với việc đoán những gì khác và phức tạp hơn bạn nên làm trong khi tạo mã để tạo mã của mình (và có thể không) nhanh hơn một chút.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.