J'ai un micro-contrôleur atMega1281 en utilisant C. J'ai une routine pour tirer 4 octets hors d'un bus CAN pour lire un SPN. Je suis en mesure d'obtenir les 4 octets, mais je ne peux pas imprimer le numéro de 4 octets parce qu'il tronque les 2 premiers octets, ce qui en fait un nombre de 16 bits. J'ai essayé d'utiliser unsigned long comme la déclaration sans succès. Quel est le truc lorsque vous utilisez des nombres de 32 bits avec un AVR?Comment combiner 4 octets et faire des calculs mathématiques en C en utilisant AVR
unsigned long engine_hours_raw;
float engine_hours_uint;
engine_hours_raw = (OneMessage.Msg.Data[3] << 24) | (OneMessage.Msg.Data[2] << 16) | (OneMessage.Msg.Data[1] << 8) | OneMessage.Msg.Data[0]);
engine_hours_uint = engine_hours_raw * 0.05;
ftoa(engine_hours_uint, engHours, 1);
UART1_Printf("Engine Hours: %s ", engHours);
Juste pour être sûr: comment allez-vous l'impression du numéro 4 octets? –
En fait, je convertis le flottant en une chaîne en utilisant ftoa et ensuite imprimer comme une chaîne. – Eddie
@Eddie Sur les systèmes embarqués en métal nu, il n'était pas nécessaire de respecter la norme car nous savons que le pointeur est une adresse réelle dans la mémoire :) –