에서 PIC18 재설정하이텍 PIC18 C 컴파일러와 C 코드 를 사용하여 PIC18를 재설정하는 가장 좋은 방법은 무엇 C
편집 : 나는 currenlty
void reset()
{
#asm
reset
#endasm
}
만 사용하고
가
에서 PIC18 재설정하이텍 PIC18 C 컴파일러와 C 코드 를 사용하여 PIC18를 재설정하는 가장 좋은 방법은 무엇 C
편집 : 나는 currenlty
void reset()
{
#asm
reset
#endasm
}
만 사용하고
가
FAQ here이 있습니다.
Q : 마이크로를 어떻게 재설정합니까?
한 가지 방법은 PIC 설명서에 나와있는, 기본값으로 모든 변수를 재설정하는 것입니다. 그런 다음 어셈블리 언어 을 사용하여 마이크로의 위치 0x0000으로 이동합니다.
#asm LJMP 0000
#endasm 인터럽트 또는 절차 내에서 호출도
이 사용하기 매우 안전합니다. PIC 16x 시리즈 마이크로 에는 8 개의 스택 레벨이 있습니다. 프로 시저가 호출 될 때마다 한 스택 레벨 이 반환 주소로 사용됩니다. 그것은 가 마이크로 리셋이 호출 인터럽트 7 프로 레벨 깊이 그래서하더라도 원형 버퍼이고, 이는 스택 버퍼의 새로운 시작이고, 마이크로 정상적인 따라 계속 .
또 다른 방법은 칩을 프로그래밍 할 때 감시에게 타이머를 설정하는 것입니다, 그리고 사용 CLRWDT() 명령 모든 코드를 통해. 마이크로를 으로 재설정하려면 워치 독 비트 을 지우지 말고 마이크로는 프리스케일러에 따라 약 18ms ~ 2 초 후에 재설정됩니다.
0x0000으로 점프해도 하드웨어 주변 장치가 재설정되지 않습니다. 워치 독이나 리셋 어셈블리 명령어를 사용합니다. – Robert
나는 이것이 아주 오래된 질문이라는 것을 알고 있지만 비슷한 문제로 우연히 만났습니다. 마이크로 칩 유튜브 페이지 (http://www.youtube.com/user/MicrochipTechnology?feature=watch#p/c/1204684BD203E0DC/2/CWc2vxa9VPY)에 따르면 PIC에 추가 된 몇 가지 새로운 향상된 지침이 있습니다. 그 중 하나는 재설정 명령입니다. 나는 아직이 일을하지 못했고 많은 정보를 찾을 수는 없지만 길은있는 것처럼 보인다. –
@DanTwining : 업데이트 해 주셔서 감사합니다. 마이크로 칩이 통과 한 3 년 후에이 향상된 기능을 추가하는 것은 의미가 있습니다. –
컴파일러 공급 업체의 런타임 라이브러리에 정의 된 라이브러리 기능이없는 경우 (해당 lib가 마이크로 콘트롤에도 존재하는 경우 더 멋진 세상 ...하지만 그렇다), 그렇다. C 자체가 확실히 당신을 도와주지 않을 것입니다. "리셋"을하면 C가 커버하는 플랫폼 관련 문제가 너무 많습니다.
필자는 PIC를 재설정하는 비슷한 API 호출을 사용하는 ccsinfo.com 컴파일러를 사용하지만 컴파일러의 솔루션이 올바른 일을한다고 생각합니다.
컴파일러에는 일반적으로 고유 한 reset() 함수가 내장되어 있지만 함수의 기능 만 수행하며 실제 이름은 컴파일러마다 다를 수 있습니다.
이미 가능한 한 최선을 다하고 있습니다.
귀하의 답변은 내가 아는 가장 좋은 방법입니다. 핵심은 어셈블리 명령을 함수 호출 안에 모두 가지고 있다는 것입니다. 컴파일러는 인라인 어셈블리가있는 함수를 최적화하지 않으므로 매우 큰 함수에 인라인 명령을 포함하면 컴파일러는 해당 함수의 코드를 최적화하지 않습니다.리셋을 자체 함수에 넣음으로써이를 피할 수 있습니다. 이 함수의 코드는 최적화되지 않지만 작은 함수이므로 누가 신경 써야합니다.
더 나은 방법으로 단일 ASM 명령을 호출 할 수 있습니까? 왜 전체 컨트롤러를 재설정해야합니까? 모든 주변기기를 재설정 하시겠습니까? 방금 PGM 메모리 플래시에 기록 되었습니까? (그럴만 한 좋은 변명에 관한 것입니다) – jpinto3912