Arduino를 사용할 때 각 언어의 장점은 무엇입니까?
이것은 좋은 일반적인 질문이라고 생각하지만 저는 “누군가에게 팁을주고 싶은지 물어 보는 이유에 대해 약간 추가하겠습니다.
저는 JavaScript, PHP와 같은 사전 처리 된 언어에 경험이 있으며 Java 및 Visual Basic과 같은 언어에 익숙합니다. 즉, 프로그래밍 기술과 클래식 및 프로토 타입 객체 지향을 모두 알고 있지만 하드웨어와 직접 통신하는 것에 대해서는 아무것도 모릅니다.
나는 옥토 콥터를 만들고 있으며 객체 지향 접근법이 가장 쉬울 것이라고 생각합니다. (소프트웨어에는 매우 많은 기능이 있습니다 …) 그러나 저는 C ++로 작성된 적이 없습니다.
이것은 Q & 다른 사람을 돕기 위해 처음에 제시된 일반적인 질문 만 매우 중요하지만 제 상황에 대한 의견이 있으면 감사하겠습니다.
댓글
Answer
교수 (프로그래밍, 메카트로닉스)로서의 개인적인 경험은 이전 프로그래밍 경험이 있고 OOP라는 개념을 알고 있다면 C / C ++로가는 것이 더 낫다는 것입니다. arduino 언어는 초보자에게 정말 좋지만 몇 가지 제한이 있습니다 (예 : 모든 파일이 동일한 폴더에 있어야 함). 그리고 이것은 기본적으로 C / C ++의 단순화입니다 (실제로 arduino 코드를 C / C ++ 파일에 복사하여 & 붙여 넣을 수 있으며 작동합니다). 또한 eclipse로 잘 알려진 IDE를 사용할 수 있다는 것도 의미가 있습니다.
http://playground.arduino.cc/Code/Eclipse
처음에는 개발 환경의 설정과 구성이 조금 더 필요하지만 IMHO는 다른 언어에 대한 경험이있는 프로그래머에게는 가치가 있습니다.
경우에, arduino 하드웨어에 익숙해지기 위해 며칠 동안 arduino 언어와 arduino IDE 사용을 시작한 다음 실제로 프로젝트를 개발하기 위해 Eclipse를 사용하는 C / C ++로 이동하는 것은 해가되지 않습니다.
댓글
- 생각해 주셔서 감사합니다. ‘ Arduino IDE를 사용하여 모든 다른 하드웨어를 제어하는 방법을 배우겠습니다. 센서 및 LCD 화면 등의 조각. 그런 다음 ‘ C ++로 이동하여 옥토 콥터 용 소프트웨어를 만들 것입니다. 다른 언어를 아는 사람들을위한 좋은 짧은 책을 알고 있습니까? ” 문제 ” 내가 찾은 책은 ‘ 너무 많이 포함되어있어서 ‘ ‘ div> m은 UI 컴퓨터가 아닌 작은 Atmel 마이크로 컨트롤러입니다.
- 아두 이노를위한 멋진 책 ” C Programming ” by Julien Bayle이 유용합니다. C ++ 언어가 아닌 C이지만 기초를 이해하는 데 도움이 될 것입니다.
- 좋은 요청입니다. 다른 언어의 프로그래머를위한 C ++의 기초가 담긴 짧고 좋은 책입니다. 추천을 드릴 수 없어서 죄송합니다. 좋은 추천이 없습니다. 사실 저는 학생들을위한 실질적인 초점 (비디오 게임 개발)으로 책을 썼지 만 스페인어로만되어 있습니다. 훌륭하고 실용적인 C ++ 책의 경우 Deitel & Deitel C ++ 프로그래밍 방법을 추천합니다. 많은 고급 장을 건너 뛸 수 있습니다.
- C ++는 OO 기능, C 언어를 지원합니다. 그렇지 않습니다.
- @FriendofKim 정확히 말한 것은 아닙니다 (기술적으로는 할 수 있지만 Due는 메가 비트가 아닌 직렬 통신을위한 소프트웨어 솔루션을 지원할만큼 충분히 빠르며 5 개의 U (S) ARTS가 있습니다. Arduino 라이브러리는 총 4 개만 제공하지만 iirc Due 보드는 USART 중 하나에 핀을 제공하지 않습니다. Arduino 라이브러리는 비동기 모드를 사용하도록 USART를 구성하지만 최대 6Mbps의 동기가 필요했습니다 (입력이 원시 비트 스트림으로 처리되어 중지 비트 등이 없어야하므로 SPI 모드를 사용해야했습니다.), 기본 PIO 컨트롤러 구성 수정도 포함되었습니다.
Answer
이론상 …
실제로 Arduino 언어는 없습니다. 실제로는 도메인 별 라이브러리가있는 C ++ 일뿐입니다. 이러한 기능은 하드웨어를 제어하기 위해 호출 할 수있는 기능과 같은 다양한 기능을 추가합니다. 이러한 기능이 없다면 모든 것을 제어하기 위해 특수 레지스터를 직접 조작해야합니다. 이것이 임베디드 프로그래밍이 일반적으로 수행되는 방식입니다. 빠르지 만 배우고 이해하기가 상당히 어려울 수 있습니다.
함수 외에도 라이브러리는 일부 유형에 대한 대체 이름을 추가합니다. 예를 들어 boolean
및 byte
는 C ++ 표준에 없습니다. 그러나 이들은 bool
및 unsigned char
와 직접적으로 동일합니다.
이 모든 것은 아마도 일반을 포팅 할 수 있음을 의미합니다. 어려움없이 Arduino에 직접 C ++ 코드를 작성합니다. 그러나 반대로 돌아가려면 약간의 편집이 필요할 수 있습니다.
실제로 …
모든 것을 말했듯이, Arduino 프로그래밍은 일반 C ++ 프로그래밍과 완전히 동일하지 않습니다.하지만 모든 임베디드 프로그래밍에는 많은 차이가 있습니다 (예 : 제한된 메모리 및 처리 능력).
공식 Arduino IDE를 사용하는 경우 코드를 설정하는 방법에 대한 모든 종류의 성가신 단점과 제한 사항이 있습니다. 모든 경우에 해결 방법이 있습니다 (내가 아는 한). 하지만 때로는 매우 실망 스럽습니다.
완전한 유연성을 위해 Arduino를 지원하는 플러그인이있는 타사 IDE (예 : Eclipse)를 사용하십시오. 그러면 Arduino 라이브러리와 함께 C ++의 모든 이점을 얻을 수 있습니다.
댓글
- 여기 ‘는 Arduino에서 잘 작동하는 Eclipse에 대한 설정입니다. arduino.stackexchange.com/a/75491/7727 . 저는 ‘ Arduino 플러그인을 사용하지 않고 C / C ++ 용 순수 Eclipse 만 사용합니다.
Answer
Arduino를 사용할 때 C ++와 Arduino 언어의 장점은 무엇입니까? 저는 자바 스크립트, PHP와 같은 전처리 된 언어에 경험이 있고 Java 및 Visual Basic과 같은 언어에 익숙합니다.
첫째, Arduino 컴파일러 / IDE는 C 및 C ++있는 그대로. 실제로 많은 라이브러리가 C ++로 작성됩니다. 기본 시스템의 대부분은 객체 지향이 아니지만 그럴 수 있습니다.
따라서 “Arduino 언어”는 C ++ 또는 C.
C ++는 가비지 수집이 아닙니다. 다음을 작성하면 범위 내에서 변수를 관리합니다.
int led = 13; void blinkTimes(int value) { int i; for(i=0;i<value;i++) { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } }
그러면 다음을 찾을 수 있습니다. led
및 i
는 blinkTimes
를 몇 번이나 호출하더라도 성장하거나 누출되지 않습니다. div>.
i
가 클래스 인 경우 함수가 종료되면 유사하게 폐기됩니다.
또는 이와 유사한 메모리 할당 함수를 사용하여 새 개체를 만들면 누수에 대해 걱정할 필요가 없습니다.
만들면 여전히 메모리가 부족할 수 있습니다. 거대한 클래스를 사용하고 깊이 중첩 된 함수에서 많이 사용하지만 일반적으로 new
및 함수.
new
를 사용하는 경우 “delete
를 호출해야합니다. 적절한 시간에. C ++ 및 Arduino에는 자동 가비지 수집 기능이 없으므로 자체 메모리를 명시 적으로 관리해야합니다.
코멘트
- 예, 인스턴스화 된 객체 인 경우 (신규 포함) ‘ 가비지 수집되지 않으므로 ‘도 배워야합니다. 나는 C ++에 관한 책이 그것을 다룰 것이라고 생각합니다. 좋은 답변을 주셔서 감사합니다!
답변
— 업데이트 170412
원본을 썼습니다. 고유 한 “Arduino C ++”가 존재한다는 관점에서 3 년 전에 대답했습니다. IDE에서 사용되는 언어는 GNU C ++ 컴파일러에 의해 구현되기 때문에 표준 C ++입니다. “명백한”차이점은 IDE가 언어를 처음 접하는 사람들이 몇 가지 #includes, f / ex를 채워서 “잘못”을 피할 수 있도록 사전 처리를 수행하기 때문에 발생합니다. 하지만 올바른 C ++를 작성하고 원하는대로 얻을 수 있습니다.
— 업데이트 종료
C ++ 언어 기능의 사용을 구현 한 기능으로 제한하십시오. 완전히 이해합니다. 소스 코드를 읽는 것보다 더 많은 리소스 집약적 인 코드로 컴파일되는 몇 가지 기능이 있습니다. 선택적으로 생성 된 .lss (병합 된 소스 및 어셈블리) 목록은 C ++ 컴파일러가 보지 않았을 때 수행 한 작업에 대한 좋은 통찰력을 제공 할 수 있습니다.
메모리에 대한 질문 : C ++는 가비지 수집이 아닙니다. C 및 C ++와 같은 스택 기반 언어는 함수 입력시 자동 변수를 위해 스택에 임시 저장소를 할당합니다. 그러면 함수가 반환 될 때 해제되지만 이것이 진정한 가비지 수집은 아닙니다. 힙 또는 전역 메모리에서 생성 된 개체는 명시 적으로 삭제할 때까지 유지됩니다. 다양한 종류의 개체가 생성 될 위치,시기 및 기간을 알고 있어야합니다. 코드를 new
-ing 및 delete
-ing 개체가 아무렇지도 않게 사용하는 것을 정말로 원하지 않습니다. 이들은 힙 메모리에 구축됩니다. 코드를 조각화하여 스택으로 자라게합니다. 그 때 코드와 멋진 “콥터”가 충돌 할 것입니다.
C는 더 적은 작업을 수행 할 수 있도록 . 나쁜 선택이 아닙니다. 몇 가지 C ++ 기능이있는 C는 추가 기능을 신중하게 선택하면 훨씬 더 나은 선택이 될 수 있습니다. 두 가지 선택이 있다면 C ++ :
[원래 답변]-C ++는 표준화 된 언어입니다. . 임베디드 시스템을 포함한 많은 환경에 널리 배포되므로 “Arduino”라는 매우 유사한 C ++ 언어보다 철저하게 테스트되었습니다. 이는 계획중인 미션 크리티컬 / 안전 크리티컬 애플리케이션에 특히 중요합니다. 크래시 된 코드는 크래시 된 “헬기”를 의미하며 누군가에게 해를 끼치 지 않더라도 값 비싼 기계를 깨뜨립니다.
-
표준이므로 C ++는 이식 가능합니다. 프로세서를 업그레이드해야합니까? 실리콘 전용 코드를 제외한 모든 것이 새 코드로 이식됩니다. 도구 세트, 개발 시스템, 호스트 OS를 변경해야합니까? C ++ Arduino IDE는 Java가 지원되는 모든 곳에서 실행되지만 Arduino C ++를 사용하는 유일한 도구이며 매우 제한적입니다. 엘. Eclipse, AVR 도구를 사용하고, 맨발로 명령 줄을 사용하고, Emacs 또는 원하는 다른 환경에서 개발하려면 표준 C ++가 지원됩니다.
-
Arduino IDE는 등 뒤에서 작업을 수행합니다. 특히 필요하다고 생각 될 때 .h 파일을 #include합니다. 정확하더라도 컴파일러가 보게 될 모든 것을 작성하거나 적어도보고 이해하기를 원합니다. 프로그래밍 언어는 “컴퓨터 용으로 만들어지지 않았습니다 (컴퓨터는 아침 식사로 조금 먹습니다).”그들은 사람들, 특히 프로젝트에서 당신을 팔로우하는 사람들을 위해 만들어졌습니다. 그 중 가장 중요한 사람은 … 당신 일 수 있습니다. 모듈을 작성했으면 다시 돌아와서 향상 시키거나 수정해야합니다. 컴파일러가 보는 모든 것을 정말로 볼 수 있기를 원합니다.
댓글
- 정말 좋은 답변입니다. . 당신이 C ++를 좋아하고 나도 좋아해야한다는 것이 분명해 보입니다! …하지만 진지하게 ‘ ‘ ” 커뮤니케이션 ” 다른 센서 등이 작동합니다.
- 이 주제에 대한 좋은 책을 알고 있습니까? (수년간 다른 언어로 프로그래밍 해 왔으며 C ++의 ” 포함 된 부분 ” 만 필요로하는 저에게 적합합니다.)
- Accelerated C ++ 가이 책에 좋은 책이라고 생각하십니까?
- ‘ 오른쪽 ‘ 책,하지만 저와 Kernighan 뒤에 C를 많이 사용하여 C ++에 왔습니다. & Ritchie ‘의 C 프로그래밍 언어 는 명시 적으로 C ++가 아닌 모든 것에 대한 필자의 책 (나쁜 말장난)이며 Ellis & Stroustrup ‘의 C ++ 용 주석이있는 C ++ 참조 설명서 . 그러나 하드웨어 쓰기의 경우 ‘ Arduino.cc . pinMode (), digitalWrite () 및 digitalRead () 함수를 사용하여 I / O 포트를 조정 한 다음 해당 아날로그 I / O 대응 요소를 조정하고 결국에는 …
- … 속도 및 메모리 공간 향상을위한 I / O 레지스터. blinky.cpp 및 hello.cpp와 같은 프로그램은 하드웨어 문제를 해결하기에 좋은 곳입니다. 간단한 멀티 미터를 추가하고 올바른 전류 제한 저항이있는 몇 개의 LED를 한쪽 다리에 영구적으로 납땜하면 간단하더라도 실제 결과를 볼 수 있습니다. 그런 다음 관심있는 하드웨어에 대한 데이터 시트를 읽고 어떤 신호를 읽을 수 있는지 / 읽을 수 있는지 알아보십시오. 온도 센서는 사용하기 쉽고 ‘ 모든 사람에게 냉장고 로거가 필요하지 않습니까? 재미있게 보내세요!
Answer
Arduino 언어는 C ++이지만 대부분의 C ++ 품종과는 매우 다릅니다.
C++ vs. The Arduino Language?
-” Arduino 언어 “는 C ++ 입니다 . 함수 프로토 타입을 작성하는 데 약간의 전처리가 필요하지만 가장 확실한 것은 C ++입니다.