SlideShare a Scribd company logo
1 of 40
IoT 개발자를 위한
Embedded C에서 TDD를 해보자
nRF51-DK에서 TDD test result 추출하기
• 평범한 학부생이 Embedded C에서 TDD를 실천하기 위해 시도했던 경험과 결과물입니
다.
• 정답이 아닐 수도 있지만, 임베디드 개발을 하면서 느꼈던 폐쇄적인 정보 공유가 조금이
라도 개방 되었으면 하는 바람으로 작성하였습니다.
• 개발 환경
• Windows 10
• 타깃 보드 : nRF51-DK
• 타깃 시스템 환경
■ SDK version : SDK 10
■ Soft Device version : soft device 110
■ Compiler : arm-none-eabi-gcc 4.9.3
• TDD를 시작하기에 앞서 타깃 시스템 개발 환경이 구축되어있지 않다면, 먼저 다른 예제
를 통해 환경을 구축하고 시작 하시는 것을 권장합니다.
• nRF51-DK 환경 구축(Link1, Link2)
TDD 실행에 앞서 Embedded C에서 쓰이는 unit test framework는 뭐가 있을까요?
TDD Framwork
UNITY
사이트
Embedded C에는 대표적으로 2가지 unit test framwork가 있습
니다.
Cpputest
사이트
TDD Framwork
UNITY
Unity는 C언어 기반의 framwork 이고
Cpputest는 C++언어 기반의 framwork 입니다.
C C++
Cpputest
TDD Framwork
Cpputes
t
사이트
UNITY
사이트
Unity는 테스트 결과를 확인하기 위해서 4개의 파일이 필요하고,
main.c
LedDriver
.c
LedDriver
Test
.c
LedDriver
Test
Runner
.c
TDD Framwork
UNITY
사이트
Cpputest
사이트
Cpputest는 3개의 파일을 만들면 됩니다.
main.c
LedDriver
.c
LedDriver
Test
.c
TDD Framwork
UNITY
여기서는 Unity를 사용합니다.
Unity는 Ceedling이라는 훌륭한 Bootstrapping tool을 지원하고
Embedded C와 호환이 좋기 때문입니다.
Bootstrapping Tool인 Ceedling이란 무엇일까요?
Ceedling - TDD Bootstrapping tool
• Ceedling은 명령 프롬프트 창에서 TDD 실행 자동화를 지원합니다.
• 여기를 참고해서 설치를 완료해주세요.
CEEDLING
설치를 완료하셨다면 앞으로 “30초”, TDD 테스트 결과를 확인할 수 있습니다.
Ceedling - 프로젝트 생성
• 명령 프롬프트 창에서 프로젝트를 관리하는 임의의 폴더로 이동한 뒤,
• $ceedling new TDD
Ceedling – TDDModule 모듈 생성
• $cd TDD
• $rake module:create[TDDModule/TDDModule]
Ceedling - 테스트
● $rake test:all
이제 호스트 시스템(PC)에서 테스트 결과를 확인할 수 있습니다!
앞에서 사용한 Ceedling에 대해 조금 더 설명을 드리자면,
Ceedling - 명령어 도움말
• $rake -T
Ceedling - 테스트
• 테스트 코드 입니다.
• ..../TDD/test/test_LedDriver.c
Ceedling - TDD
• ..../TDD/test/support에 테스트에 필요한 파일을 추가 해주면 별도의 경로
지정 없이 code 내에서 include 가능합니다.
• Assert 함수는 ..../TDD/vendor/ceedling/vendor/unity/src/unity.h에서
확인 가능합니다.
• SUT와 Test code를 수정하면서 TDD를 진행하면 됩니다.
• Ceedling의 자세한 사용법은 여기를 참고해주세요.
Ceedling은 프로젝트 생성, 모듈 추가 그리고 테스트 환경 구축까지
빠른 주기로 실행 가능한 강력한 Bootstrapping Tool입니다.
그렇다면, 호스트 시스템(PC)이 아닌 타깃 시스템(nRF51-DK)에서 실행되는 테스트 코드는
어떻게 실행 결과를 확인할 수 있을까요?
타깃 시스템 - Unity framework
• 복잡한 동작 방식과는 관계없이 최종적으로 Unity framework는 출력 함수
putchar() 를 통해 테스트 결과를 출력하는 기능을 가지고 있습니다.
UNITY
타깃 시스템 - 출력 함수
• 그렇기 때문에, 테스트 결과를 PC에서 출력하는 방법은 간단합니다.
• 타깃 시스템이 putchar() 함수를 지원하도록 하거나,
• Unity framwork에서 출력 함수 putchar() 를 타깃 시스템이 지원하는 출력 함수로 대체 합
니다.
UNITY
putchar() write()
타깃 시스템 - nRF51-DK
• nRF51-DK는 <stdio.h> 파일을 include 하여 putchar()함수를 지원합니
다.
putchar()
nRF51-DK에서 putchar() 함수로 출력 되는 테스트 결과를 어떻게 PC에서 확인하면 될까요?
• putchar() 함수를 통해 출력 되는 결과는 UART 통신을 통해 호스트 시스템
(PC)에서 확인이 가능하게 됩니다.
UART 통신
UNITY
시리얼 터미널
• 시리얼 통신이 가능한 프로그램을 자유롭게 설치해주세요.
• 여기서는 Teraterm을 사용하도록 하겠습니다.
시리얼 터미널
• nRF51-DK를 연결하고,
• Teraterm 메뉴에서 설정 - 시리얼 포트를 클릭 한 뒤에 위와 같이 설정합니
다.
• 포트는 동일하지 않을 수 있습니다.
이제 nRF51-DK에서 구동 가능한 프로젝트 구성을 하고,
최종적으로 nRF51-DK를 통해 테스트 결과를 PC에서 확인해보도록 하겠습니다.
프로젝트 구성
• https://github.com/KimmTY/nRF51_Unit_Testing 에서 repository를 다운 받거나,
• 명령 프롬프트창에서 원하는 폴더로 이동 후,
• git clone https://github.com/KimmTY/nRF51_Unit_Testing.git 입력합니다.
프로젝트 구성 - 환경구축
• https://github.com/KimmTY/nRF51_Unit_Testing 에서 Need section은 모두 충족
시켜주세요.
nRF51-DK에서 TDD를 해보자 - Compile
• nRF51-DK를 연결한 상태에서,
• 명령 프롬프트 창을 실행하고,
• $cd nRF51_Unit_Testing
• $make all
nRF51-DK에서 TDD를 해보자 - Soft Device
• $make flash_softdevice
nRF51-DK에서 TDD를 해보자 - Application
• $make flash nrf51422_xxac_s110
Application까지 Flash하고 Teraterm 터미널을 확인해보면,
테스트 결과
마지막 절차인 타깃 시스템이 보낸 테스트 결과를 시리얼 터미널로 확인 가능하게 되었습니다!
이제는 하드웨어에 의존적인 부분까지도 TDD를 실천할 수 있습니다.
Text color, 출력 옵션, Test code 추가 등 TDD를 진행하면서 궁금한 점은 여기를 참고해주세
요.
임베디드 시스템에서 TDD를 실천하는 것은 도전적이라고 생각합니다.
열악한 디버깅 환경에서
SW로부터 발생하는 문제인지,
HW로부터 발생하는 문제인지,
확인조차 되지 않는 일이 매일 같이 발생합니다.
TDD를 실천함으로써 HW와 SW 경계가 명확해지고,
설계는 더욱 개선됩니다.
이 자료가 정답이 아닐 수도 있지만,
조금이라도 도움이 되어 즐거운 TDD 라이프가 만들어지면 좋겠습니다.
또한, 임베디드 개발자는 컴파일러, 타깃 시스템 등 특성을 많이 타고
범용적이지 않은 상황을 자주 마주하게 됩니다.
그때마다 서로의 경험을 공유하고 지식을 나눈다면,
더 많은 임베디드 개발자분들이 더 신뢰가 가고 안정적인 프로젝트를 만들지 않을까 싶습니다.
감사합니다.
김태엽
ktim610sw@gmail.com

More Related Content

What's hot

A brief study on Kubernetes and its components
A brief study on Kubernetes and its componentsA brief study on Kubernetes and its components
A brief study on Kubernetes and its componentsRamit Surana
 
Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansibleKhizer Naeem
 
Kubernetes architecture
Kubernetes architectureKubernetes architecture
Kubernetes architectureJanakiram MSV
 
Kubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive OverviewKubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive OverviewBob Killen
 
Gitlab ci, cncf.sk
Gitlab ci, cncf.skGitlab ci, cncf.sk
Gitlab ci, cncf.skJuraj Hantak
 
GitLab for CI/CD process
GitLab for CI/CD processGitLab for CI/CD process
GitLab for CI/CD processHYS Enterprise
 
Continuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIContinuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIDavid Hahn
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentationJohn Lynch
 
Environment management in a continuous delivery world (3)
Environment management in a continuous delivery world (3)Environment management in a continuous delivery world (3)
Environment management in a continuous delivery world (3)Victor Iglesias
 
A Practical Introduction to git
A Practical Introduction to gitA Practical Introduction to git
A Practical Introduction to gitEmanuele Olivetti
 
Tìm hiểu và triển khai ứng dụng Web với Kubernetes
Tìm hiểu và triển khai ứng dụng Web với KubernetesTìm hiểu và triển khai ứng dụng Web với Kubernetes
Tìm hiểu và triển khai ứng dụng Web với KubernetesGMO-Z.com Vietnam Lab Center
 
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and IstioAdvanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and IstioAnimesh Singh
 
Kubernetes Webinar - Using ConfigMaps & Secrets
Kubernetes Webinar - Using ConfigMaps & Secrets Kubernetes Webinar - Using ConfigMaps & Secrets
Kubernetes Webinar - Using ConfigMaps & Secrets Janakiram MSV
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshoploodse
 
Using GitLab CI
Using GitLab CIUsing GitLab CI
Using GitLab CIColCh
 
Pulumi. Modern Infrastructure as Code.
Pulumi. Modern Infrastructure as Code.Pulumi. Modern Infrastructure as Code.
Pulumi. Modern Infrastructure as Code.Yurii Bychenok
 

What's hot (20)

A brief study on Kubernetes and its components
A brief study on Kubernetes and its componentsA brief study on Kubernetes and its components
A brief study on Kubernetes and its components
 
Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansible
 
Kubernetes architecture
Kubernetes architectureKubernetes architecture
Kubernetes architecture
 
Kubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive OverviewKubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive Overview
 
Git undo
Git undoGit undo
Git undo
 
Git real slides
Git real slidesGit real slides
Git real slides
 
Gitlab ci, cncf.sk
Gitlab ci, cncf.skGitlab ci, cncf.sk
Gitlab ci, cncf.sk
 
GitLab for CI/CD process
GitLab for CI/CD processGitLab for CI/CD process
GitLab for CI/CD process
 
Continuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIContinuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CI
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Environment management in a continuous delivery world (3)
Environment management in a continuous delivery world (3)Environment management in a continuous delivery world (3)
Environment management in a continuous delivery world (3)
 
A Practical Introduction to git
A Practical Introduction to gitA Practical Introduction to git
A Practical Introduction to git
 
Tìm hiểu và triển khai ứng dụng Web với Kubernetes
Tìm hiểu và triển khai ứng dụng Web với KubernetesTìm hiểu và triển khai ứng dụng Web với Kubernetes
Tìm hiểu và triển khai ứng dụng Web với Kubernetes
 
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and IstioAdvanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
 
Gitlab CI/CD
Gitlab CI/CDGitlab CI/CD
Gitlab CI/CD
 
Kubernetes Webinar - Using ConfigMaps & Secrets
Kubernetes Webinar - Using ConfigMaps & Secrets Kubernetes Webinar - Using ConfigMaps & Secrets
Kubernetes Webinar - Using ConfigMaps & Secrets
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshop
 
Using GitLab CI
Using GitLab CIUsing GitLab CI
Using GitLab CI
 
Pulumi. Modern Infrastructure as Code.
Pulumi. Modern Infrastructure as Code.Pulumi. Modern Infrastructure as Code.
Pulumi. Modern Infrastructure as Code.
 
What Is Helm
 What Is Helm What Is Helm
What Is Helm
 

Similar to IoT 개발자를 위한 Embedded C에서 TDD를 해보자

빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
Bdd 개요 및 Karma 도입 예
Bdd 개요 및 Karma 도입 예Bdd 개요 및 Karma 도입 예
Bdd 개요 및 Karma 도입 예Seulgi Choi
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Samsung Electronics
 
CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)DONGSU KIM
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
강좌 03 개발환경 구축
강좌 03 개발환경 구축강좌 03 개발환경 구축
강좌 03 개발환경 구축chcbaram
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
242 naver-2
242 naver-2242 naver-2
242 naver-2NAVER D2
 
Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)Lusain Kim
 
델파이 소스코드의재발견
델파이 소스코드의재발견델파이 소스코드의재발견
델파이 소스코드의재발견Devgear
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 
개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2Daniel Lim
 
Deploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxDeploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxwonyong hwang
 
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCPDaegeun Kim
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기hanbeom Park
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018Shengzhe Li
 

Similar to IoT 개발자를 위한 Embedded C에서 TDD를 해보자 (20)

빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
TDD
TDDTDD
TDD
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
Bdd 개요 및 Karma 도입 예
Bdd 개요 및 Karma 도입 예Bdd 개요 및 Karma 도입 예
Bdd 개요 및 Karma 도입 예
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900
 
CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
강좌 03 개발환경 구축
강좌 03 개발환경 구축강좌 03 개발환경 구축
강좌 03 개발환경 구축
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
242 naver-2
242 naver-2242 naver-2
242 naver-2
 
Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)
 
델파이 소스코드의재발견
델파이 소스코드의재발견델파이 소스코드의재발견
델파이 소스코드의재발견
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2
 
Deploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxDeploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptx
 
Tdd ver.2
Tdd ver.2Tdd ver.2
Tdd ver.2
 
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCP
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018
 

IoT 개발자를 위한 Embedded C에서 TDD를 해보자

  • 1. IoT 개발자를 위한 Embedded C에서 TDD를 해보자 nRF51-DK에서 TDD test result 추출하기
  • 2. • 평범한 학부생이 Embedded C에서 TDD를 실천하기 위해 시도했던 경험과 결과물입니 다. • 정답이 아닐 수도 있지만, 임베디드 개발을 하면서 느꼈던 폐쇄적인 정보 공유가 조금이 라도 개방 되었으면 하는 바람으로 작성하였습니다.
  • 3. • 개발 환경 • Windows 10 • 타깃 보드 : nRF51-DK • 타깃 시스템 환경 ■ SDK version : SDK 10 ■ Soft Device version : soft device 110 ■ Compiler : arm-none-eabi-gcc 4.9.3 • TDD를 시작하기에 앞서 타깃 시스템 개발 환경이 구축되어있지 않다면, 먼저 다른 예제 를 통해 환경을 구축하고 시작 하시는 것을 권장합니다. • nRF51-DK 환경 구축(Link1, Link2)
  • 4. TDD 실행에 앞서 Embedded C에서 쓰이는 unit test framework는 뭐가 있을까요?
  • 5. TDD Framwork UNITY 사이트 Embedded C에는 대표적으로 2가지 unit test framwork가 있습 니다. Cpputest 사이트
  • 6. TDD Framwork UNITY Unity는 C언어 기반의 framwork 이고 Cpputest는 C++언어 기반의 framwork 입니다. C C++ Cpputest
  • 7. TDD Framwork Cpputes t 사이트 UNITY 사이트 Unity는 테스트 결과를 확인하기 위해서 4개의 파일이 필요하고, main.c LedDriver .c LedDriver Test .c LedDriver Test Runner .c
  • 8. TDD Framwork UNITY 사이트 Cpputest 사이트 Cpputest는 3개의 파일을 만들면 됩니다. main.c LedDriver .c LedDriver Test .c
  • 9. TDD Framwork UNITY 여기서는 Unity를 사용합니다. Unity는 Ceedling이라는 훌륭한 Bootstrapping tool을 지원하고 Embedded C와 호환이 좋기 때문입니다.
  • 11. Ceedling - TDD Bootstrapping tool • Ceedling은 명령 프롬프트 창에서 TDD 실행 자동화를 지원합니다. • 여기를 참고해서 설치를 완료해주세요. CEEDLING
  • 12. 설치를 완료하셨다면 앞으로 “30초”, TDD 테스트 결과를 확인할 수 있습니다.
  • 13. Ceedling - 프로젝트 생성 • 명령 프롬프트 창에서 프로젝트를 관리하는 임의의 폴더로 이동한 뒤, • $ceedling new TDD
  • 14. Ceedling – TDDModule 모듈 생성 • $cd TDD • $rake module:create[TDDModule/TDDModule]
  • 15. Ceedling - 테스트 ● $rake test:all
  • 16. 이제 호스트 시스템(PC)에서 테스트 결과를 확인할 수 있습니다! 앞에서 사용한 Ceedling에 대해 조금 더 설명을 드리자면,
  • 17. Ceedling - 명령어 도움말 • $rake -T
  • 18. Ceedling - 테스트 • 테스트 코드 입니다. • ..../TDD/test/test_LedDriver.c
  • 19. Ceedling - TDD • ..../TDD/test/support에 테스트에 필요한 파일을 추가 해주면 별도의 경로 지정 없이 code 내에서 include 가능합니다. • Assert 함수는 ..../TDD/vendor/ceedling/vendor/unity/src/unity.h에서 확인 가능합니다. • SUT와 Test code를 수정하면서 TDD를 진행하면 됩니다. • Ceedling의 자세한 사용법은 여기를 참고해주세요.
  • 20. Ceedling은 프로젝트 생성, 모듈 추가 그리고 테스트 환경 구축까지 빠른 주기로 실행 가능한 강력한 Bootstrapping Tool입니다.
  • 21. 그렇다면, 호스트 시스템(PC)이 아닌 타깃 시스템(nRF51-DK)에서 실행되는 테스트 코드는 어떻게 실행 결과를 확인할 수 있을까요?
  • 22. 타깃 시스템 - Unity framework • 복잡한 동작 방식과는 관계없이 최종적으로 Unity framework는 출력 함수 putchar() 를 통해 테스트 결과를 출력하는 기능을 가지고 있습니다. UNITY
  • 23. 타깃 시스템 - 출력 함수 • 그렇기 때문에, 테스트 결과를 PC에서 출력하는 방법은 간단합니다. • 타깃 시스템이 putchar() 함수를 지원하도록 하거나, • Unity framwork에서 출력 함수 putchar() 를 타깃 시스템이 지원하는 출력 함수로 대체 합 니다. UNITY putchar() write()
  • 24. 타깃 시스템 - nRF51-DK • nRF51-DK는 <stdio.h> 파일을 include 하여 putchar()함수를 지원합니 다. putchar()
  • 25. nRF51-DK에서 putchar() 함수로 출력 되는 테스트 결과를 어떻게 PC에서 확인하면 될까요?
  • 26. • putchar() 함수를 통해 출력 되는 결과는 UART 통신을 통해 호스트 시스템 (PC)에서 확인이 가능하게 됩니다. UART 통신 UNITY
  • 27. 시리얼 터미널 • 시리얼 통신이 가능한 프로그램을 자유롭게 설치해주세요. • 여기서는 Teraterm을 사용하도록 하겠습니다.
  • 28. 시리얼 터미널 • nRF51-DK를 연결하고, • Teraterm 메뉴에서 설정 - 시리얼 포트를 클릭 한 뒤에 위와 같이 설정합니 다. • 포트는 동일하지 않을 수 있습니다.
  • 29. 이제 nRF51-DK에서 구동 가능한 프로젝트 구성을 하고, 최종적으로 nRF51-DK를 통해 테스트 결과를 PC에서 확인해보도록 하겠습니다.
  • 30. 프로젝트 구성 • https://github.com/KimmTY/nRF51_Unit_Testing 에서 repository를 다운 받거나, • 명령 프롬프트창에서 원하는 폴더로 이동 후, • git clone https://github.com/KimmTY/nRF51_Unit_Testing.git 입력합니다.
  • 31. 프로젝트 구성 - 환경구축 • https://github.com/KimmTY/nRF51_Unit_Testing 에서 Need section은 모두 충족 시켜주세요.
  • 32. nRF51-DK에서 TDD를 해보자 - Compile • nRF51-DK를 연결한 상태에서, • 명령 프롬프트 창을 실행하고, • $cd nRF51_Unit_Testing • $make all
  • 33. nRF51-DK에서 TDD를 해보자 - Soft Device • $make flash_softdevice
  • 34. nRF51-DK에서 TDD를 해보자 - Application • $make flash nrf51422_xxac_s110
  • 35. Application까지 Flash하고 Teraterm 터미널을 확인해보면,
  • 37. 마지막 절차인 타깃 시스템이 보낸 테스트 결과를 시리얼 터미널로 확인 가능하게 되었습니다! 이제는 하드웨어에 의존적인 부분까지도 TDD를 실천할 수 있습니다. Text color, 출력 옵션, Test code 추가 등 TDD를 진행하면서 궁금한 점은 여기를 참고해주세 요.
  • 38. 임베디드 시스템에서 TDD를 실천하는 것은 도전적이라고 생각합니다. 열악한 디버깅 환경에서 SW로부터 발생하는 문제인지, HW로부터 발생하는 문제인지, 확인조차 되지 않는 일이 매일 같이 발생합니다. TDD를 실천함으로써 HW와 SW 경계가 명확해지고, 설계는 더욱 개선됩니다. 이 자료가 정답이 아닐 수도 있지만, 조금이라도 도움이 되어 즐거운 TDD 라이프가 만들어지면 좋겠습니다.
  • 39. 또한, 임베디드 개발자는 컴파일러, 타깃 시스템 등 특성을 많이 타고 범용적이지 않은 상황을 자주 마주하게 됩니다. 그때마다 서로의 경험을 공유하고 지식을 나눈다면, 더 많은 임베디드 개발자분들이 더 신뢰가 가고 안정적인 프로젝트를 만들지 않을까 싶습니다.