IAR 워크 벤치 툴 체인을 사용하는 임베디드 시스템에서 이상한 ARM 예외를 디버깅하고 있습니다. 때때로 예외가 트랩되면 SVC_STACK이 범위를 벗어난 것으로보고됩니다 (범위를 벗어납니다!). 이것이 관련이 있습니까, 아니면 J-Link JTAG 디버거의 아티팩트일까요? SVC_STACK은 무엇을 위해 사용됩니까? 0x1000 크기로 설정되어 있지만 범위를 벗어나면 힙 영역으로 올라갑니다. 감사!ARM9 SVC_STACK 범위를 벗어 났습니까?
답변
ARM 예외가 발생하면 SVC 모드로 전환됩니다 (IRQ 또는 FIQ - 고속 IRQ 아님). 또한 비 사용자 모드에서 CPRS 레지스터를 설정하여 코드를 직접 입력 할 수도 있지만 시스템을 초기화 할 때를 제외하고는 드문 경우라고 생각합니다.
예외가 발생하면 프로세서는 SVC 스택으로 전환합니다.이 SVC 스택은 시스템 초기화 초기에 설정해야합니다. 귀하의 초기화 코드가 SVC 스택을 제대로 설정하지 않았거나 예외 핸들러 중 하나가 올바르게 코딩되지 않아서 스택을 파기하고있을 가능성이 있습니다.
세 번째 가능성은 원하는대로 ARM 스택을 설정하는 RTOS를 사용한다는 것입니다 (기본적으로 IAR의 초기화 코드가 설정 될 수있는 SVC 스택을 무시). 이 경우 모든 것이 정상이지만 IAR 디버거는 SVC 스택이 범위를 벗어난다고 생각합니다. 디버거는 링커 구성 파일에서 정보를 가져옵니다.하지만 스택이 다른 메모리 영역으로 변경되면, 디버거가 혼란 스러울 것입니다.
이것은 RTOS를 사용할 때 IAR의 사용자 모드 스택에서 항상 발생합니다. 스택은 디버거가 있어야한다고 생각한 CSTACK 세그먼트에없는 태스크 제어 블록을 기반으로 할당되었으며 디버거 자극적 인 경고를 발행합니다. 경고를 없애기 위해 사용할 수있는 몇 가지 프로젝트 구성 설정이 있었지만, 나는 그것이 무엇인지 궁금하지 않았습니다. 우리는 거의 귀찮게 생각하지 않았으며 단지 소음과 함께 살았습니다.
힙 영역의 스택이 유효한지 확인해야합니다. 명시 적으로 이렇게하는 코드가 없으면 틀릴 수도 있습니다. RTOS 벤더에게 물어볼 필요가있다).
ARM Architecture Reference Manual (ARM ARM)은 arm.com에서 무료로 구할 수 있으며 ARM 스택 작동 방식에 대해 자세히 설명합니다. Andrew Sloss, et al.의 ARM System Developer's Guide도 좋은 참고 자료입니다.
- 1. 왜 내 속성이 범위를 벗어 났습니까?
- 2. varchar 데이터 형식에서 datetime 데이터 형식으로 인해 범위를 벗어 났습니까?
- 3. 왜이 코드가 루프를 벗어 났습니까?
- 4. Silverlight가 샌드 박스에서 벗어 났습니까?
- 5. 왜 내 레일 경로가 조금 벗어 났습니까?
- 6. 문자열 인덱스가 범위를 벗어 났습니까? (자바, 문자열 루프) 나는 COSC 과정에 대한 만들고있어이 프로그램은 바로 컴파일되지
- 7. ColdFusion에서 "문자열 색인이 범위를 벗어"argumentcollection
- 8. 언제 asio 타이머가 범위를 벗어 납니까?
- 9. 절대 하단에 위치한 블록이 한 픽셀 씩 벗어 났습니까?
- 10. 사용자가 키보드 나 마우스를 사용하여 WPF TextBox를 벗어 났습니까?
- 11. 왜 개체의 값을 변경하면 viewWillDisappear에서 내 개체가 범위를 벗어 납니까?
- 12. Silverlight 3 : 이벤트 트리거가 특성이 범위를 벗어 났음을 나타냅니다.
- 13. LinqToXML 왜 개체가 범위를 벗어 납니까? 또한 그룹별로해야합니까?
- 14. Embedded C++ (ARM9) 단위 테스트
- 15. 어떻게 arm9 2.4.19 리눅스를 디버깅합니까?
- 16. 자바에서 루프 논리를 벗어 버려야합니다.
- 17. nsstring - 범위를 벗어남
- 18. 다른 객체의 생성자에 인수로 전달 된 C++ 객체는 어떤 순서로 범위를 벗어 납니까?
- 19. 범위를 벗어 났지만 여전히 참조를 보유하고있을 때 Java GC에 어떤 현상이 있습니까?
- 20. ARM9 프로세서에서 안드로이드를 장치로 이식하는 방법은 무엇입니까?
- 21. ARM9 프로세서 용 opencv의 크로스 컴파일
- 22. android.R.id.empty가 Xoom/Honeycomb에서 고장 났습니까?
- 23. #WT에 무슨 일이 일어 났습니까?
- 24. syscalls.h에 무슨 일이 일어 났습니까?
- 25. NUnit에 무슨 일이 일어 났습니까?
- 26. nStatic에 무슨 일이 일어 났습니까?
- 27. 범위를 벗어난 것은 무엇을 의미합니까?
- 28. 범위를 벗어날 가능성이 있음 jquery
- 29. 양식이 완전히 화면에서 벗어 났는지 확인
- 30. tools :: texi2dvi - 무슨 일이 일어 났습니까?
감사합니다. IAR에서 - "EWARM 버전 4.42 용 스택 플러그인은 RTOS를 인식하지 않기 때문에 항상 스택 오버플로에 대해 불평 할 것입니다. RTOS를 사용하는 경우 스택 플러그인을 비활성화해야합니다". Darn - 그랬 으면 좋겠다 - 더 많은 디버그! – Jeff