Je programme le 8051 depuis environ deux mois et je suis un peu novice en langage C. Je travaille actuellement avec la mémoire flash pour la lire, l'écrire, l'effacer et l'analyser. Je travaille sur la phase d'écriture pour le moment et l'une des tâches que je dois faire est de spécifier un emplacement d'adresse et remplir cet emplacement avec des données puis incrémenter à l'emplacement suivant et le remplir avec des données complémentaires. Donc, et ainsi de suite jusqu'à ce que j'atteigne la fin. Mon dilemme est que j'ai 18 bits d'adresse à jouer avec et actuellement trois octets alloués pour ces 18 bits. Y at-il de toute façon que je puisse combiner ces 18 bits en un int
ou unsigned int
et que j'ajoute comme ça? Ou est ma seule option pour incrémenter le premier octet, puis lorsque cet octet roule sur 0x00
incrémenter l'octet suivant et lorsque celui-ci survole, incrémenter le suivant?C - Incrément de 18 bits en C 8051
J'ai actuellement:
void inc_address(void)
{
P6=address_byte1;
P7=address_byte2;
P2=address_byte3;
P5=data_byte;
while(1)
{
P6++;
if(P6==0x00){P7++;}
else if(P7==0x00){P2++;}
else if(P2 < 0x94){break;} //hex 9 is for values dealing with flash chip
P5=~data_byte;
}
}
Avez-vous des champs de bits disponibles? OK, donc le 8051 a été presque effacé sur la limite CT et a moins de RAM qu'un poisson rouge plat, mais si vous pouvez utiliser 18 bits sur 24 pour un bitfield int var, cela pourrait le faire ... – ThingyWotsit
Votre incrément semble défectueux , si P6 et P7 commencent à 255 par exemple, vous finissez avec P6 et p7 = 1 quand les deux doivent rester à zéro. La boucle n'est pas nécessaire - les "carry tests" doivent être imbriqués. – Clifford
Il serait également préférable d'incrémenter la variable d'adresse et de l'assigner au port plutôt que de l'assigner au port et d'incrémenter les valeurs du port. – Clifford