//函数体
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period);
{
// Initialize timer period:
Timer->CPUFreqInMHz = Freq;
Timer->PeriodInUSec = Period;
....
}
//函数调用
ConfigCpuTimer(&CpuTimer0, 200, 500000);
//被传入的结构体
struct CPUTIMER_VARS CpuTimer0;
struct CPUTIMER_VARS {
volatile struct CPUTIMER_REGS *RegsAddr;
Uint32 InterruptCount;
float CPUFreqInMHz;
float PeriodInUSec;
};
struct CPUTIMER_REGS {
union TIM_REG TIM; // CPU-Timer, Counter Register
union PRD_REG PRD; // CPU-Timer, Period Register
union TCR_REG TCR; // CPU-Timer, Control Register
Uint16 rsvd1; // Reserved
union TPR_REG TPR; // CPU-Timer, Prescale Register
union TPRH_REG TPRH; // CPU-Timer, Prescale Register High
};
所以函数ConfigCpuTimer里可以对寄存器位操作,如Timer->RegsAddr->TCR.bit.TSS = 1;
另外,同一个结构体被声明三个不同的名
这是一个很有趣的操作 ,
在一个结构体里面用一个结构体指针类型成员,使函数能灵活用另一个结构体