DREAMER

[PIC16F18855] Broken Breakpoints 본문

프로그래밍/MCU

[PIC16F18855] Broken Breakpoints

연소민 2023. 4. 12. 16:35
728x90
반응형
IDE에서 Breakpoint를 설정하다보면 Broken Breakpoints로 불가하다고 뜨는 경우가 있다.

Breakpoints는 크게 hardware breakpoints와 software breakpoints로 나뉜다.

IDE 상에서는 동일하게 보일 수 있지만, 내부 동작에는 차이가 있다. 간단하게 알아보면,

 

[Hardware Breakpoints]

Hardware breakpoints는 프로그램을 중단하는데에 여러 방법이 있다. breakpoints 갯수는 MCU의 하드웨어에 따라 다르다. 

MPLAB X IDE는 hardware breakpoints가 디폴트이다.

 

[Software Breakpoints]

software breakpoints는 Hardware Breakpoints보다 더 많은 곳에서 사용이 가능하지만, 프로그램 메모리 이벤트 중단에만 사용 가능하다. MPLAB IDE에서 사용하려면 Enable로 설정을 해야 하는데, MPLAB REAL ICE와 MPLAB ICD 3 디버거로만 가능하다고 한다. 그래서 현재로서는 테스트 불가하다.

[Hardware vs. Software Breakpoints]

Feature Hardware Breakpoints Software Breakpoints
breakpoints 갯수 MCU의 하드웨어 특성에 따라 제한 제한없음
Breakpoints 저장 위치 Internal debug 레지스터 Flash Program Memory
Breakpoints 적용 Program Memory / Data Memory Program Memory only
Breakpoints 설정 시간 최소시간 Flash Memory 와 page size에 프로그램하는 시간 (oscillator speed에 의해 달라짐)
Breakpoints skidding 대부분의 장치 없음
내구성에 영향 없음 있음
(장치 내구성에 영향을 미치므로, software breakpoints 방식이 사용된 장치는 생산 부품으로 사용하지 않는 게 좋음)

 

[Broken Breakpoints] - MPLAB hardware breakpoints
  • 컴파일러는 함수 호출과 해당 함수의 첫 번째 실행 명령을 프로그램 메모리의 동일한 주소에 할당한다. 그러므로 함수 호출/선언의 breakpoints는 대부분 깨진다. 다음 방법으로 해결할 수 있다.
    • breakpoints를 실행 가능한 행으로 이동시킨다.
    • 프로그램 메모리에 줄 바꿈 점을 직접 추가한다.
    • NOP()을 추가한다.
  • 컴파일러가 코드 사이즈를 줄이기 위해 주변 장치 및 레지스터와 직접적으로 연관이 있지 않은 코드 line에는 breakpoints를 설정하지 못하도록 했을 수도 있다. 컴파일러 코드 최적화 옵션을 변경하여 해결할수 있다. 
    • Oprimization 옵션을 0으로 설정한다.
  • 프로젝트를 닫거나 이동하여서 발생할 수 있으므로, 프로젝트를 열 때 clean & build하여 해결할 수 있다.
    • Clean & Build

 

 

728x90
반응형

'프로그래밍 > MCU' 카테고리의 다른 글

[PIC16F18885] Build Environment Setup  (0) 2023.04.12
Comments