내 애플 리케이션으로 점프 부트 로더를 작성했습니다. 먼저 간단한 블링키 (blinky-led) 앱으로 시도해보십시오. => 부트 로더에서 앱으로 이동할 수 있습니다.STM32F2 부트 로더 문제
이제 실제 앱으로 건너 뛰고 싶습니다. 응용 프로그램은 물론 혼자 노력하지만 난 내 부트 로더에서 뛰어 때 응용 프로그램은, 즉시 인터럽트가 활성화되어 나의 점프 코드를 충돌 :
이__disable_irq();
SCB->VTOR = (uint32_t)0x0800BA00;
JumpAddress = *(__IO uint32_t*) (0X0800BA04);
JumpToApplication = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) 0X0800BA00);
JumpToApplication();
내가 잘못 알고하지 않는 이유의 활성화 앱이 중단되면 중단됩니다.
는 응용 프로그램으로 이동하기 전에, 당신이 부트 로더에서 초기화 한 모든 초기화를 해제해야
답장을 보내 주셔서 감사합니다. 주변 장치와 연관된 모든 인터럽트를 비활성화했습니다. 당신이 제안한대로 그들을 재설정해야합니까? 점프하기 전에 일반 인터럽트를 다시 활성화해야합니다. SystemInit()에서 VECT_TAB_OFFSET을 0xBA00으로 설정했습니다. 앱이 인터럽트를 활성화해도 여전히 작동하지 않습니다. 다른 아이디어있어? 주소에 관해서는 그 주소에 맞는 링커 응용 프로그램 파일을 작성하는 것이 좋습니다. – caius
@caius - 응용 프로그램을 0x800ba00에 배치하도록 링커에 지시 할 수 있지만 해당 주소로 해당 응용 프로그램을 깜박이면 0x8008000 (32kB)에서 메모리가 지워집니다. 그래도 여전히 작동하지 않는다면 문제를 디버그해야한다고 생각합니다. 적절한 레지스터의 값을 확인하고 정확히 "충돌"("예상대로 작동하지 않음"또는 "하드 오류로 점프"또는 sth else), 등등. –
시간 내 주셔서 다시 한 번 감사드립니다. 디버깅을 시도 할 것이지만 앱으로 건너 뛰는 방법을 모르겠습니다. 주소에 대해서는 내가 제안한대로 0x8008000에서 지울 것입니다. 그것을 지우지 않으면 위험이 무엇인지 이해하려면? – caius