상황 :
TI MSP430에 단위 테스트가 임베드되었습니다. 단위 테스트는 gcc로 컴파일 된 리눅스 호스트에서 실행됩니다. 이 프로젝트는 다소 크고 주로 레거시 코드입니다.
마이크로 컨트롤러 레지스터에 대한 호출을 가로 채기
문제 : 읽고 다른 사람들과 같은 PCIN_L, PCOUT_L 및 PCDIR_L 같은 레지스터에 기록
있다는 것을 그들이 선언되지 않은 있습니다 말하는 오류가 발생합니다 컴파일 할 때. 이는 호스트에서 실행될 때 그러한 레지스터가 존재하지 않기 때문에 사실입니다.
이전에는 사용할 수없는 함수 (심볼)에 대한 호출을 가로 채고 가짜 함수로 호출을 리디렉션하여 미리 정의 된 값만 반환하는 방법을 배웠습니다. 이것은 링커 옵션 -Wl --wrap,someSymbol
을 사용했습니다.
Makefile:
LDFLAGS=-Wl --wrap,AbsentFunction
SOURCES=WrappedFunctions.c
WrappedFunctions.c:
int __wrap_AbsentFunction(int val_a)
{
return val_a;
}
이 AbsentFunction
-__wrap_AbsentFunction
에 어떤 통화를 리디렉션합니다. 그러나 나는 행운을 빕니다.
Makefile:
LDFLAGS=-Wl --wrap,PCDIR_L
SOURCES=WrappedSymbols.c
WrappedSymbols.c:
char __wrap_PCDIR_L;
질문 :
는 내가 기능에 그랬던 것처럼 레지스터 비슷한 할 수 있습니까? 프로젝트 코드에 변경 사항을 도입하지 않는 것이 좋습니다.
실제 코드에서 레지스터가 어떻게 액세스되는지 정확하게 보여주십시오. – unwind
레지스터를 읽거나 쓰는 작은 보조 기능을 작성하십시오. 당신은 그들을 감쌀 수 있습니다. –
@unwind, MSP430c54c.h에서
은'#DEFINE P6DIR (PCDIR_H) external_link.h에서 ''#DEFINE의 PA_PINS_AS_OUTPUT | external_link.c IN (P6DIR = 0x30의) 'PA_PIN_AS_OUTPUT;' – Enok82