문제

Hitech PIC18 C 컴파일러를 사용하여 C 코드를 사용하여 PIC18을 재설정하는 가장 좋은 방법은 무엇입니까?

편집하다:

나는 Currenlty를 사용하고 있습니다

void reset()
{
#asm 
  reset
#endasm
}

그러나 더 나은 방법이 있어야합니다

도움이 되었습니까?

해결책

거기에 여기 FAQ.

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

한 가지 방법은 PIC 매뉴얼에 나열된대로 모든 변수를 기본값으로 재설정하는 것입니다. 그런 다음 어셈블리 언어를 사용하여 마이크로의 위치 0x0000으로 이동하십시오.

#ASM LJMP 0x0000

#endasm

이것은 인터럽트 나 절차 내에서 호출 되더라도 사용하기에 매우 안전합니다. PIC 16X 시리즈 Micros에는 8 개의 스택 레벨이 있습니다. 절차가 호출 될 때마다 리턴 주소에 하나의 스택 레벨이 사용됩니다. 원형 버퍼이므로 마이크로가 7 개의 절차 레벨 깊고 재설정이 호출 될 때 인터럽트에 있어도 스택 버퍼의 새로운 시작이며 마이크로는 정상에 따라 계속됩니다.

또 다른 방법은 칩이 프로그래밍 될 때 파수독을 타이머를 설정하고 코드를 통해 clrwdt () 지침을 사용하는 것입니다. 마이크로가 재설정되기를 원할 때, 워치 독 비트를 지우지 않으면 미세 콜러에 따라 마이크로가 약 18ms에서 2 초 후에 재설정됩니다.

다른 팁

컴파일러는 일반적으로 자체 Reset () 함수가 내장되어 있지만 기능이 수행하는 작업 만 수행하며 실제 이름은 컴파일러마다 다를 수 있습니다.

당신은 이미 최선의 방법으로하고 있습니다.

당신의 대답은 내가 아는 가장 좋은 방법입니다. 핵심은 기능 호출 내부에 조립 명령이 있다는 것입니다. 컴파일러는 인라인 어셈블리가있는 함수를 최적화하지 않으므로 재설정 명령어를 매우 큰 함수에 포함 시키면 컴파일러는 해당 기능의 코드를 최적화하지 않습니다. 당신은 자체 기능에 재설정을함으로써 이것을 피했습니다. 이 기능의 코드는 최적화되지 않지만 누가 작은 기능이기 때문에 관심을 갖습니다.

컴파일러 공급 업체의 런타임 라이브러리에 의해 정의 된 라이브러리 기능이 없다면 (마이크로 컨트롤러 세계에 그러한 LIB가 존재하는 경우에도 ...하지만 그렇습니다). C 자체는 확실히 당신을 도울 수 없으며, "재설정"을하는 것은 C가 그것을 다루기에 너무 많은 플랫폼 특정 문제입니다.

그림을 재설정하기위한 비슷한 API 호출이있는 CCSINFO.com 컴파일러를 사용하지만 컴파일러 솔루션이 올바른 일을 할 것이라고 생각합니다.

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