10' DigitalArchive 원광대학교 갤러리 Law 님께서 올려주신 임베디드 시스템 테크 트리

2010. 7. 20. 02:40


 내용 요약. C언어(포인터와 함께), 어셈블리어 공부를 충분히 열심히할 것. 추후에 ATMEGA128이나 ARM 프로세서 프로그래밍을 통해 스테핑 모터나 LCD 제어등을 해보고 임베디드 리눅스를 공부하여 임베디드 시스템에 많은 지식을 쌓도록 하자!

 원광대학교 전자과 학우님들께 조금이나마 도움이 될까 써봅니다. 아시다시피 원광대학교 공과대학은 학부로 인한 1학년 과정은 전공이 아닌 각종 기초이론 과목을 이해하는 학년으로 2학년 중 2학기 때 돼서야 조금씩 전공에 대한 감각이 생기고 3학년 1학기가 되면 자신의 전망을 가늠하기 충분하셨을 거라고 생각합니다. 개인적으로 Embedded System에 많은 관심이 있기에 이와 관련된 공부에 대해서 써 볼까 합니다. [참고! 개인적인 부분이니 생각이 차이가 있을 수 있기 때문에 이해해주시기 바랍니다] 1학년 1학기 때 C언어에 관한 기초 이론을 비롯한 2학기 들어서 포인터 부분까지 가다가 심화과정을 거치지 못하고 끝나는 것으로 알고 있습니다. (포인터는 한 과목으로 개강하여 1년의 과정을 거치지 않은 한 ‘응용’ 면에서 다 끝내지 못하기 때문에 아쉬움이 남습니다.) 또 공부라는 것이 수업시간에 이해하지 못하면 따로 공부해야 하는데 그렇지 못했다면 올 3학년 1학기 Embedded System Programming & Design 과목의 ATmega128을 통한 수업 및 작품을 하는데 이해하지 못해서 많은 난관을 겪었을 것이라고 생각합니다. 여기다 작품을 만들 때 많은 Source를 참고 하면서 C언어를 이해하지 못한 부분도 있지만 난데없이 Assembly Lang이 나와서 난해한 점도 있을 거라고 생각해봅니다. 결국 공부를 하지 않아서 생기는 문제이기 때문에 3학년이라면 취업을 위해서 지금부터라도 하시면 늦지 않을 거라고 판단해봅니다. (단, 잠을 줄이고 하루 12시간 이상은 투자하셔야 합니다.) 2006년도 기준으로 C언어를 공부하는데 ‘C Programming with a Work Book’이라는 3권짜리 책을 통해서 배웠을 겁니다. (그 이후 학번은 각각 교재를 참고) 이 책이 이해되지 않으신다면 ‘열혈강의 C프로그래밍’을 참고하시기 바랍니다. 개인적으로 추천하지 않는 책이지만 기초적인 이론적 부분에 관해서는 이만한 책은 보지 못했습니다. ‘열혈강의 C프로그래밍’을 시작으로 사이사이 ‘C Programming with a Work Book’교재를 통해서 Programming을 하는데 문제가 없으시길 바랍니다. 2학년 들어서 컴퓨터 구조를 배우는데 있어 ‘ISR EWAVR 컴파일러를 이용한 AVR ATmega128 마이크로컨트롤러‘ 책을 통해서 배우게 됩니다. 개인적인 판단이지만 아무리 봐도 Datasheet 번역해 놓은 책인 것 같습니다. ATmega128을 생판 모르는 초보자가 이것을 통해서 익혀 나간다는 것은 정말 신이라고 생각합니다. (수업이 어이 없이 진행해서 교수님 이름도 모르겠습니다. 전자과 교수님은 아닙니다.) 그래서 나름 익혀나가기 위한 과정을 모색해본 결과 다음과 같은 과정을 구성해 보았습니다. 1. C언어 / 회로이론 2. 컴퓨터 구조 / 전자 회로 3. ATmega Series 4. ARM 5. Embedded Linux -> Android 과 같은 과정을 통해서 졸업하기 전까지 끝낸다면 취업하는데 많은 도움이 되지 않을까 생각해봅니다. (대기업은 모르겠지만 중견이나 중소기업을 생각하신다면 대회입상과 작품을 통해서 취업을 하는 경우가 많기 때문에 경력을 남기시기 바랍니다.) C언어는 설명했으니 넘어가고 2.번에 해당하는 컴퓨터 구조와 전자 회로를 설명하자면 컴퓨터 구조를 배울 시간에 ATmega128 수업을 했기 때문에 이해가 많이 되지 않았을 거라고 생각합니다. 그래서 도서관과 지인의 의한 자문을 통해서 알아본 결과 컴퓨터 구조 및 설계: 하드웨어/소프트웨어 인터페이스 ARM 버전 (원서 : Computer Organization and Design 4/e) 교재를 통해서 학습하시면 굉장히 이해가 잘 되고 학습하는데 무리가 없다고 느꼈습니다. 이 교재를 통해서 공부하고 나니 딱히 이것을 “이렇게 자세히 공부할 필요가 있을까?”라는 의문을 갖으면서 다음 단계로 넘어가 보았는데 역시, 이 과목을 배우지 않고 넘어갔으면 다음 부분이 모두 이해되지 않는 다는 것입니다. 이점을 유의하시고 꼭 거쳐 갔으면 하는 과목입니다. 여기서 일화가 있다면 겨울방학에 제가 이 책을 가지고 공부했을 때 학교 도서관에는 4판이 아닌 3판이 있어 이것을 가지고 공부했습니다. 3판은 MIPS를 기반으로 하는 책이고 올해 나온 4판은 ARM을 기반으로 책이 나왔다는 것입니다. 그래서 여름방학 때 4판을 구입해서 보고 있는데 개인적으로 매우 만족하는 책이고 미리 알았으면 좋았을 텐데하는 아쉬움이 남습니다. 회로이론은 고등학교 때 물리시간에 잠을 잤다. 그래서 기초가 모자라다라고 생각하시는 분들께서는 회로이론 7판 / Thomas L. Floyd 저 (원서 : Electric Circuits Fundamentals(7/e)) 을 통해서 학습하시기 바랍니다. 전기과 같은 경우는 이 책을 가지고 공부하고 있는 것으로 알고 있는데 전자과는 학교에서 출판한 책을 통해서 학습하였습니다. 이완범 교수님께서 수업시간에 자세한 설명을 해주셨기 때문에 이해하는데 많은 도움이 되었지만 그렇지 않는 경우라면 매우 난해한 과목입니다. (독학하신다면 위에 적어둔 교재를 추천합니다.) (여기서 잠깐! ∫, ∮, ∑, lim 수식을 풀지 못하는 사람이 꾀 있다는 사실을 알고 깜짝 놀랐습니다. 공부해야 합니다.) ATmega학습은 현장에서 보면 Firmware 수준밖에 안되지만 이를 통해서 ARM을 접근하신다면 차이가 있겠지만 이해하는데 많은 도움이 되는 것은 사실입니다. ATmega는 Stepping/Servo motor, Dot/Graphic LCD, Sensor는 꼭 이론과 함께 꼭 구현해보시기 바랍니다. 이젠 목적지인 ARM이 있습니다. 한 번이라도 Datasheet 관련 자료나 이의 대해서 알아보았다면 짜증 그 이상으로 스트레스를 받으실 것입니다. 그래서 컴퓨터 구조 및 설계: 하드웨어/소프트웨어 인터페이스 ARM 버전 (원서 : Computer Organization and Design 4/e) 교재를 공부하시면 접근하는데 많은 도움이 되실거라 판단합니다. 학교에서는 ARM 실험을 하기 위한 Intel PXA255 Kit를 이용해서 수업을 받으실 겁니다. 도서관에 보시면 Intel PXA255와 임베디드 리눅스 응용 / (주)휴인스 기술연구소 서적이 있습니다. 이건 학교에서 교수님을 통해서 아니면 세미나를 통해서 습득하시는 것을 추천 드립니다. 마지막으로 Embedded Linux입니다. Embedded의 생명과 같은 것이므로 이것은 직접 찾아보시고 그에 맞게 공부하시기 바랍니다. 도서관에 가면 5층 오른쪽 노트북 연결해서 공부할 수 있게 칸막이 되어있는 장소에 지역 문헌자료(통계) 쪽에 있는 벽면의 도서칸을 시작으로 3번 째 ‘대여 불가’써진 도서들을 보시면(566.843 ㅇ538r2) (뇌를 자극하는)Red Hat Fedora :리눅스 서버 & 네트워크 =Linux server & network /우재남 저 2010년도 나온 책으로 전 05년도에 나온 서적으로 공부했었습니다. 입문서로 괜찮은 책이라고 생각합니다. 이상 임베드관련을 공부하는데 도움이 되시라고 서술해 보았으나 서술한 부분 중간 중간 빠진 내용이 많습니다. 즉, 정규과목이 아니기 때문에 이것을 하세요라고 말은 못해 드리겠습니다. 당장 커널이 먼지도 모르는 사람한테 리눅스를 접하라고 하는 것도 그렇지만 개인에 따라서 매우 다르기 때문에 공통적인 부분만 서술해보았습니다. 여기까집니다. 참고만 하시고 공부하는데 많은 도움이 되었으면 좋겠습니다.

 내용을 추가하자면 어셈블리어는 각 하드웨어에 따라 응용법이 다르기 때문에 필수는 아니지만 하다못해 기본적 이론(문법이 사용되는 원리라든지) 익혀두는 것이 좋으며, 이식성 때문에 많이 찾진 않지만 디바이스 드라이버 설계에 있어서 필수적으로 알 필요가 있습니다. 이는 Atmega128을 배울 때 Header파일을 열어서 헤더 속 어셈블리어를 응용하지 못하면 복잡한 하드웨어를 연결하여 설계 시 많은 어려움이 있으며 C언어의 한계성 때문에 용량이 방대해져 소자의 추가 및 비용을 가져오는 것을 줄이기 위한 것으로 어셈블리어는 필요악과 같은 역할을 담당하고 있습니다.(속도와도 밀접한 관련) 현장에서는 하드웨어의 다른 소프트웨어 작성 시 메모리의 용량이 무한대로 적용되지 않고 “512KB 이내로 만들어라.”라고 과제를 주어주면 이 용량을 넘기지 않는 선에서 개발해야 되는데 이때 용량으로 인한 어셈블리어 응용은 필수가 됩니다. 또 다른 것으로 비유해서 설명하자면 국내 전자기기 디자이너(산업디자이너)가 디자인 설계를 못하는 것이 아닙니다. 디자이너들은 생산 공정 전반에 대한 이해가 부족하고 반대로 설계생산 쪽은 디자인에 대한 이해가 부족해서 생기는 현상입니다. 이렇듯 생산라인이든 디자인이든 서로의 대한 이해가 필수적으로 필요하다는 것을 알 수 있습니다. 그렇기 때문에 어셈블리어는 Architecture를 섬세하게 작동할 수 있는 매력을 가지고 있어 그 필요성은 중요하지 않을 수 없습니다. 물론 정밀 제어를 하지 않는 부분에서는 많이들 사용하지 않지만 ‘오류’에 관해서 단순히 문법적 오류가 아니라 하드웨어를 이해하는데 문제가 있다면 결국 세부적으로 파고들어야 합니다. 이 때 필요한 것이 어셈블리어입니다. 그리고 서적에 관해서는 저 같은 경우는 원서로 공부했었기에 내용들이 출중하여 추천드린 책들입니다. 모두 번역본이 나와있으며 국내 우수 교수님분들께서 작업하신 번역서이기 때문에 내용상 문제는 없을 거라고 생각하며 위에 말씀하신 ARM System Developer's Guide라는 책이 실질적인 자칭 ARM 국제 표준 교재입니다.(국내 번역서로 나온 것으로 알고 있습니다.) 디지털 기초 이론은 ‘Digital Fundamentals (Ninth Edition) / Floyd(원서)’입니다. 필요하신 분들은 아래 링크의 Hotfile의 관련 링크 5개가 있습니다. 1개를 Regular로 하신 다음 60초 기다리신 다음에 다운받기 누르시면 됩니다. 1개 파일을 다운 완료하면 30분 후 다음 파일 다운로드가 가능합니다. 비밀번호 floyddigital 입니다. 국내 책으로는 ‘디지털 논리회로 : 이론 실습 시뮬레이션 (개정판) IT COOKBOOK’을 추천드립니다. http://www.ebook3000.com/Digital-Fundamentals--Ninth-Edition---Repost-_45843.html

※ 참고 주소
 - Law님의 전문글 '전자과 관련 내용' http://gall.dcinside.com/list.php?id=wonkwang&no=51214
 - Law님의 댓글 내용 참고 http://gall.dcinside.com/list.php?id=wonkwang&no=51222

오픈바인드를 이용함에 있어서 주의할 점은 공부하는데 도움이 되고자 참고만 하라는 것입니다. 의존하게 되면 결국 자기에게 손해가 되며 오히려 방해가 되며, 독이 됩니다. 무조건 배끼기만을 하게 되면 인생에 보탬이 되지 않음을 분명히 하세요!


이제 더이상 업데이트가 이루어지지 않으므로, 댓글 및 트랙백을 닫습니다.
질문 및 문의사항은 to.openbind@gmail.com 으로 보내주십시오. 감사합니다. http://www.openbind.com/58