diff --git a/chprintf.c b/chprintf.c index 5b3d24e..9859eee 100644 --- a/chprintf.c +++ b/chprintf.c @@ -87,8 +87,8 @@ static char * ulong_freq(char *p, uint32_t freq, uint32_t precision) { uint8_t flag = FREQ_PSET; - if (precision == 0) - flag|=FREQ_PREFIX_SPACE; + flag|= precision == 0 ? FREQ_PREFIX_SPACE : FREQ_NO_SPACE; + if (precision == 0 || precision > MAX_FREQ_PRESCISION) precision = MAX_FREQ_PRESCISION; char *q = p + MAX_FREQ_PRESCISION; @@ -132,11 +132,6 @@ ulong_freq(char *p, uint32_t freq, uint32_t precision) // Get string size uint32_t i = (b - q); - // Limit string size, max size is - precision - if (precision && i > precision) { - i = precision; - flag |= FREQ_NO_SPACE; - } // copy string // Replace first ' ' by '.', remove ' ' if size too big do { @@ -150,6 +145,8 @@ ulong_freq(char *p, uint32_t freq, uint32_t precision) c = *q++; } *p++ = c; + if (!(flag & FREQ_PSET) && precision-- == 0) + break; } while (--i); // Put pref (amd space before it if need) if (flag & FREQ_PREFIX_SPACE && s != ' ') diff --git a/plot.c b/plot.c index 17fc7fb..4635149 100644 --- a/plot.c +++ b/plot.c @@ -480,7 +480,8 @@ value(const float v) return v + 90.0 + 20.0*LOG_10_SQRT_50; break; case U_VOLT: - return pow(10, (v-30.0)/20.0) * sqrt(50.0); +// return pow(10, (v-30.0)/20.0) * sqrt(50.0); + return pow(10, (v-30.0)/20.0)*SQRT_50; // return pow(10, v/20.0) * POW_SQRT; //TODO there is an error in this calculation as the outcome is different from the not optimized version break; case U_WATT: @@ -498,13 +499,16 @@ to_dBm(const float v) switch(setting.unit) { case U_DBMV: - return v - 30.0 - 20.0*log10(sqrt(50)); +// return v - 30.0 - 20.0*log10(sqrt(50)); + return v - 30.0 - 20.0*LOG_10_SQRT_50; break; case U_DBUV: - return v - 90.0 - 20.0*log10(sqrt(50.0)); +// return v - 90.0 - 20.0*log10(sqrt(50.0)); //TODO convert constants to single float number as GCC compiler does runtime calculation + return v - 90.0 - 20.0*LOG_10_SQRT_50; break; case U_VOLT: - return log10( v / (sqrt(50.0))) * 20.0 + 30.0 ; +// return log10( v / (sqrt(50.0))) * 20.0 + 30.0 ; + return log10( v / (SQRT_50)) * 20.0 + 30.0 ; break; case U_WATT: return log10(v*1000.0)*10.0; @@ -849,7 +853,7 @@ static void trace_get_value_string( (void)freq; (void) point_count; float v; - char buf2[11]; + char buf2[16]; char buf3[8]; buf2[0]=' '; uint32_t dfreq = 0; @@ -895,7 +899,7 @@ static void trace_get_value_string( } #endif } else { -#if 1 +#if 0 uint32_t resolution = get_sweep_frequency(ST_SPAN); if (resolution <= 2000*POINTS_COUNT) plot_printf(&buf2[1], sizeof(buf2) -1, "%3.3f" , (dfreq + 500) / 1000000.0); @@ -905,7 +909,7 @@ static void trace_get_value_string( plot_printf(&buf2[1], sizeof(buf2) -1, "%3.1f" , (dfreq + 50000) / 1000000.0); } #else - plot_printf(&buf2[1], sizeof(buf2) -1, "%.8qHz" , dfreq); + plot_printf(&buf2[1], sizeof(buf2) -1, "% 8.3qHz" , dfreq); } #endif v = value(coeff[i]);