내 부트 로더가 인터럽트 벡터를 사용해야하지만 내 응용 프로그램도 그렇습니다. 상위 벡터는 주소 0x08
에서 시작하고 하위 벡터는 주소 0x18
에서 시작합니다.부트 로더에서 인터럽트를 어떻게 처리합니까?
부트 로더와 다운로드 한 응용 프로그램에서 별도의 인터럽트 기능을 사용할 수 있도록 인터럽트 벡터를 공유하려면 어떻게해야합니까? 나는 PIC18F87J11과 MPLAB XC8 컴파일러를 사용하고 있습니다.
내 부트 로더가 인터럽트 벡터를 사용해야하지만 내 응용 프로그램도 그렇습니다. 상위 벡터는 주소 0x08
에서 시작하고 하위 벡터는 주소 0x18
에서 시작합니다.부트 로더에서 인터럽트를 어떻게 처리합니까?
부트 로더와 다운로드 한 응용 프로그램에서 별도의 인터럽트 기능을 사용할 수 있도록 인터럽트 벡터를 공유하려면 어떻게해야합니까? 나는 PIC18F87J11과 MPLAB XC8 컴파일러를 사용하고 있습니다.
나는 내 작업에서 비슷한 문제에 직면 해있다.
STM32에서 런타임시 벡터 테이블의 위치를 변경할 수 있으므로 좋았습니다.
PIC18에서 부트 로더에서 인터럽트를 사용하지 않기로 선택 했으므로 0x08 및 0x18의 인터럽트 벡터는 GOTO 명령어를 사용하여 응용 프로그램 섹션의 해당 위치로 무조건 리디렉션 할 수 있습니다. 부트 로더에서 인터럽트를 사용해야합니까?
인터럽트가 정말로 필요한 경우 런타임에 응용 프로그램이 실행 중인지 또는 부트 로더가 실행 중인지를 알려주어 올바른 위치로 리디렉션 할 수있는 유용한 방법이 필요하다고 생각합니다. 간단하게하기 위해 STATUS 레지스터 나 RAM의 다른 부분에 영향을주지 않고 테스트 할 수 있기를 원합니다.
RAM의 특수 바이트, 아마도 액세스 뱅크의 최상위 바이트를 예약하는 것이 좋습니다.
unsigned char inBootloader @ 0x5F;
불행하게도,이 부트 로더에 의해로드 된 모든 응용 프로그램이이 규칙을 알고 있어야하고,이 같은 변수를 정의 : XC8은 (는 버그가되지 않은 경우) 당신이 할 수 있도록, 절대적 변수를 배치 할 수 있습니다 같은 자리. 또는 적어도 메모리에 그 위치에 쓰는 것을 피하고 부트 로더 코드가 변수의 상태를 유지하도록해야합니다. 는 0x08에서 귀하의 인터럽트 벡터에 그런
및 올바른 위치로 리디렉션 몇 가지 간단한 논리를 넣어 0x18 :btfss inBootloader, 0
goto 0x4008 ; go to application high vector
goto bootloaderHighIsr
부트 로더가 정말 인터럽트를 필요로하거나 당신이 그것을 구현하는 일이 어떻게이다합니까? 부작용을 해결하기 전에 원인을 조사하십시오. –
지금은 그렇지 않습니다. 부트 로더 코드에서 모든 인터럽트를 제거했습니다. – Ammar