티스토리 뷰
일반적인 C 프로그램은 다음과 같은 코드로부터 시작 한다.
C 프로그램은 반드시 main() 함수로부터 시작 되며, main() 함수의 argument는 int argc, char *argv[]를 가진다. 때로는 세번째 argument로 char *envp[]를 가질수도 있지만 대부분의 경우 사용하지 않는다.
argc와 argv는 쉘에서 프로그램을 실행할 때 실행파일 뒤에 연달아 입력되는 문자열의 개수와 각각의 문자열에 대한 포인터값을 알려주기 위하여 사용된다.
위와 같이 코딩하여 실행 파일을 만들고, 다음과 같이 실행 시켜서 결과를 확인해 본다.
위와 같이 실행하였을 때 전체 argument 개수는 실행파일명 포함 7개가 되고, 각각의 argument에 해당되는 문자열을 프린터하면 위와 같은 결과를 볼 수 있다.
임베디드 시스템에서도 UART를 이용한 user interface에서 동일한 기능을 할 수 있도록 구현해 보도록 하겠다.
먼저 각각의 argument 문자열을 저장할 수 있는 버퍼를 만들어 둔다. 지원 가능한 argument의 개수와 각각의 argument 문자열을 저장할 수 있는 버퍼의 크기는 board.h에 보드 환경에 적절하게 사용자가 직접 설정해 주면 된다.
parse_command() 함수는 사용자가 입력한 문자열을 받아 strtok()를 이용하여 단어 단위로 분리하여 argv_buf에 복사해 둔다. 입력 문자열을 끝까지 분리를 한다음 몇개의 단어로 이루어졌는지 카운트한 결과와 argv_buf주소를 되돌려 준다.
parse_command() 함수를 불러 입력 문자열을 분리하고, print_args()를 이용하여 argument 개수와 각각의 argments 문자열을 프린터 하도록 하였다.
print_args() 함수의 모양을 자세히 보면 main() 함수와 동일한 것을 알 수 있다.
그럼, 실제로 보드에서 실행하여 컴퓨터에서 만들어 본것과 같은 동작을 하는지 확인해 보도록 한다.
'심화' 카테고리의 다른 글
User Interface - Command Line Interface(CLI) (0) | 2017.07.09 |
---|---|
User Interface - 메뉴 방식 (0) | 2017.07.08 |
User Interface - UART 문자열 입력 (0) | 2017.06.29 |
User Interface - UART 특수키 처리 (0) | 2017.06.24 |
megaOS - 13. Mailbox (1) | 2016.11.13 |