문제는 다음 정의가하는 일을 이해하지 못한다는 것입니다. 누군가 나에게 설명해 줄 수 있니?함수와 같은 매크로 정의
#define Vpc3MemSet_(_pToVpc3Memory, _bValue, _wLength)\
Vpc3MemSet(_pToVpc3Memory, _bValue, _wLength)
문제는 다음 정의가하는 일을 이해하지 못한다는 것입니다. 누군가 나에게 설명해 줄 수 있니?함수와 같은 매크로 정의
#define Vpc3MemSet_(_pToVpc3Memory, _bValue, _wLength)\
Vpc3MemSet(_pToVpc3Memory, _bValue, _wLength)
매크로는 거의 아무것도 수행하지 않습니다. Vpc3MemSet_
(밑줄)은 Vpc3MemSet
(밑줄 없음)으로 바뀝니다. 이러한 매크로는 대개 플랫폼에 종속적 인 다양한 변형이있는 경우에 적합합니다 (Linux, macOS 및 Windows의 경우). (가상의) 예를 들면 : 당신은 같은 매크로 호출로 플랫폼에 의존하는 함수를 호출 할 수 있습니다
#ifdef __WINDOWS__
#define Vpc3MemSet_(_pToVpc3Memory, _bValue, _wLength)\
Vpc3MemSet(_pToVpc3Memory, _bValue, _wLength)
#else
#define Vpc3MemSet_(_pToVpc3Memory, _bValue, _wLength)\
memset(_pToVpc3Memory, _bValue, _wLength * sizeof(Vpc3))
#endif
는 :
Vpc3MemSet_(memory, value, length);
이 다른 기능은 Windows 및 Linux에서 호출에 확장됩니다.
그러나 한 가지 더.
#if VPC3_SERIAL_MODE
#define CopyToVpc3_(_pToVpc3Memory, _pLocalMemory, _wLength)\
CopyToVpc3(_pToVpc3Memory, _pLocalMemory, _wLength)
#define CopyFromVpc3_(_pLocalMemory, _pToVpc3Memory, _wLength)\
CopyFromVpc3(_pLocalMemory, _pToVpc3Memory, _wLength)
#define Vpc3MemSet_(_pToVpc3Memory, _bValue, _wLength)\
Vpc3MemSet(_pToVpc3Memory, _bValue, _wLength)
#define Vpc3MemCmp_(_pToVpc3Memory1, _pToVpc3Memory2, _wLength)\
Vpc3MemCmp(_pToVpc3Memory1, _pToVpc3Memory2, _wLength)
#else
#define CopyToVpc3_(_pToVpc3Memory, _pLocalMemory, _wLength)\
memcpy(_pToVpc3Memory, _pLocalMemory, _wLength)
#define CopyFromVpc3_(_pLocalMemory, _pToVpc3Memory, _wLength)\
memcpy(_pLocalMemory, _pToVpc3Memory, _wLength)
#define Vpc3MemSet_(_pToVpc3Memory, _bValue, _wLength)\
memset(_pToVpc3Memory, _bValue, _wLength)
#define Vpc3MemCmp_(_pToVpc3Memory1, _pToVpc3Memory2, _wLength)\
memcmp(_pToVpc3Memory1, _pToVpc3Memory2, _wLength)
#endif /* #if VPC3_SERIAL_MODE */
그래서 네 개의 함수를 사용하면 직렬 또는 병렬 모드에 있는지 여부에 따라 두 가지 정의가이 전체 #DEFINE 순서입니다. 아직 memset 함수() 함수는 다음과 같이, 응용 프로그램 소스 파일에서 호출됩니다
/*-----------------------------------------------------------------------*/
/* init application data */
/*-----------------------------------------------------------------------*/
memset(&sDpAppl, 0, sizeof(sDpAppl));
/*-----------------------------------------------------------------------*/
/* initialize VPC3 */
/*-----------------------------------------------------------------------*/
#if VPC3_SERIAL_MODE
Vpc3AsicAddress = (VPC3_ADR)VPC3_ASIC_ADDRESS;
pVpc3 = &sVpc3OnlyForInit;
pDpSystem = &sDpSystemChannel1;
memset(pVpc3, 0, sizeof(VPC3_STRUC));
#else
pVpc3Channel1 = (VPC3_STRUC_PTR)VPC3_ASIC_ADDRESS;
Vpc3AsicAddress = (VPC3_ADR)VPC3_ASIC_ADDRESS;
pVpc3 = pVpc3Channel1;
pDpSystem = &sDpSystemChannel1;
#endif//#if VPC3_SERIAL_MODE
이 다른 기능 것처럼. 또는, 나는 아직도 무엇인가 놓치고 있냐? :/ 그건 그렇고, 나는 직렬 모드이고 CopyToVpc3(), CopyFromVpc3(), Vpc3MemSet(), Vpc3MemCmp()를 이미 정의했다.
환상적입니다. 감사합니다. – Tage