3학년 2학기 임베디드 시스템 / 실험 과목을 수강하고 난 후 아쉬운 점이 많아서 방학기간 동안에 임베디드쪽으로 뭔가 더 해볼까 생각했었는데, 마침 전에 사 두었던 ATmega128 Board가 생각나 이걸 가지고 뭔가 해보기로 맘먹었다.
그럼 이제 뭘 하느냐가 남았는데, 단순히 External I/O로 장난치는건 돈도 많이 들고 별로 재미도 없을 것 같아서.. 간단히 RTOS 하나를 만들어 보기로 하였다. RTOS라고 할 것도 없지만.. 목표하는 대략적인 구현 기능은 다음과 같다.
- Preemptive Multi-Task Scheduler (필수)
- Semaphore / Mutex 등 Critical Section Control을 위한 IPC (필수)
- Task Creation 및 Delete / Delay 등을 위한 몇 가지 API Library(필수)
- Message Queue나 Shared Memory 또는 기타 다른 IPC (선택)
- Event (선택)
- UART (선택)
처음엔 Timer Interrupt만 할줄 알면 속도가 붙겠지 생각했는데, 생각보다 어렵고 양도 많다... Datasheet도 조만간 여유 되는 대로 제본을 고려해야겠고, uC/OS나 freeRTOS 실제 OS Source Code도 계속 쳐다보고 있다. 특히 임베디드 시스템 시간에 uC/OS 을 배운 것이 큰 도움이 되고 있다.
아마 수행 기간은 방학을 거의 다 잡아 먹을 듯 하고, 방학 안에 끝낼 수 있을지도 미지수다. 하지만
어차피 선택 부분은 부가적인 기능이기 떄문에 필수라고 적어놓은 것들은 꼭 해내고 싶다.
NFC(Near Field Communication)는 원거리가 아닌 0~20cm의 근거리에서 데이터를 주고 받는 용도로 개발된 통신 방식이다.
비슷한 통신방식의 예로는 RFID나 Bluetooth 등이 있을 수 있는데, NFC는 이러한 것들(특히 RFID)와 호환성을 유지하면서 좀 더 다양한 기능을 지원하고 있다.
NFC는 교통카드나 스마트 카드 등에서 사용되는 RFID 기술과 매우 흡사하다. 실제 동작도 NFC 기능이 지원되는 Reader가 다른 Reader나 Tag와 접촉하는 형식으로 동작한다. NFC의 동작 특성을 간략히 나열하면 다음과 같다.
- 사용 주파수 범위 : 13.56MHz
- 최대 동작 거리 : 20cm
- 최대 통신 속도 : 0.42Mbps
- 동작 모드 : Reader / P2P / Card Emulation
RFID와 비교해서 NFC의 가장 큰 특징은 다양한 모드를 지원한다는 점이다. NFC는 크게 다음과 같은 모드를 지원한다.
프로젝트명 : Verilog를 이용한 Simple AES 구현
프로젝트 수행 기간 : 2011.7~2011.8 [KEEPER 여름방학 프로젝트]
프로젝트 개요
- Verilog HDL을 이용하여 Simplified AES를 구현한다.
이 프로젝트는 지난 2011년 여름방학때 KEEPER 프로젝트로 진행한 것이다.
Verilog HDL을 공부한 후 이를 이용해 AES 알고리즘의 축소판인 Simple AES를 구현한 후 Simulator로 검증해 보는 프로젝트였다.
아쉽게 따로 문서화되어 있는 것은 없기 때문에 수행하면서 사용한 최종 발표 자료만을 공개한다. 소스코드는 따로 공개하지 않는다.
처음 공부한 분야다 보니 미숙한 점이 많은 프로젝트였다. 이 프로젝트 이후에 현재 수행하고 있는 RSA 구현은 좀 더 체계적으로 연구해 볼 계획이다.
프로젝트명 : NFC와 ECC에 기반한 인증서 시스템 구현
프로젝트 수행 기간 : 2011.4~2011.8 [KEEPER 상반기 기술문서 프로젝트]
프로젝트 개요
이 기술 문서는 2011년 전반기 KEEPER 기술문서 작성을 위해 수행한 ‘ECC에 기반한 인증서 시스템 구현’ 프로젝트에 관한 기술문서이다.
타원 곡선 암호는 타원 곡선에서의 연산을 통해서 이루어지는 공개 키 암호이다. 이 문서에서는 공개키 암호란 무엇인지 알아 본 다음, 타원 곡선 상에서의 연산과 이를 이용한 메시지 암호 방법을 알아본다.
인증서와 디지털 서명은 두 사용자가 서로를 신뢰할 수 있도록 수행하는 인증 방식이다. 송신자가 신뢰할 수 있는 사람이란 것을 인증하는 인증서가 있을 때, 이 인증서가 위, 변조 되지 않은 것이라는 것을 증명하기 위하여 송수신자 모두 신뢰할 수 있는 기관에서 인증서를 서명해 주는 디지털 서명이라는 것이 존재한다.
이번 프로젝트에서는 어떤 사용자가 거래처와 통신을 한다고 할 때, 사용자의 인증서를 은행에서 발급 및 서명하여 거래처로 전송하는 과정을 모의로 구성하여 보았다. 특히, 인증서 서명 시 주로 쓰이는 RSA 대신 이번 프로젝트에서는 ECC를 이용하여 서명하여 보았다.
주요 개발 장비
- ACR 122 : NFC Reader (Windows PC에서 Reader로 사용)
- Nexus S : Android Smartphone (RFID Reader)
주요 구현 개념
- NFC : Near Field Communication, RFID통신의 일종
- ECC : Elliptic Curve Cryptography. 타원 곡선 암호
이 프로젝트는 지난 2011년 동아리 상반기 기술문서 프로젝트로 수행한 것으로, Nexus S와 Reader가 부착된 PC가 NFC P2P Mode로 통신을 할 수 있도록 구현한 프로젝트이다. 통신 과정에서는 타원 곡선 암호를 구현하여 통신을 하도록 하였다.
본 포스팅은 이 프로젝트에 대한 개요로, 기술문서 자체는 동아리 재산으로 업로드 하지 않을 생각이다. 다만, 프로젝트를 수행하면서 NFC 자료의 절대량이 매우 부족했고, 또한 국내 자료는 전무하다시피 하였기 때문에 추가 포스팅을 통해 간략한 구현 과정을 설명할 계획이다.
덧. 나중에 발표할 때 알았는데 구현한 인증서 방식은 실제로는 인증서 방식이 아니라 단순한 공개키 암호라는 지적을 받았다.
프로젝트 제목 : 경매 시스템 설계 및 구현
프로젝트 수행기간 : 2학년 2학기 논리 회로 설계 및 실험 Term Project [2010년 2학기]
프로젝트 개요
- 실제 경매 환경을 본따 경매 시스템을 설계한다.
- 설계한 시스템을 실제 논리 회로로 Design 하여 FPGA에서 구동시켜 본다.
설계한 시스템 구성
- FPGA Board는 경매에서의 사회자 역할을 수행한다.
- ATMega128은 FPGA와 연동되어 FPGA의 Output Signal을 바탕으로 CLCD를 통해 사회자를 보조하는 역할을 한다.
- 추가로 외부 I/O Board를 구성에 FPGA와 연동하며, 이 Board는 경매 참여자의 역할을 한다.
설계한 주요 모듈
- I/O Module : Keypad, 7-Segment, Button Switch, Dip Switch Dot Matrix, External I/O Module
- System Module : 4 Bit Full Adder, State Clock, Level to Pulse, Instruction Encoder
- MCU Kit : Instruction Decoder, CLCD Module
개발 환경
FPGA : 한백전자 HBE-COMBO II
MCU : ATMega 128
Logic Design Tool : Flowrian / Quaters II
최근 프로젝트 관리에 대한 지식의 필요성을 많이 느꼈다.
그래서 어떻게 공부해야 할까 조언을 구하려고 채흥석 교수님께 메일을 보냈다.
안녕하십니까.
지난 학기 C++ 프로그래밍 강의를 들었던 양희철이라고 합니다.
지난 여름 많이 더웠는데, 그동안 건겅히 잘 지내셨는지요?
다름이 아니라 여쭈어 볼게 있어서 실례 무릎쓰고 이렇게 메일을 보냅니다.
1학기를 마치고 여름방학부터 마음 맞는 친구나 후배들과 프로젝트를 3~4개 정도 진행해 봤었습니다.
그런데 이상하게 모두 제대로 진행하지 못하였습니다.
모두 제가 관리와 주 프로그래밍을 하는 입장에서 했었는데, 번번히 실패를 해서
왜 제대로 되지 못할까하는 생각을 계속 해 보았습니다.
프로젝트마다 실패했던 요인은 여러가지였습니다.
사람들마다 프로그래밍 실력이 좋은사람도 있고 나쁜 사람도 있어서 어떤 일을 맡겨야 할지 몰라서 실패한 것도 있고
모듈을 나누어서 하는데 사람마다 분배가 제대로 안되어서 그런 것도 있고
애초에 개발 일정을 무리하게 잡아서 실패한 적도 있고
만들려고 하는 프로그램의 설계가 제대로 되지 못하여 실패한 것도 있었습니다.
이걸 해결할 수 있는 방법이 없을까 생각을 해보다가
제가 그동안 언어나 알고리즘 같은 쪽에서만 공부를 해오고 개발을 해도 혼자서 하였지
설계 방법이나 프로젝트 일정 계획 등을 공부한 적이 없고 그렇다고 여럿이서 같이 하는 프로젝트를 한 적도 없었습니다.
앞으로도 여러가지 단체 프로젝트를 계속 할 것인데, 이런 실수를 반복하지 않기 위해 뭔가 더 공부해야 한다는 생각이 들었습니다.
그래서 이런쪽을 공부하고 싶은데, 설계, 개발 방법론, 디자인 패턴 등등.. 여기 저기 책이나 인터넷을 찾아보고 있지만
뭐부터 시작해야 할지 감이 잘 안잡혀서 이렇게 교수님께 조언을 구하고자 메일을 보냅니다.
마땅히 먼저 연락드리고 찾아뵈어서 여쭈어 봐야 마땅하나 사정이 여의치 못해 이렇게 메일로 여쭙게 된 점 사과드립니다.
요즘 날씨가 많이 변덕스럽습니다. 건강 조심하시고, 곧 추석인데 좋은 한가위 되십시오.
2010.09.17
정보컴퓨터공학부 2학년 양희철 올림.
그리고 그 답변
양희철군 기억을 합니다.
양희철 군이 경험한 상황은 대규모/복잡한 소프트웨어를 여러 개발자가 함께 개발할 때 발생하는 전형적인 것들입니다.
여러분 같은 학생들뿐만 아니라, 전문적인 개발자 팀에서도 마찬가지로 겪는 상황입니다.
C++/Java 등의 언어를 이용한 코딩 기법이 아니라, 그런 상황을 극복할 수 있는 다른 기법들이 있고, 이러한 기법들은 모두 소프트웨어공학이라는 학문 분야에 해당됩니다.
3학년 2학기의 수업에서 아주 조금이나마 소프트웨어공학을 접할 수 있을 것입니다.
서점에 있는 소프트웨어공학 도서들은 다소 이론적이고 현실에 적용하기에는 너무나 설명이 피상적입니다. 마차 컴퓨터공학 개론과 같은 수준의 내용을 담고 있습니다. 그러니 소프트웨어 공학 도서는 당장은 큰 도움이 되지 않습니다.
우선 프로젝트의 실패(목표를 달성하지 못하는 모든 상황)의 원인을 구체적으로 나열해 보세요.
근본 원인에 따라서 다른 해결책이 있을 수 있습니다.
서로 다른 개발자의 능력은
1) 교육을 통하여 동일한 수준의 개발 능력을 갖추도록 한다.
2) 개발을 위한 표준적인 절차를 도입/강제화 한다.
3) 표준적인 코딩 스타일을 도입/강제화 한다.
등이 대표적인 방법입니다.
그리고 의사 소통의 문제는 대부분 기록/표현의 부정확성과 의사소통의 오해에 기인합니다.
마치 우리말/한글 등으로 표현/소통할 때의 문제점을 극복하려면 C++/Java 처럼 명확한 문법을 가진 언어를 이용해서 프로그램을 표현하고 토론해야 합니다.
C++/Java 등은 programming language이므로 설계 단계에서 사용하기에는 너무나 primitive/complex합니다.
UML을 도입해 보기 바랍니다. UML을 이용하면 설계 단계에서 class, algorithm 등을 명확하게 표현하고 모든 개발자들이 이해/검토하는 것이 가능합니다.
UML도 C++/Java 와 같은 언어(표현법)이지만, 도식(diagram)으로 되어 있고, 주로 설계 단계에서 사용된다는 점만 특별합니다.
GOF의 Design pattern 책을 보면 약간은 다르지만 UML 표현법이 사용되고 있습니다.
팀을 lead하기 위해서는 먼저 다양한 깊이 있는 지식이 필요합니다. 즉 본인이 어떤 것이 잘된 코도/시스템이고 어떻게 하는 것이 잘된 코드/시스템을 만드는 방법인 지를 알아야 합니다. 다음의 순으로 공부를 해 보기 바랍니다.
1) Refactoring by Martin Fowler
2) Design pattern by GoF
3) UML and Object-oriented Analysis/Design by Chae: 검색해 보면 제 이름의 책이 3권 있을 것입니다. 클래스.. 라는 책과 실전프로젝트(2009년)이 도움이 될 것입니다.
4) Software testing
5) Software requirement specification by Microsoft Press
1), 2), 5)는 연구실에 와서 대학원 선배들께 한번 물어 보기 바랍니다. 어떤 책인지.
모두 3학년 2학기에 소개는 되지만 수업 시간이 부족하다 보니, 아주 조금만 언급되어 그 중요성이 잘 전달되지 않습니다.
미리 공부해 두면 도움이 될 것입니다.
오타도 있는데, 수정하지 않았다.
잘 모르겠지만 뭔가 방향을 잡을 수 있을것 같다. 오늘 단번에 리팩토링 관련 책을 빌려서 읽고 있다.
대단한건 새벽 두시 반에 보냈는데, 답변이 온 시각이 세시 반 조금 안되어서였다. 그때까지 작업하고 계신건가..