성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>라즈베리 파이 제로 용 프로그램 개발을 위한 Eclipse C/C++ 윈도우 환경 설정</h1> <p> 라즈베리 파이가 너무 느려서 그 안에서 IDE를 띄워 개발하기에는 다소 답답합니다. 그래서 개별 PC의 윈도우에서 개발한다면 원격 디버깅까지 가능한 Visual Studio를 이용하는 것이 가장 편리한데요,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Visual Studio 2017에서 Raspberry Pi C++ 응용 프로그램 제작 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/11358'>https://www.sysnet.pe.kr/2/0/11358</a> </pre> <br /> 부득이 Visual Studio를 사용할 수 없다면 Notepad++에 NppFTP 플러그인을 설치해 개발하는 것도 나쁘진 않습니다. 가령, 간단한 C 프로젝트라면 다음과 같은 식으로 소스 코드와 makefile을 엮으면 그런대로 개발에 큰 불편함은 없습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // $ sudo apt-get install git-core // $ git clone https://github.com/WiringPi/WiringPi.git // $ cd wiringPi // $ git pull origin // $ ./build // main.c #include <stdio.h> #include <wiringPi.h> extern int _pinNumber; int main() { int value; while (1) { value = digitalRead(_pinNumber); printf("%d\n", value); delay(1000); } } </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // sub.c int _pinNumber = 5; </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > # makefile test.out : main.o sub.o gcc -o test.out main.o sub.o -lwiringPi main.o : main.c gcc -c -o main.o main.c sub.o : sub.c gcc -c -o sub.o sub.c clean : rm *.o test.out </pre> <br /> 참고로, Visual Studio Code도 생각해 볼 수 있지만, 아쉽게도 <a target='tab' href='https://www.sysnet.pe.kr/2/0/11715#armv6'>"라즈베리 파이 제로"가 armv6l CPU의 명령어 셋</a>이라 <a target='tab' href='https://github.com/microsoft/vscode-remote-release/issues/669'>Visual Studio Code도 실행할 수가 없고</a>, 심지어 "Remote-SSH" 확장으로도 접속할 수 없습니다. (접속 시도 시 "The remote host's architecture is not supported."라는 오류가 발생합니다.)<br /> <br /> <hr style='width: 50%' /><br /> <br /> Notepad++/NppFTP의 조합에서 빠진 것이 있다면 역시 디버깅인데요, 어쩔 수 없군요, ^^ Eclipse의 힘을 빌려야겠습니다.<br /> <br /> 이를 위해 "Eclipse IDE for C/C++ Developers"를 윈도우 PC에 설치한 다음,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Eclipse: <a target='tab' href='https://www.eclipse.org/downloads/'>https://www.eclipse.org/downloads/</a> </pre> <br /> "GNU toolchain for raspberry"를 다운로드해 설치합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Prebuilt Windows Toolchain for Raspberry Pi ; <a target='tab' href='https://gnutoolchains.com/raspberry/'>https://gnutoolchains.com/raspberry/</a> raspberry-gcc8.3.0-r3.exe ; <a target='tab' href='https://sysprogs.com/getfile/1362/raspberry-gcc8.3.0-r3.exe'>https://sysprogs.com/getfile/1362/raspberry-gcc8.3.0-r3.exe</a> </pre> <br /> 설치 후, "C Managed Build" 타입의 새 프로젝트를 선택, "Toolchains"의 항목을 "Cross GCC" 유형으로 생성합니다.<br /> <br /> <img alt='raspberry_pi_dev_eclipse_1.png' src='/SysWebRes/bbs/raspberry_pi_dev_eclipse_1.png' /><br /> <br /> 위의 과정 이후 "Cross GCC Command"를 설정하는 창이 나오는데 여기에는 이전에 설치한 "GNU toolchain for raspberry"의 컴파일러 경로를 입력합니다.<br /> <br /> <img alt='raspberry_pi_dev_eclipse_2.png' src='/SysWebRes/bbs/raspberry_pi_dev_eclipse_2.png' /><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Cross compiler prefix: <span style='color: blue; font-weight: bold'>arm-linux-gnueabihf-</span> Cross compiler path: <span style='color: blue; font-weight: bold'>C:\SysGCC\raspberry\bin</span> </pre> <br /> 그렇게 해서 생성한 기본 소스 코드를 다음과 같이 바꿔주고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > #include <stdio.h> #include <wiringPi.h> int _pinNumber = 5; int main() { int value; while (1) { value = digitalRead(_pinNumber); printf("%d\n", value); delay(1000); } } </pre> <br /> "Project" / "Properties" 창을 열어 "C/C++ Build" / "Settings" 범주의 "Cross GCC Linker" / "Libraries"에 "wiringPi" 라이브러리를 추가합니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='raspberry_pi_dev_eclipse_3.png' src='/SysWebRes/bbs/raspberry_pi_dev_eclipse_3.png' /><br /> <br /> 끝입니다. 이제 "Ctrl + B(Build)"를 누르면 컴파일이 되고 /Debug 폴더에 "blink" 실행 파일이 생성됩니다. 재미있는 것은 "GNU toolchain for raspberry"으로 컴파일했기 때문에 생성된 바이너리가 라즈베리 파이 32비트 ARM CPU 명령어 셋을 가진 리눅스 실행 파일 포맷이라는 점입니다.<br /> <br /> 따라서 윈도우에서 실행은 안되지만, 그 파일을 라즈베리 파이에 복사 후 실행하면 정상적으로 구동이 됩니다.<br /> <br /> 물론, 저런 식으로 ^^; 개발을 하고 싶진 않을 것입니다. 마찬가지로 <a target='tab' href='https://www.sysnet.pe.kr/2/0/11358'>비주얼 스튜디오에서 그랬던 것처럼</a>, Eclipse에서도 IDE 내에서 실행 시 원격 라즈베리 파이로 자동으로 복사되고 디버깅까지 하고 싶을 텐데요, 이를 위해서는 라즈베리 파이 측에 gdbserver 구성 요소를 설치해 두고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ sudo apt-get install gdbserver </pre> <br /> Eclipse의 "Run" / "Run Configurations..." 메뉴를 선택하면 "C/C++ Remote Applications"를 설정할 수 있는 창이 뜹니다.<br /> <br /> <img alt='raspberry_pi_dev_eclipse_4.png' src='/SysWebRes/bbs/raspberry_pi_dev_eclipse_4.png' /><br /> <br /> 위의 화면에서 왼쪽 상단에 있는 "New Configuration" 아이콘을 눌러 새로운 설정을 추가한 다음, "Connection"이 현재 "Local"만 제공되고 있으므로 "New..." 버튼을 눌러 "SSH" 유형의 연결을 추가한 다음,<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='raspberry_pi_dev_eclipse_5.png' src='/SysWebRes/bbs/raspberry_pi_dev_eclipse_5.png' /><br /> <br /> 프로젝트의 실행 파일(이 글의 예제에서는 blink)이 원격지 컴퓨터의 어디로 복사될 것인지, 그리고 복사 이후 실행할 명령어를 지정해 줍니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='raspberry_pi_dev_eclipse_6.png' src='/SysWebRes/bbs/raspberry_pi_dev_eclipse_6.png' /><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Remote Absolute File Path for C/C++ Application: <span style='color: blue; font-weight: bold'>/home/pi/sample/blink</span> Commands to execute before application: <span style='color: blue; font-weight: bold'>chmod 755 /home/pi/sample/blink</span> </pre> <br /> 위의 예에서는 blink 실행 파일을 "/home/pi/sample/" 디렉터리에 복사하기 때문에 원격지(라즈베리 파이)에 동일한 디렉터리가 존재해야 합니다. (없으면 만들어 줍니다. ^^) 또한, 복사한 파일은 실행 권한이 없으므로 "chmod 755 ..."를 이용해 지정한 것도 유의해야 합니다.<br /> <br /> 설정을 완료하면, 위의 화면에서 지정한 "Name" (이 글에서는 "blink Debug")에 해당하는 항목이 디버그 아이콘 메뉴에 나오므로,<br /> <br /> <img alt='raspberry_pi_dev_eclipse_7.png' src='/SysWebRes/bbs/raspberry_pi_dev_eclipse_7.png' /><br /> <br /> 이를 선택하면 원격 디버깅을 시작하고 BP(Breakpoint) 및 Step Into/Over를 이용한 동작을 수행할 수 있습니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
3521
(왼쪽의 숫자를 입력해야 합니다.)