0

関数の呼び出しを簡素化するために、構造自体を引数としてネストされた関数に渡す、ネストされた関数を含む構造を作成しようとしています。コードは、xc16 コンパイラを使用して Pic 24f シリーズ MCU で実行されます。また、 count 関数が冗長であることは知っていますが、それは私の主張を示していると思います。例えば:

構造:

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;
}

主要:

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);
}
4

1 に答える 1

0
于 2014-06-14T23:16:58.133 に答える