2016-09-23 4 views
0

J'ai une carte LPC et j'ai besoin de parcourir les broches et de vérifier si elles sont hautes ou basses quand je les connecte avec des LED/fils. Le problème que je trouve est que les broches ne sont pas dans un ordre spécifique. J'ai 20 entrées GPIO et 20 sorties.C GPIO pour la boucle

J'ai défini les broches comme des expressions macro. #define GPIO1 0,1 #define GPIO2 1,19 puis je les ai stockés dans un tableau Eg. gpio_outputs[] = {GPIO1, etc}; mais si je tente de faire une boucle de ce tableau, il me dit « trop peu d'arguments »

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

Le prototype de Chip_GPIO_SetPinDIROutput est:

Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, PIN_INDEX, PIN_NUMBER); 

Maintenant, d'après ce que je lis , l'expression de macro ne fonctionne pas avec cela. Donc ma question est comment puis-je parcourir chaque GPIO sans avoir à le faire manuellement pour tous les 40?

+0

Définissez un tableau avec l'ordre correct des broches, puis parcourez-le. –

+0

Est-ce que toutes les 20 broches sont dans le même port? Quels sont les deux nombres dans votre macro? Et non, les macros ne fonctionnent pas comme ça, vous devrez avoir une table qui a les données dont vous avez besoin. Quelle est la différence entre un "index de broche" et un "numéro de broche"? – unwind

+0

Il y a deux rangées. Chaque rangée a un index. Par exemple. l'index de la main gauche 0, la main droite 1. Ce n'est pas vraiment comme cela mais plus facile à expliquer. Les numéros de GPIO réels sont partout. Par exemple. J'ai un 1, 19 après la broche 0, 2. https://cdn-shop.adafruit.com/1200x900/1342-00.jpg – Filip

Répondre

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

Pouvez-vous me dire pourquoi divisez-vous sizeof (gpio_outouts) par sizeof (gpio_outputs [ 0])? – Filip

+0

C'est un idiome courant pour obtenir une longueur de tableau en C. sizeof (array)/sizeof (array [0]) => total_array_size/array_element_size => length. – pavnik