Java API를 사용한 마이크로 컨트롤러


10

내 하드웨어 팀은 향후 프로젝트에 Atmel AVR 8 비트 마이크로 컨트롤러를 사용할 계획입니다.

내가 아는 한, C로 프로그래밍해야합니다 .AVR 의 JVM 을 찾았 지만 Atmel의 기본 C 라이브러리보다 제한적입니다.

Java를 지원하는 8 비트 마이크로 컨트롤러를 제안 할 수 있습니까?

추신. 나는 C를 모른다. 나는 마이크로 프로세서 프로그래밍에 경험이 없다.


28
누군가가 떠 다니는 큰 치마와 긴 장대를 팔아서 호수에서 낚시하러 갈 수 있다고 말했습니다. 3 일 동안 착용 한 후 차가 뒤집히고 가라 앉기 전에 약 15 피트 정도 호수에 들어갑니다. 당신은 아빠가 정말 화나게 될 것입니다. 당신은 멋진 카누와 함께 지방의 보트 상점을지나 갔다. 카누는 마이크로 C 컴파일러이며, 스틱이있는 플로피 자동차는 8 비트 마이크로 컨트롤러에서 Java입니다. 운 좋게도 이런 일은 일어나지 않았다 ... 당신은 우리에게 수레를 찾을 수있는 곳을 물었다. 아빠가 "무슨 생각을하십니까?! 카누를 타세요!"
darron

6
막대기로 부유 한 치마 차를 시각화하는 데 문제가 있습니다. 사진 있어요?
endolith

8
@darron- 패키지 big_floating_skirtboat인터페이스 를 구현 하는 객체 와 지금 기억할 수없는 이상한 상속 패턴을 가진 객체가 아니어야합니까 (그러나 UML에 명확하게 설명되어 있음)? org.buoyantpolejava.net
Kevin Vermeer

2
@sterz : 마이크로 프로세서 배경이 없다면 8 비트 마이크로에서 Java가 실제로 어디에 있는지 알지 못했을 것입니다. 내 첫 번째 의견이 거칠게 들리면 죄송합니다 ... 간단한 "하지 마세요"가 너무 약해 보입니다.
darron

1
@darron : "대포로 새를

답변:


32

마이크로 프로세서 / 마이크로 컨트롤러 프로그래밍 분야에 경험이 없다면, C를 먼저 배워야 할 것이므로 대부분의 마이크로 컨트롤러 프로젝트에서 Java가 왜 그리고 왜 좋지 않은지를 이해할 수 있습니다.

링크 한 JVM에 대한 제한 사항을 읽었습니까? 다음과 같은 문제가 있습니다.

  • 512 바이트 정도의 프로그램 메모리 (KB가 아님, MB가 아님)
  • 최소 768 바이트의 RAM (변수가있는 곳.이 제한에 의해 768 자의 문자열로 제한됩니다.)
  • 8Mhz AVR에서 초당 약 20k Java opcode.
  • java.lang.Object, java.lang.System, java.io.PrintStream, java.lang.StringBuffer, JVM 제어 클래스 및 기본 IO 클래스 만 포함합니다. 가져 오기를 수행 할 수 없습니다. java.util. *; 이 목록에없는 모든 클래스를 가져옵니다.

이러한 제한의 의미에 익숙하지 않은 경우 공간 및 속도 제한으로 인해 실제로 Java로 프로젝트를 수행 할 수없는 경우 계획 B가 있는지 확인하십시오.

Java를 계속 사용하고 싶다면 Java를 아는 많은 사람들이 장치를 프로그래밍해야하기 때문에 임베디드 Linux를 실행하는 더 큰 하드웨어를 얻는 것이 좋습니다. 임베디드 JVM을 실행하기 위해 어떤 사양을 사용하려면 Oracle의이 페이지를 참조하십시오. 토론 FAQ에서 최소 32MB의 RAM과 32MB의 플래시를 권장합니다. 보고있는 AVR의 RAM은 약 32,000 배, 플래시는 1,0000 배입니다. Oracle의 Java Embedded Intro 페이지는 JVM의 제한 사항에 대해 자세히 설명합니다. 그들의 목소리는 내 생각보다 자바에 더 친숙하다. 이러한 종류의 하드웨어는 8 비트 AVR보다 설계하기가 훨씬 어렵습니다.

컴퓨터 공학 미성년자 컴퓨터 공학 학생입니다. 우리 대학의 CS 부서는 Java Kool-aid를 마 셨기 때문에 엔지니어링 프로그램의 많은 학생들은 Java 만 알고 있습니다. 이는 프로그래머에게 슬픈 일입니다. C.를 배우고 싶어서 교수님 중 한 명이 1 년간의 Java 경험을 가진 학생들을위한 C 치트 시트 를 발표했습니다 . 75 페이지에 불과합니다. 결정을 내리기 전에 읽거나 훑어 보는 것이 좋습니다. 제 생각에 C는 임베디드 프로젝트를 개발할 때 가장 효율적이고 내구성이 있으며 전문적인 언어입니다.

고려해야 할 또 다른 대안은 Arduino 프레임 워크입니다. 그것은 사용 다운 버전을 박탈배선 개체 또는 헤더없이 C ++처럼 언어를. 많은 AVR 칩에서 실행될 수 있으며 하드웨어에 국한되지 않습니다. C로 바로 뛰어 들기보다 쉬운 학습 곡선을 제공합니다.

결론적으로,
XKCD 골든 해머
Alt text : 다섯 가지가 올바른 것을 찾으려고 노력했지만 결국 보트가 아니라면 밤을 구해 냈습니다.


5
내가 가장 좋아하는 코믹 스트립 중 하나.
Kortuk

1
음, 차가워 요 +1
tyblu

그 JVM이 20 년 전에 사용 가능한 "Java iButton"과 어떻게 비교되는지 궁금합니다.
supercat

@kevin "C 치트 시트"링크가 작동하지 않습니다! 업데이트하십시오!
charansai

6

Atmel AVR의 가장 보편적 인 프로그래밍 환경은 Arduino 입니다. Arduino 언어는 C ++의 하위 집합입니다.

Arduino "스케치"/ 프로그램은 구문 적으로 Java와 매우 유사하게 나타납니다. Arduino에서 파생 된 배선 언어 는 C ++ ( Arduino ), Java ( Processing ) 및 Javascript ( processing.js )로 구현됩니다.

두 언어 모두 Algol68의 공통 조상으로 인해 동일한 선언 스타일, 루프 구조 및 산술 연산자를 공유합니다. 일반적으로 Arduino의 모든 객체는 전체적으로 또는 스택에서 선언되므로 Java와 같이 멤버 함수는 .연산자 (예 :) 를 통해 호출됩니다 LED.flash().

이 언어는 Java 프로그래머에게 매우 친숙하지만 중요한 것은 Arduino 스케치가 완전한 하드웨어 액세스로 최고 속도로 실행되는 기본 코드로 컴파일 된 것입니다. 이것은 마이크로 컨트롤러를 최대한 활용하는 데 중요합니다.

API 는 다음과 같습니다 .

Arduino는 저렴한 하드웨어, 무료 통합 개발 환경 및 부트 로더 (USB / 직렬을 통해 코드를로드 할 수 있음)에 필요한 모든 것을 제공합니다.


3
더 정확하게 말하자면, 애호가들에게 가장 인기있는 프로그래밍 환경이지만, 모든 AVR 개발자에게 반드시 필요한 것은 아닙니다.
pfyon

2
Arduino는 Arduino 펌웨어가 포함 된 제품 단위 수가 아닌 사용자 수에 의해 가장 인기가 있다고 주장합니다. 있습니다 많은 거기 아두 이노 사용자의
토비 Jaffey

1
"스케치"가 컴파일되었지만 C 또는 어셈블리를 사용하여 IO 액세스 속도를 크게 향상시킬 수 있습니다.
tyblu

1
C ++과 Java는 저와 매우 다르게 보입니다. ( "아두 이노는" 단지 C ++는 기괴한는 구조가 기술적 인 비트의 일부를 숨기는 등 일부.)
닉 T

2
@Jason S "아두 이노"스케치 "/ 프로그램은 자바와 매우 유사 해 보인다"
Toby Jaffey

4

나는 한 번도 사용하지 않았지만 1 년 전에 창 던지기라고 불렀다는 것을 분명히하고 싶습니다. 시차가 그중 하나를 획득했을 가능성이 있습니다. 이제는 "Javelin Stamp"만 나오기 때문입니다. 몇 년 전에도 Velocity Semiconductor라는 회사가 있었는데, Rabbit Semiconductor의 핵심 모듈을 대체 할 수있는 드롭 인 대체품을 만들었고 하드웨어에 JVM이 있었지만 그 회사는 사라졌습니다. 검색에 행운을 빕니다!


4

Sun Microsystems는 기본적으로 임베디드 Java 플랫폼 인 Sun Spot이라는 플랫폼을 만들었습니다. 분명히 Sun Microsystems는 더 이상 존재하지 않지만 (Oracle이 구입 한 경우) Sun Spots ( http://www.sunspotworld.com/products/)를 계속 구입할 수있는 것 같습니다 . 임베디드 환경 (Job imho에 대한 잘못된 추상화 수준)에서 Java를 사용하려는 생각에 큰 관심은 없지만 Java에 가장 자연스러운 임베디드 플랫폼 인 것 같습니다. 이러한 사양은 180MHz / 512k RAM의 고사양이며 스타터 키트의 경우 400 달러로 저렴하지 않습니다.

그래서 저는이 질문에 대한 아두 이노 옹호 응답자의 두 번째 또는 세 번째가 될 것입니다. 도움이 필요하면 당신을 지원할 수있는 공동체가 있습니다. 주변 장치 하드웨어가 필요한 경우 Google에서 "Arduino Shields"를 찾아 놀라게하십시오. 제어 서보 모터부터 올바른 차폐 조합을 사용하여 802.11 무선 네트워크에서 홉까지 모든 작업을 수행 할 수 있습니다. 실습 시간없이 C (포인터가 무엇이라고 말합니까?)를 배우는 것은 실용적이지 않지만, 곧 다음에 Arduino 스케치를 작성할 수 있습니다 ... 약 30 달러 정도의 "실제"Arduino 플랫폼과 복제품 (예 : RBBB 또는 DorkBoard) 15 달러 미만


아 네, 2 년 전에 Maker Faire에서 봤어요! 꽤 멋진 장치입니다.
Dave

SunSpot의 킬러 기능은 Java가 아니지만 내장 무선 기능으로 서로 통신 할 수 있습니다. 서로에 대한 인식이나 홈베이스와의 쉬운 무선 통신을 원한다면 매우 좋습니다.
Thorbjørn Ravn Andersen

3

시차 는 JVM을 실행하는 CoM (Computer-on-Module) 인 Javelin Stamp를 만듭니다 .

60 달러이며 ~ 8,500 Java 명령어 / 초를 실행합니다.

또한 PCB는 분홍색입니다 (정말입니다!)


2

Ajile 시스템은 다양한 네이티브 임베디드 실시간 자바 칩과 평가 보드를 만듭니다.

베어 메탈 자바를 실행합니다. 매우 유쾌합니다.

www.ajile.com은 칩과 평가 보드를 만듭니다.

www.systronix.com은 다양한 임베디드 Java 하드웨어를 판매합니다.

나는 까다로운 작업을 위해 ajile의 AJ-100을 사용했습니다. 그리고 그들은 avr만큼 저렴하지는 않지만 저가형 펜티엄과 같은 데이터를 처리합니다.

Ajiles의 칩은 1 마이크로 초 미만의 인터럽트 (인터럽트 대기 시간)에 응답합니다.


'내장 된 C 시스템에서는 그렇게하지 마십시오'??? 무엇을합니까? 1 미국 대기 시간? 고속? 거의. 1GHz + DSP, 많은 ARM 및 기타 몇 가지를 잊어 버린 것 같습니다. 많은 사람들이 베어 메탈 C를 사용하여 OS를 작성하지 않습니다. 이 유형의 것은 Java를 임베디드 (전체 Linux 스케일 OS 외부)에서 사용하는 절반의 합리적인 방법이라는 것을 당신에게 부여 할 것입니다 ... Systronix를 간략하게 살펴본 후에는 지불하는 것처럼 보입니다. 그 작은 편의를 위해 좋은 프리미엄. 나는 임베디드 ARM을 확실히 갈 것입니다. 또한 Systronix 외부의 프로젝트에 대한 많은 링크가 죽었습니다.
darron

아, 그리고 TINI는 미친 듯이 바보입니다. 8051 ROM의 JVM. 나는 쉬운 이더넷을 원할 때 어리석게 시도했지만 C에서도 정상적인 회사 LAN의 브로드 캐스트 트래픽으로 인해 늪에 빠졌습니다. 시차의 기본 우표와 같이 시판된다면 훌륭한 제품이지만 그렇지는 않습니다. 비 취미 목적에는 적합하지 않습니다.
darron

1
이 칩들은 수백 메가 헤르츠에서 작동합니다. 이 장치보다 100 배 느리게 실행되는 프로세서에서 C로 프로그래밍하면 1uS 대기 시간이 가능합니다. 동등한 프로세서로 꽤 멋진 작업 (예 : iPad 및 Droid 전화)을 수행 할 수는 있지만이 문제를 8 비트 AVR의 대안으로 게시하는 것은 사과 대 사과 비교가 아닙니다.
Kevin Vermeer

@reemrevnivek : OP가 Java를 원했기 때문에 Ajile 부분이 임베디드 Java를 실행하는 유일한 합리적인 방법 중 하나 (전체 Linux OS 외부에서)라는 점에서 Ajile 부분이 적절하다고 생각합니다. 마지막 단락과 TSTIK 비트가 없다면 그것을 찬성합니다.
darron

2

내 개인적인 경험은 프로그래밍하고 AVR을 시작하는 C 코드가 매우 쉽다는 것입니다. 수년 동안 자바를 해 왔으며 약 2 개월의 arduino 스케치를 사용한 후 환경을 포기하고 avr-gcc, 사이트를 방문했습니다. avrfreaks와 같이 일반적인 문제에 대한 답변을 쉽게 찾을 수 있습니다. (나는 여전히 내 믿을만한 Arduino Duemillenove에서 모든 일을한다)

다른 IDE를 다룰 필요가 없기 때문에 이클립스를 사용하여 컴파일 및 "배치", 즉 칩에 쓰기

실제로 레지스터, 16 비트 레지스터를 둘러보고 프로그래밍 언어 자체보다 적절한 순서, 인터럽트, 타이머, 하드웨어 PWM으로 읽는 것이 더 어렵다고 생각합니다.


1

임베디드 작업과 관련하여 일반적으로 "C를 배우고 실제로 프로세서가 수행하는 작업을 이해"하고 있지만 작은 팔 칩은 AVR보다 훨씬 비싸지 않으며 거의 ​​그럴듯하다는 점을 지적 할 가치가 있습니다. jvm 위에서 간단한 작업을 처리 할 수있는 위치.


1

NanoVM 은 8 비트 AVR 마이크로 컨트롤러에서 실행되도록 설계된 Java Virtual Machine입니다.

(홈페이지에서)

완전한 기능을 갖춘 Java VM은 아니며 결코 존재하지 않습니다. 항상 자바 언어와 표준 자바 라이브러리의 작은 부분 집합과 몇 가지 응용 프로그램 특정 메소드로 제한됩니다. 또한, C를 마이크로 컨트롤러 프로그래밍의 표준 방법으로 대체하는 것은 아닙니다. C 또는 어셈블러 프로그램보다 유연성이 떨어지고 성능이 떨어집니다.

NanoVM은 마이크로 컨트롤러 기반 장치에 제한적이지만 제어 가능한 프로그래밍 인터페이스를 제공하는 방법입니다. 하드웨어 특정 코드의 대부분이 NanoVM 자체의 일부이므로 사용자는 응용 프로그램 자체에 집중할 수 있습니다. 사용자에게 NanoVM이 장착 된 장치가 제공되면 하드웨어 자체에 대해 생각할 필요가 없습니다. 또한 타겟 특정 컴파일러 등이 필요하지 않습니다. 그가 필요로하는 것은 표준 Java 컴파일러와 NanoVMTool 자체가 java로 작성되어 있습니다. 따라서 전체 개발 체인은 Java 컴파일러가 있고 Java 코드를 실행할 수있는 모든 장치에서 작동합니다. NanoVM이 제공하는 하드웨어 추상화를 통해 사용자는 대상이 기반으로하는 마이크로 컨트롤러 유형에 신경 쓸 필요가 없습니다.


1

Java 또는 8 비트는 아니지만 Espruino 라는 저전력 ARM 마이크로 컨트롤러에 사용할 수있는 Javascript 인터프리터가 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.