embedded를 잘 할 수 있다는 것은?

불량도ㅐㅈㅣ의 이미지

임베디드라는 말은 나온지 꽤 되었지만,

이 단어 개념이 상당히 포괄적으로 되었는 것 같습니다.

몇 년전만 해도 하드웨어에 가까운 개념인 걸로 알고 있는데요.

근래에는 모바일 프로그래밍쪽도 많이 이 단어를 쓰더라구요.

소프트웨어쪽이 활성화 되어서 인지 임베디드란 말을 매체에서 자주 접합니다.

저는 진로를 어느 쪽을 갈까 갈등중이지만 우선 정한게

하드웨어와 소프트웨어를 양쪽으로 주무르는 분야로 가고 싶습니다.

예를 들면 디바이스 드라이버를 들 수 있겠네요.

그래서 작년에 완전히 소프트웨어 과목만 수강했지만, 요번 학기에는 하드웨어 과목을 대거 수강 했죠.

하드웨어에 대해서 꽝이라 걱정을 했지만, 생각보다 재미있네요.

그래도 이것만 해도 될까 하면서

"방학때는 어셈블리를 열나고 파볼까?" "OS쪽을 공부 더해? 아니면 마프쪽?"

"나도 보드 사서 데이타 시트보면서 뭐 어떻게 해야 되는거 아냐? 아닌데 그건 마프 실험때 해보건데?"

"논리회로때 배운지식으로 vhdl로 우째 우려먹어서 시계를 만들어봐? 아 이런 난 전자회로하고 회로이론은 아예 모르지? 논리회로 과목만 수강해서 만들 수 있을까?"

이런 저런 생각이 많이 드는군요.

kesl.org kelp.or.kr 사이트에 있는 강좌를 보니 학교에서 가르치는 개념을 모르고서는 안 되겠다는 생각이 들기도 하구요.

이 쪽분야에 대한 정보를 많이 얻을 수가 없어서 확신이 안 섭니다.

임베디드를 잘 할 수 있다는 것은 무엇일까요?

서정민의 이미지

임베디드라는 것은 컴퓨터를 이용하여 다른 기계를 컨트롤하는 것을 주목적으로 합니다.

컴퓨터라는 것이 적용되기 전에는 단순히 전자회로를 이용하여 간단한 기능들을 조작했지만, 이러한 기기들이 조금더 복잡한 기능들을 필요하기 시작하면서, 컴퓨터라는 것을 도입하였고, 아직은 일반 PC와는 다르게 한가지 목적을 위한 기능만이 필요하기에 비교적 단순한 컴퓨터 하드웨어 및 소프트웨어가 적용이 되죠.

주로 이러한 임베디드 시스템은 하드웨어적인 제한이 있습니다. 냉장고 쯤되는 기계에야 PC 한대를 붙여서 윈도우 깔고 프로그램 돌리면 되지요. (사실 수년전(지금도 그렇겠지만) 화상 공중전화를 보니, 사람들이 피씨 안에다가 넣어두고 윈도 깔아서 화상프로그램 띄우고, 화상전화라 그러더군요) 그치만, 꼭 이렇게 큰 기기만 있는 것이 아니지요? 휴대폰도 다양한 기능들이 들어가면서 그것을 컨트롤 하기 위한 하나의 임베디드 시스템이고, 저 우주에 보내는 우주선이나 그 안에 들어있는 로봇도 임베디드 시스템이겠지요. 이러한 작은 시스템들이나 특별한 목적을 위한 시스템들은 배터리도 영구적으로 공급되는 것도 아니고, 바로바로 고칠수 없는 제한도 있으며, 시피유도 펜4를 달수도 없으며, 2기가의 메모리를 가지고 돌아갈수 없는 경우가 허다합니다.

그럼 무엇이 문제일까요?

이러한 제한적인 하드웨어에 원하는 효과적으로 움직이게끔 해야 하겠지요?

자..

그럼 이러한 문제점을 해결하는 것이야 말로 임베디드를 잘 한다는 것이 아닐런지요?

단순히 임베디드라는 것을 잘한다는 말은 어떤 아무것도 잘 모르는 분이 말을 던질 수 있는 것이 아닐까 합니다. 이 분야에서도 소프트웨어/하드웨어 쪽으로 나뉘어지고, 그 각각에서도 상당한 세부분야로 나뉘어진답니다.

앞으로 많은 공부하셔서 이분야에서 멋진 전문가가 되시길.. ;)

즉, 위에서 말하고자

익명 사용자의 이미지

하드웨어하고 딱 붙어있는 임베디드를 하신다면 "컴퓨터 구조"(일부 학교에서는 "전산기 구조"라고도 하죠.)를 꼭 공부하셔야 합니다.
임베디드에서 정말 중요한 과목입니다.

또한 컴파일러 관련 부분을 공부하셔야 합니다.
경우에 따라서는 칩이 동작하는 것처럼 생각해야 문제가 간단해지는 경우도 있으니 머리에서 컴파일하고 시물레이션을 해보는 경험을 많이 하셔야 하겠지요.
이와 관련해서는 asm도 좋은 시도라고 봅니다.

익명 사용자의 이미지

너무나 당연한 이야기이겠지만,
임베디드쪽을 잘하려면 특히 영어 그중 독해를 잘해야 합니다.

haze11의 이미지

불량돼지님 글을 보면 무엇을 해야할지 잘 알고계신거 같은데요? ^^
무엇이든지 그렇겠지만 아는걸 실천하는게 중요하죠.
바로 시작하세요!!

하니의 이미지

Hardware spec.보고 그 기능을 잘 구현해야 한다고 생각합니다.

하드웨어 담당자가 바로 옆에 있고 언제든 물어볼 수 있는 상황이 아니라면

회로도보고 왜/무엇대문에 이렇게 회로도가 그려졌는지.. 이해하고 상황에 따라

S/W Config. 구성 및 S/W적으로 구현할 수 있는 방법 역시 달라집니다..;;

Device Driver에 관심이 많으시면.. I2C/I2S/Serial/SPI/MMC I/F등 기능구현에

좀더 치중해 보시는 것도 괜찮을 것 같습니다. ^^

[니 칼은 니가 갈아라]

shji의 이미지

위에서 필요하신 것들은 다 얘기된 것 같구요..
무엇이든 다 비슷하겠지만.. 일단 쉬운거 부터라도
실제로 해 보는 것이 중요한 거 같네요..
임베디드 분야는 아무래도 한정된 자원을 최대한
사용하여야 하고 높은 안정성을 요구하는 경우가
많아서 특히 코드 한줄 한줄에 고민을 많이 해야
하는 경향이 있고.. 그래서 짬밥(경험)이 중요한것
같습니다. 물론 기초는 말할 것 없지요..

jachin의 이미지

여러 많은 분들이 임베디드 시스템 에 대한 많은 얘기가 있었습니다만, 조금 나이가 있으신 개발자 분들께서는 '이미 오래전부터 8051 이나 Z80 으로 만든 범용 컨트롤러를 이용한 각종 장치가 임베디드 시스템의 시초이니 별다를 것 없다'는 말씀을 하시기도 하고, 최근에 임베디드 시스템을 연구한다는 분들은 OS에 대한 개념이 더욱 강화된 것이 최근의 임베디드 시스템이라는 주장을 하시기도 합니다.

위에서 먼저 말한 분들의 경우 'CPU에 대한 Spec. 만 알아도 만드는 것은 어렵지 않다.' 라는 주장을 하시곤 하죠. ^^; 하지만, 후자의 경우는 '전문화된 전산지식'이 필요하다고 말씀하십니다.

하지만 제 스스로의 생각은 임베디드 시스템을 잘 구축하는 것도 실력이지만, 임베디드 시스템을 실제 사용되는 목적에 적합하게 잘 구현하는 것이 실력이라고 생각합니다. ^^;;; (당연한 얘기인가요?)

제가 있는 연구실에서 말하는 임베디드 시스템은 낮은 퍼포먼스를 갖는 CPU와 함께 목적과 관련된 기능을 하드웨어 (FPGA에 먼저 구현해 보지요. ^^; )로 구현해서 연결하는 형태로 진행합니다. 물론 이러한 일을 하려면, OS도 알고 하드웨어도 알아야 하고, 드라이버 작성도 직접 해야 하고, 커널 소스도 크로스 컴파일 해봐야 하고... :x 복잡한 일 투성입니다. 다행히 개발 키트는 FPGA와 회로가 연결되어 있으니 큰 문제 없이 개발이 쉽지만 :?: 만약 실제 제품화 한다면 공정에 직접 칩도 넣어야 하고, PCB 기판도 떠야 하고, 외부 유닛도 연결해야 하고... 하아...

하지만 현재 일반적인 임베디드 시스템에 대한 교육은 FPGA 를 이용하여 목적에 맞는 하드웨어를 구현하고, 구현된 하드웨어를 정상적으로 운영할 수 있는 소프트웨어를 개발하는 것이 대부분 입니다.