2016-09-23 8 views
0

私はLPCボードを持っており、ピンを繰り返して、いくつかのLED /ワイヤでそれらを接続するとき、ピンが高いか低いかをチェックする必要があります。問題は、ピンが特定の順序でないことです。私は20の入力GPIOと20の出力を持っています。Cループ用GPIO

私は、ピンをマクロ式として定義しました。 #define GPIO1 0,1 #define GPIO2 1,19そして、私はそれらを配列Egに格納しました。 gpio_outputs[] = {GPIO1, etc};しかし、私はそれがChip_GPIO_SetPinDIROutputのプロトタイプがある私に「少なすぎる引数」

for (i=0;i<sizeof(gpio_outputs);i++){ 
// Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, gpio_outputs[i]); 
//} 

告げるこの配列のループのために何しようとした場合:私は読んでいたものから、今

Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, PIN_INDEX, PIN_NUMBER); 

、マクロ式はこれで動作しません。ですから私の疑問は、どのGPIOをどのように繰り返し処理すればよいのですか?

+0

正しい順番の配列を定義し、それを反復処理します。 –

+0

同じポートに20本のピンがありますか?あなたのマクロの2つの数字は何ですか?また、マクロはそれほど機能しません。必要な実際のデータを持つテーブルを用意する必要があります。 「ピンインデックス」と「ピン番号」の違いは何ですか? – unwind

+0

2つの行があります。各行にはインデックスがあります。例えば。左手の行インデックス0、右手の行1。それは実際にどのように説明するのが簡単ではない。実際のGPIO番号はどこにでもあります。例えば。私はピン0、2の後に19を持っています。 https://cdn-shop.adafruit.com/1200x900/1342-00.jpg – Filip

答えて

1
struct GPIO_Attr { uint8_t pinIndex, pinNumber; }; 
struct GPIO_Attr gpio_outputs[] = { {GPIO1}, {GPIO1} }; // Extra '{}' is necessary to initialize GPIO_Attr fields 
for (i=0;i<sizeof(gpio_outputs)/sizeof(gpio_outputs[0]);i++){ 
    Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, gpio_outputs[i].pinIndex, gpio_outputs[i].pinNumber); 
} 
+0

なぜsizeof(gpio_outputs)をsizeof(gpio_outputs [ 0])? – Filip

+0

sizeof(array)/ sizeof(array [0])=> total_array_size/array_element_size => lengthで配列の長さを取得するのは一般的な方法です。 – pavnik

関連する問題