문제

Hitech PICC32를 사용하여 PIC32MX 용 펌웨어를 작성하고 있습니다. 내가 피하고 싶은 문제 중 하나는 대부분의 핀에 여러 이름이 있기 때문에 (예 : an0 = rb0 = cn2 = pged1), 나 또는 다른 사람이 AN0이 이미 사용되었음을 깨닫지 않고 실수로 RB0을 사용할 수 있다는 것입니다. (아날로그/디지털 핀을 잘못 구성하면 필수 연기의 과도한 전류 드로우 및 해제로 이어질 수 있기 때문에 실제로는 치명적일 수 있습니다.)

사용 된 모든 핀을 종합적으로 문서화 할뿐만 아니라 코딩 수준 에서이 문제를 빠르게 이끌 수있는 빠른 방법이 있는지 궁금했습니다. 나는 사람들 (주로 나 자신)이 사용할 수있는 매크로를 원한다. CLAIM_PIN(58), 두 번 실행되면 경고 또는 오류가 발생합니다.

(가능한 유일한 해결책이 너무 끔찍하거나 인재 할 수 없다면, 나는 그것을 잊고 눈물을 흘리거나 불을 피우는 것에 대한 명성을 개발할 것입니다. 나는 또한이 질문을 보았습니다. ~에 대한 매크로 생산 매크로, 그것은 그것을 배제합니다.)

코드는 여러 편집 단위로 작성되었습니다 (적어도, 이것이 문구가 의미하는 바입니다). A2D 코드 용 .H/.C 파일은 SPI와 유사하게 특정 I/O 포트를 사용하는 다양한 주변 장치에 대해 유사하게. 공간이 아닙니다 진짜 문제, 내 코드는 PIC32MX에 충분한 공간을 남깁니다. 또한 다른 __debug 플래그를 사용하여 최종 용도로 PIN 검사 코드를 제거 할 수 있습니다.

도움이 되었습니까?

해결책

좋아, 여기. 런타임 비용 없음.

#define CLAIM(n) struct busy##n {}

CLAIM(58);
CLAIM(58);

두 번 실행하면 오류가 발생합니다.

z.c:4: error: redefinition of ‘struct busy58’

수표를 여러 컴파일 장치로 확장하려면 매크로를 랩핑하는 것이 좋습니다. #if DEBUG 우리는 링커를 사용하여 충돌을 감지하므로 런타임 풋 프린트가 있기 때문입니다.

#define CLAIM(n) char busy##n = 1;
#define CLAIM(n) void busy##n() {} // bdonlan

다른 팁

#define CLAIM_PIN(n) char claimed_pin_##n;

이제 두 개의 코드가 핀을 청구하려고하면 기호가 이중으로 정의되고 컴파일러 또는 링커가 오류를 생성합니다.

편집하다: 의견을 바탕으로 이것은 더 나을 수 있습니다.

#define CLAIM_PIN(n) void claimed_pin_#nn(void) {}

런타임 오버 헤드를 감당할 수 있거나 이것이 디버깅을위한 것이라면 IOPinOpen() 매크로 속임수를 다루는 대신 사용중인 핀을 추적하는 기능.

반면에, Mark Ransom의 업데이트 된 답변 +1의 가치가있었습니다.

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