2016-10-02 17 views
0

릴리스 코드를 실행하면 MicroChip PIC 코드 프로그램이 RESET 명령을 실행하면 프로세서가 재설정되고 잘 정의 된 상태가되어 실행됩니다 처음부터 시작됩니다.디버그 모드에서 소프트웨어 RESET 명령을 실행 한 후 MPLAB을 재설정하고 계속 실행하십시오.

디버그 모드에서 실행하면 MPLAB가 완전히 중지됩니다. 다시 실행하려면 수동으로 명령해야합니다. 대신 릴리스 모드와 동일한 동작을 원한다. 다시 시작하고 처음부터 실행을 시작한다.

RESET 명령을 GOTO 0 명령으로 바꾸려고 시도했지만 PIC 프로세서가 이상한 상태이고 CAN2 포트가 작동하지 않습니다 (CAN1이 정상적으로 작동 함). 실제 하드웨어 재설정 만 정상 작동으로 복원됩니다.

저는 MPLAB 8.2를 사용 중이며 타겟에는 PIC30F IC가 있습니다.

답변

0

내 솔루션은 소프트웨어 리셋을 원할 때마다 호출되는 루틴을 다음과 같이 선언하는 것입니다. NOP에는 중단 점이 있으므로 vReset()이 호출되면 디버거가 중지되고 MPLABX의 재설정 기능 (디버그 | 재설정)을 사용하여 프로세서를 직접 다시 시작할 수 있습니다. 루틴은 릴리스 빌드에 대해 정상적으로 실행됩니다.

void vReset(void) 
    // This routine resets the CPU 
    { 
    // Perform any other cleanup tasks before resetting... 

    // If in debug mode, hang here before the reset (a reset locks up the debugger) 
    #ifdef __DEBUG // Defined by MPLABX when building project for debugging 
     for(;;) 
     { 
      __asm__ volatile ("nop"); // In case a breakpoint is placed here, will not get optimized away 
     }; 
    #endif 

    // Reset CPU 
    __asm__ volatile ("reset"); 
    } 

내가 MPLAB8를 사용하지 않는, 그래서 아마 당신은 __DEBUG이 아닌 다른 뭔가를 테스트해야하고, 나이가 컴파일러 (예를 들어, C30)를 사용하는 경우 ASM 구조는 다르게 포맷 될 수 있습니다.

+0

감사합니다. 단지 내 질문과 관련이 있습니다. 오해가 발생하지 않도록 제 질문을 더 잘 표현할 수있는 방법을 제안 해 주실 수 있습니까? –

+0

필자가 알고있는 바를 달성 할 수있는 방법이 없습니다. MPLABX에 대한 경험으로 소프트웨어 리셋도 디버깅 모드를 다시 설정하므로 디버깅 환경을 완전히 다시 시작해야합니다 (PIC 재 프로그래밍이 필요하므로 속도가 느림). 비슷한 것이 MPLAB8에서 발생하는 것으로 보입니다. 내 해결 방법은 이상적이지는 않지만 (수동으로 다시 시작해야 함) 적어도 디버깅 모드에서 소프트웨어 재설정의 자동 "트랩"을 가져와 디버깅 세션이 소프트웨어 리셋에서 생존 할 수 있습니다. – EBlake

+0

> 내 지식으로는 당신이 원하는 것을 성취 할 수있는 방법이 없습니다. \t \t Dang! 감사. –