문제

STM32 플래시에 두 개의 응용 프로그램이 있고, 하나는 기본적으로 부팅이고 다른 하나는 '기본'응용 프로그램입니다. 나는 각각을 다른 플래시 영역에로드하는 방법을 알아 냈으며 메모리 덤프를 복용 한 후 모든 것이 올바른 장소에있는 것처럼 보입니다.

따라서 재설정을 수행하면 부팅을로드합니다. 현재 부팅이 현재 응용 프로그램으로 이동하는 것입니다. 부팅 디버깅하면이 모든 것이 올바르게 작동하는 것으로 보입니다. 그러나 응용 프로그램으로 점프 한 후 문제가 발생하면 하나의 명령어 (어셈블리)를 실행 한 다음 부팅으로 돌아갑니다. 응용 프로그램에 무기한 상태를 유지해야합니다.

그렇다면 내 질문은 앱에서 어디에서 '점프'해야합니까?

인터럽트 벡터, 재설정 핸들러, 앱의 주요 기능과 같은 몇 가지 잠재적 지점이있는 것 같습니다. 실제로 나는 성공하지 못한 사람들을 모두 시도했습니다.

이 말이되기를 바랍니다. 그렇지 않은 경우 질문을 업데이트하겠습니다.

당신의 도움을 주셔서 감사합니다! 리차드

업데이트 :

  • 나는 디버거에서 놀이를했고 프로그램 카운터를 응용 프로그램의 메인으로 수동으로 변경했는데 그 점이 매력적이어서 점프에 문제가 있다고 생각하게 만들었습니다. 왜 프로그램 카운터가 계속 진행되지 않는지 점프 후?
  • 실제로 PSR 인 것 같습니다. 'T'는 점프에서 재설정됩니다. 점프 후 다시 설정하면 원하는대로 앱으로 계속됩니다.
  • OK는 솔루션을 찾았습니다. 브랜치를 수행 할 때 PC LSB를 1으로 설정해야하거나 'ARM'모드로 떨어질 때 1으로 설정 해야하는 것 같습니다 ( 'Thumb'모드와 같은 16 비트 명령 대신 32 비트 명령어가 있습니다. 작은 문제가 모호합니다. 제게 공유 해 주셔서 감사합니다!
도움이 되었습니까?

해결책

LSB가 1 인 주소로 점프하십시오. 설명은이 사이트를 참조하십시오.http://www.embedded.com/columns/beginerscorner/15200241?_requestid=162471

다른 팁

IAP (Application 프로그래머)를 검색 할 수 있습니다. STM32의 RS232 PSORT에서 부팅 코드를 부팅 할 수 있습니다. 사용을 시작했고 소스 코드를 제공하기 때문에 목적을 위해 수정하는 것이 매우 간단합니다. 기본적으로 재설정 후 IAP를 Say 주소 0x08002000 또는 주소 0x08003000에서 부트로드로 코딩 할 수 있습니다. 그러면 응용 프로그램 코드에서 플래그를 설정 한 다음 다시 시작하면 새 응용 프로그램이 실행되면 도움이되기를 바랍니다.

리차드,

나는 당신이 성공한 똑같은 일을하려고했지만 문제가있었습니다. IAR IDE를 사용하고 *.ICF 파일 ( "PROJ"디렉토리에서)을 업데이트하여 응용 프로그램을 0x08002000에 넣고 0x08000000에 별도의 프로젝트를로드하여 0x08002004의 재설정 벡터에서 주소로 점프했습니다. 부팅 코드가 시작되어 응용 프로그램 시작으로 점프하는 것처럼 보이지만 IAR 초기화 중에 응용 프로그램이 언젠가 실패하여 불법 명령 트랩으로 끝납니다.

응용 프로그램 코드를 통해 단일 단계를 밟은 후 인터럽트 벡터 기본 주소를 응용 프로그램의 내용으로 설정하는 것을 잊어 버렸습니다. 여전히 0x08000000을 가리키고 있었기 때문에 코드는 미쳤습니다. 인터럽트를 활성화하기 전에 벡터 주소를 설정하기 위해 호출을 추가하면 내 문제가 해결되었으며 응용 프로그램을 플래시로 이동하려면 필요합니다.

IRA.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top