As you can see, both variables are signed integers. (In the C5510, that is a 16-bit value.) And the format string is correct with respect to %d vs %u. Yet the output fails miserably. TI... "what do I gotta do? Do I have to turn the sand into the sea? Is that what you want from me? To make LOG_printf() love me... make LOG_printf() love meeeeeeeeeee?" -The FFT// Here I have an actual measured frequency error of 41 Hz. // Also, my average error is 41 Hz, so my AFC is tracking well. // Happy day. Also, the printf worked well. ,10446,,AFC : freq_error = 41 Average = 41 // The 5510 is connected to two tuners. // The other tuner is exhibiting a frequency error of -79 Hz... but what is this? // My average error is 65511? Well, not so! // In fact, the average error is really 65511 - 2^16, or -25 Hz. ,10447,,AFC : freq_error = -79 Average = 65511 ... ... ... // HA! Both tuners are currently negative, and things aren't where I had // hoped they would be. YET... the DISPLAY problem with LOG_printf persists. ,10412,,AFC : freq_error = -259 Average = 65413 ,10413,,AFC : freq_error = -59 Average = 65498 Now... I know what you're thinking! You : "He's using %u when he should be using %d". Here's the code that produced this output... int temp, tempavg; // afc_delta_f is a 32 bit value and is signed. // It's a 20.11. So, to be able to display the whole part, I // downshift it and put it into an int (16-bit on 5510) for LOG_printf debugging temp = (int)(p_tuner_s->afc_results.afc_delta_f >> 11) & 0xFFFF; // The same is true for my average. // I down shift the 20.11 value, and // smush it into an int (16 bits) for LOG_printf() size happiness. tempavg = (int)((p_tuner_s->afc_sum/p_tuner_s->afc_count) >> 11) & 0xFFFF; // For Debug TRACE( &trace, "AFC : freq_error = %d Average = %d ", temp, tempavg );