Itérer int tableau de longueur inconnue

Je suis en train de parcourir un tableau qui contiendra jusqu'à un maximum de 4 éléments - aucune connaissance de la matrice de longueur existe.

Pseudo-Code

void insert_vals(uint8_t num, uint8_t *match_num, uint8_t *value)
{
uint8_t i;
while(data_exists)  //how do I determine if data exists in 'value'?
{
switch(num)
{
case 0:
{
switch(match_num[i])
{
case 0:
hw0reg0 = value[i];
case 1:
hw0reg1 = value[i];
case 2:
hw0reg2 = value[i];
case 3:
hw0reg3 = value[i];
}
}
case 1:
{
switch(match_num[i])
{
case 0:
hw1reg0 = value[i];
case 1:
hw1reg1 = value[i];
case 2:
hw1reg2 = value[i];
case 3:
hw1reg3 = value[i];                 
}
}
//etc. 2 other cases
}
i++;
}
}

Appelant Exemple (Pseudo-Code)

/*
* num: hardware device select from 1 - 4
* match_num: 4 possible matches for each hardware device
* value: 32-bit values to be assigned to 4 possible matches
* NOTE: This function assumes hardware devices are selected
* in a consecutive order; I will change this later.
*/
//example calling code - we could have configured 4 hardware devices
insert_vals(0, [0, 1], [0x00000001, 0x000000FF]);  //arg2 and arg3 equal in length

Comment puis-je accomplir?

Dans un tableau de caractères, C ajoutera automatiquement '\0' à la fin du tableau, mais cela ne semble pas être le cas pour un tableau d'entiers. Si j'étais en quelque sorte en mesure de déterminer la longueur de match_num et value (voir if déclaration) au moment de l'exécution à l'origine, puis qui me permettrait de créer un for boucle.

Modifier

Depuis que je sais qu'il y aura un maximum de 4 éléments, je n'ai pas pu faire quelque chose de similaire à la suivante?

void insert_vals(uint8_t num, uint8_t *match_num, uint32_t *value)
{
int i;
for(i = 0; i < 4; i++)
{
if(value[i] == -1)
break;
else
{
//Assign data
}
}
}
  • .........de la magie?
  • S'il vous plaît montrer le code appelant.
  • Désolé les gars - là vous allez.
  • Cet appel code compile pour vous?
  • Non, ce n'est qu'une pseudo-code. J'aurais probablement pour déclarer le tableau à l'extérieur de l'appel de la fonction, non?
  • Désolé, je ne comprends pas votre intention. Je ne comprends pas votre pseudo soit. Pourriez-vous préciser? BTW: qu'est-ce que data_exists ?
  • pour le registre des affectations, je vous recommande d'utiliser des macros et ##. BTW, les macros ne sont pas mauvaises en C.
  • Merci pour l'astuce - j'apprends que je vais, c'est génial.
  • La caisse de la modifier gars - tout ce que je cherche, c'est un moyen d'affecter des données à certains registres, et étant donné que je vais avoir un init fonction qui va utiliser cette fonction, ce sera au moment de la compilation.
  • bonne chance pour votre voyage. Si vous êtes en apprentissage, puis de macros ## ne peut pas réellement être une bonne suggestion pour vous de mettre en œuvre. Si vous êtes vraiment faire embarqués, alors je vous recommande de regarder à travers votre compilateur vendeurs de code pour manipuler des registres et de le faire comme ça. (ils ont probablement des fonctions d'aide/macros pour mettre en place certains des périphériques)

InformationsquelleAutor Biff | 2013-02-22