2008-10-17 12 views
3

에서 PIC18 재설정하이텍 PIC18 C 컴파일러와 C 코드 를 사용하여 PIC18를 재설정하는 가장 좋은 방법은 무엇 C

편집 : 나는 currenlty

void reset() 
{ 
#asm 
    reset 
#endasm 
} 

만 사용하고

+2

더 나은 방법으로 단일 ASM 명령을 호출 할 수 있습니까? 왜 전체 컨트롤러를 재설정해야합니까? 모든 주변기기를 재설정 하시겠습니까? 방금 PGM 메모리 플래시에 기록 되었습니까? (그럴만 한 좋은 변명에 관한 것입니다) – jpinto3912

답변

1

FAQ here이 있습니다.

Q : 마이크로를 어떻게 재설정합니까?

한 가지 방법은 PIC 설명서에 나와있는, 기본값으로 모든 변수를 재설정하는 것입니다. 그런 다음 어셈블리 언어 을 사용하여 마이크로의 위치 0x0000으로 이동합니다.

#asm LJMP 0000

#endasm 인터럽트 또는 절차 내에서 호출도

이 사용하기 매우 안전합니다. PIC 16x 시리즈 마이크로 에는 8 개의 스택 레벨이 있습니다. 프로 시저가 호출 될 때마다 한 스택 레벨 이 반환 주소로 사용됩니다. 그것은 가 마이크로 리셋이 호출 인터럽트 7 프로 레벨 깊이 그래서하더라도 원형 버퍼이고, 이는 스택 버퍼의 새로운 시작이고, 마이크로 정상적인 따라 계속 .

또 다른 방법은 칩을 프로그래밍 할 때 감시에게 타이머를 설정하는 것입니다, 그리고 사용 CLRWDT() 명령 모든 코드를 통해. 마이크로를 으로 재설정하려면 워치 독 비트 을 지우지 말고 마이크로는 프리스케일러에 따라 약 18ms ~ 2 초 후에 재설정됩니다.

+5

0x0000으로 점프해도 하드웨어 주변 장치가 재설정되지 않습니다. 워치 독이나 리셋 어셈블리 명령어를 사용합니다. – Robert

+0

나는 이것이 아주 오래된 질문이라는 것을 알고 있지만 비슷한 문제로 우연히 만났습니다. 마이크로 칩 유튜브 페이지 (http://www.youtube.com/user/MicrochipTechnology?feature=watch#p/c/1204684BD203E0DC/2/CWc2vxa9VPY)에 따르면 PIC에 추가 된 몇 가지 새로운 향상된 지침이 있습니다. 그 중 하나는 재설정 명령입니다. 나는 아직이 일을하지 못했고 많은 정보를 찾을 수는 없지만 길은있는 것처럼 보인다. –

+0

@DanTwining : 업데이트 해 주셔서 감사합니다. 마이크로 칩이 통과 한 3 년 후에이 향상된 기능을 추가하는 것은 의미가 있습니다. –

0

컴파일러 공급 업체의 런타임 라이브러리에 정의 된 라이브러리 기능이없는 경우 (해당 lib가 마이크로 콘트롤에도 존재하는 경우 더 멋진 세상 ...하지만 그렇다), 그렇다. C 자체가 확실히 당신을 도와주지 않을 것입니다. "리셋"을하면 C가 커버하는 플랫폼 관련 문제가 너무 많습니다.

0

필자는 PIC를 재설정하는 비슷한 API 호출을 사용하는 ccsinfo.com 컴파일러를 사용하지만 컴파일러의 솔루션이 올바른 일을한다고 생각합니다.

7

컴파일러에는 일반적으로 고유 한 reset() 함수가 내장되어 있지만 함수의 기능 만 수행하며 실제 이름은 컴파일러마다 다를 수 있습니다.

이미 가능한 한 최선을 다하고 있습니다.

5

귀하의 답변은 내가 아는 가장 좋은 방법입니다. 핵심은 어셈블리 명령을 함수 호출 안에 모두 가지고 있다는 것입니다. 컴파일러는 인라인 어셈블리가있는 함수를 최적화하지 않으므로 매우 큰 함수에 인라인 명령을 포함하면 컴파일러는 해당 함수의 코드를 최적화하지 않습니다.리셋을 자체 함수에 넣음으로써이를 피할 수 있습니다. 이 함수의 코드는 최적화되지 않지만 작은 함수이므로 누가 신경 써야합니다.