因為有了Source Insight 的幫助,在看程式真的是快、狠、準
不過如果遇到不會的,還是無濟無事
最近在學USB,還沒學懂但已經賺到C語言的用法了
其中一個是我以前比較少用的方式,指標式的副程式(Master大大回應的很詳細)
USB裡面有幾個有趣的寫法,為了了解其運作,自己練習一般
#define EP1_OUT_Callback Process1
#define EP2_OUT_Callback Process2
#define EP3_OUT_Callback Process3
#define EP4_OUT_Callback Process4
#define EP5_OUT_Callback Process5
#define EP6_OUT_Callback Process6
#define EP7_OUT_Callback Process7
int k1;
void Process1(void)
{
k1=1;
}
void Process2(void)
{
k1=2;
}
void Process3(void)
{
k1=3;
}
void Process4(void)
{
k1=4;
}
void Process5(void)
{
k1=5;
}
void Process6(void)
{
k1=6;
}
void Process7(void)
{
k1=7;
}
void (*pEpInt_OUT[7])(void) =
{
EP1_OUT_Callback,
EP2_OUT_Callback,
EP3_OUT_Callback,
EP4_OUT_Callback,
EP5_OUT_Callback,
EP6_OUT_Callback,
EP7_OUT_Callback,
};
typedef struct _Task{
void (*TASK1)(void);
void (*TASK2)(void);
void (*TASK3)(void);
void (*TASK4)(void);
void (*TASK5)(void);
void (*TASK6)(void);
void (*TASK7)(void);
}Task;
Task ak =
{
Process1,
Process2,
Process3,
Process4,
Process5,
Process6,
Process7
};
int EPindex=0;
Task *ak1 ;
int main(void){
/*
while(1){
if (EPindex>6)EPindex=0;
(*pEpInt_OUT[EPindex])();
EPindex++;
}
*/
/*
while(1){
Process1( );
Process2( );
Process3( );
Process4( );
Process5( );
Process6( );
Process7( );
}
*/
/*
while(1){
ak.TASK1( );
ak.TASK2( );
ak.TASK3( );
ak.TASK4( );
ak.TASK5( );
ak.TASK6( );
ak.TASK7( );
}
*/
ak1=&ak;
while(1){
ak1->TASK1( );
ak1->TASK2( );
ak1->TASK3( );
ak1->TASK4( );
ak1->TASK5( );
ak1->TASK6( );
ak1->TASK7( );
}
}
上面有四種不同副程式的寫法,有興趣的人可以自行compiler,有問題可以請教Bee大大,應該會得到更滿意的答案。
沒有留言:
張貼留言