2016-09-23 10 views
0

나는 LPC 보드를 가지고 있으며, 핀을 반복하고 LED/와이어로 연결할 때 이들이 높거나 낮은지 확인해야한다. 문제는 핀이 특정 순서가 아니라는 것입니다. 20 개의 입력 GPIO와 20 개의 출력이 있습니다.C 루프를위한 GPIO

나는 핀을 매크로 표현식으로 정의했다. #define GPIO1 0,1 #define GPIO2 1,19 그리고 배열로 저장했습니다. 내가 읽어 봤는데 것과

Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, PIN_INDEX, PIN_NUMBER); 

이제 :이 배열의 루프를 수행하려고 할 경우 gpio_outputs[] = {GPIO1, etc};하지만 그것은 나를 "너무 적은 인수"

for (i=0;i<sizeof(gpio_outputs);i++){ 
// Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, gpio_outputs[i]); 
//} 
Chip_GPIO_SetPinDIROutput의 프로토 타입은

를 알려줍니다 , 매크로식이 작동하지 않습니다. 그래서 제 질문은 모든 GPIO를 수동으로 처리 할 필요없이 어떻게 각 GPIO를 반복 할 수 있습니까?

+0

올바른 순서의 핀으로 배열을 정의한 다음 반복합니다. –

+0

동일한 실제 포트에 20 개의 핀이 모두 있습니까? 매크로의 두 숫자는 무엇입니까? 그리고 매크로는 그렇게 작동하지 않습니다. 필요한 실제 데이터가있는 테이블을 가져야합니다. "핀 인덱스"와 "핀 번호"의 차이점은 무엇입니까? – unwind

+0

두 행이 있습니다. 각 행에는 색인이 있습니다. 예 : 왼쪽 행 색인 0, 오른쪽 행 1. 실제로 설명하는 방법은 아니지만 설명하기 쉽습니다. 실제 GPIO 번호는 여기 저기에 있습니다. 예 : 1, 19, 0, 2 번 핀이 있습니다. 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 => 길이로 배열 길이를 가져 오는 것은 일반적인 관용구입니다. – pavnik