티스토리 뷰
앞의 글에서 설명한 CLI 구현 방식에는 조금 불편한 내용이 있다.
새로운 명령을 추가하거나 삭제하기 위해서는 cli_command[] 배열을 수정해야 된다는 것이다. 이것이 크게 문제 되지 않기는 하겠지만 때로는 상당히 번거로운 일이 되기도 한다.
이번 글에서는 좀 더 쉬운 방법을 통해서 CLI 처리 부분에 대한 소스 코드 수정없이 새로운 명령을 추가 하는 방법에 대해서 설명 하도록 하겠다.
이 방법은 링커 프로그램을 이용하는 방법이다.
따라서 이 기능을 위해서 링커 스크립트 파일을 수정하도록 하겠다.
6~8번 줄에 .cli.*에 해당되는 섹션으로 선언된 것들을 .text 섹션에 포함되도록 한다.
그리고 command.h 파일에 다음과 같은 내용을 추가한다.
9~11번 줄은 CLI_CMD라는 매크로를 만들어 주는데 주의해서 보아야 할 내용은 CLI_CMD 매크로를 사용하면 .cli. 섹션으로 선언된다는 것이다.
예를 들어,
위와 같이 만들어 프로젝트를 빌드하고 난 후, map 파일을 열어보면 다음과 같은 결과를 볼 수 있다.
0x08002744 번지에 __cli_cmd_help라는 이름의 배열이 하나 생성되어 있고 .cli.help라는 섹션안에 포함되어 있는 것을 볼 수 있다.
1번 줄은 링커에서 생성한 심볼을 C 코드에서 참조하기 위해 선언된 코드이다.
6번 줄은 .cli 섹션안에 몇개의 테이블이 있는지 계산하는 코드이다.
프로그램을 빌드한 후 보드에서 실행하면 다음과 같은 결과를 볼 수 있다.
현재까지 등록된 명령어는 help 하나 밖에 없기 때문에 help 명령만 보여 진다.
여기까지만 코드를 만들어 놓으면 더이상 CLI를 처리하기 위한 코드는 수정할 필요가 없다. 새로운 명령을 추가하기 위해서는 CLI_CMD 매크로만 이용하면 된다.
toys.c 파일과 media.c 파일에 각각 다음과 같은 코드를 추가한 후 결과가 어떻게 나오는지 확인해 본다.
단지 CLI_CMD 매크로만 이용해서 새로운 명령어가 추가 되었고, 각 명령어를 실행하였을때 정상적으로 명령이 실행되는것을 볼 수 있다.
map 파일을 열어 보면 새로운 명령어가 추가 되었음을 볼 수 있다.
이제 마지막으로 books 명령어를 추가해 보도록 하겠다. books.c 파일에 다음과 같은 코드를 추가한다.
앞의 글에서 사용하였던 코드이다.
프로젝트를 다시 빌드하여 실행해 본다.
의도했던대로 명령어가 제대로 실행되는 것을 확인할 수 있다.
'심화' 카테고리의 다른 글
User Interface - Command Line Interface(CLI) (0) | 2017.07.09 |
---|---|
User Interface - 메뉴 방식 (0) | 2017.07.08 |
User Interface - argc, argv (0) | 2017.07.07 |
User Interface - UART 문자열 입력 (0) | 2017.06.29 |
User Interface - UART 특수키 처리 (0) | 2017.06.24 |