중첩 된 함수가있는 구조를 만들려고합니다.이 구조체는 호출 함수를 단순화하기 위해 중첩 된 함수에 인수로 구조 자체를 전달합니다. 이 코드는 xc16 컴파일러를 사용하여 Pic 24f 시리즈 mcu에서 실행됩니다. 또한 카운트 기능이 중복되어 있음을 알고 있지만 필자는 그것이 내 요점을 설명한다고 생각합니다.struct 자신을 인수로 포인터 함수에 전달합니다.
구조 :
typedef struct
{
uchar Fifo[UART1_RX_MAX_BUFFER_SIZE];
uchar FifoIndex = 0;
uchar FifoCount = 0;
uchar FifoOverrunFlag = FALSE;
uchar (*CountPointer);
uchar (*PutPointer);
}Fifo;
기능 :
// Returns: The number of items in the Fifo
uchar FifoGetCount(Fifo *fifo)
{
return fifo->FifoCount;
}
// Summary: Adds data to the end of the Fifo
// Parameters:
// data: Data to be added to the end of the Fifo
// Returns: True (1) if the data was successfully added
// False (0) if the data was not successfully added
// as a result of the Fifo being full
uchar FifoPut(Fifo *fifo, uchar data)
{
if (fifo->FifoCount > FIFO_MAX_SIZE)
{
fifo->FifoOverrunFlag = TRUE;
return FALSE;
}
uint putIndex = fifo->FifoGetPutIndex();
fifo->Fifo[putIndex] = data;
fifo->FifoCount++;
return TRUE;
}
홈페이지 : uchar (*PutPointer);
그냥 uchar *PutPointer;
를 작성하는 재미있는 방법이라고
Fifo fifo1;
int main()
{
fifo1.CountPointer = FifoGetCount(fifo1);
fifo1.PutPointer = FifoPut(fifo1, uchar data);
// Intended Usage
uchar myCount = fifo1.FifoGetCount();
uchar myData = 1;
fifo1.FifoPut(myData);
}
고마워요, 제가 찾고있는 것이 맞습니다. 약간의 혼란스러운 코드는 일부 코드를 제거하여 컴파일러 문제를 무시한 결과입니다. – user2419860