diff --git a/Tools/CPUInfo/CPUInfo.cpp b/Tools/CPUInfo/CPUInfo.cpp index 7c46579bbd..7ffb442dcd 100644 --- a/Tools/CPUInfo/CPUInfo.cpp +++ b/Tools/CPUInfo/CPUInfo.cpp @@ -8,6 +8,9 @@ #include #include +void setup(); +void loop(); + const AP_HAL::HAL& hal = AP_HAL::get_HAL(); void setup() { @@ -15,31 +18,31 @@ void setup() { static void show_sizes(void) { - hal.console->printf("Type sizes:\n"); - hal.console->printf("char : %lu\n", (unsigned long)sizeof(char)); - hal.console->printf("short : %lu\n", (unsigned long)sizeof(short)); - hal.console->printf("int : %lu\n", (unsigned long)sizeof(int)); - hal.console->printf("long : %lu\n", (unsigned long)sizeof(long)); - hal.console->printf("long long : %lu\n", (unsigned long)sizeof(long long)); - hal.console->printf("bool : %lu\n", (unsigned long)sizeof(bool)); - hal.console->printf("void* : %lu\n", (unsigned long)sizeof(void *)); + hal.console->printf("Type sizes:\n"); + hal.console->printf("char : %lu\n", (unsigned long)sizeof(char)); + hal.console->printf("short : %lu\n", (unsigned long)sizeof(short)); + hal.console->printf("int : %lu\n", (unsigned long)sizeof(int)); + hal.console->printf("long : %lu\n", (unsigned long)sizeof(long)); + hal.console->printf("long long : %lu\n", (unsigned long)sizeof(long long)); + hal.console->printf("bool : %lu\n", (unsigned long)sizeof(bool)); + hal.console->printf("void* : %lu\n", (unsigned long)sizeof(void *)); - hal.console->printf("printing NaN: %f\n", sqrt(-1.0f)); - hal.console->printf("printing +Inf: %f\n", 1.0f/0.0f); - hal.console->printf("printing -Inf: %f\n", -1.0f/0.0f); + hal.console->printf("printing NaN: %f\n", (double)sqrtf(-1.0f)); + hal.console->printf("printing +Inf: %f\n", (double)(1.0f/0.0f)); + hal.console->printf("printing -Inf: %f\n", (double)(-1.0f/0.0f)); } #define TENTIMES(x) do { x; x; x; x; x; x; x; x; x; x; } while (0) #define FIFTYTIMES(x) do { TENTIMES(x); TENTIMES(x); TENTIMES(x); TENTIMES(x); TENTIMES(x); } while (0) #define TIMEIT(name, op, count) do { \ - uint32_t us_end, us_start; \ - us_start = AP_HAL::micros(); \ - for (uint8_t i=0; iprintf("%-10s %7.2f usec/call\n", name, double(us_end-us_start)/(count*50.0)); \ + uint32_t us_end, us_start; \ + us_start = AP_HAL::micros(); \ + for (uint8_t i = 0; i < count; i++) { \ + FIFTYTIMES(op); \ + } \ + us_end = AP_HAL::micros(); \ + hal.console->printf("%-10s %7.2f usec/call\n", name, double(us_end - us_start) / (count * 50.0)); \ } while (0) volatile float v_f = 1.0; @@ -59,78 +62,78 @@ volatile uint64_t v_out_64 = 1; static void show_timings(void) { - v_f = 1+(AP_HAL::micros() % 5); - v_out = 1+(AP_HAL::micros() % 3); + v_f = 1+(AP_HAL::micros() % 5); + v_out = 1+(AP_HAL::micros() % 3); - v_32 = 1+(AP_HAL::micros() % 5); - v_out_32 = 1+(AP_HAL::micros() % 3); + v_32 = 1+(AP_HAL::micros() % 5); + v_out_32 = 1+(AP_HAL::micros() % 3); - v_16 = 1+(AP_HAL::micros() % 5); - v_out_16 = 1+(AP_HAL::micros() % 3); + v_16 = 1+(AP_HAL::micros() % 5); + v_out_16 = 1+(AP_HAL::micros() % 3); - v_8 = 1+(AP_HAL::micros() % 5); - v_out_8 = 1+(AP_HAL::micros() % 3); + v_8 = 1+(AP_HAL::micros() % 5); + v_out_8 = 1+(AP_HAL::micros() % 3); - hal.console->printf("Operation timings:\n"); - hal.console->printf("Note: timings for some operations are very data dependent\n"); + hal.console->printf("Operation timings:\n"); + hal.console->printf("Note: timings for some operations are very data dependent\n"); - TIMEIT("nop", asm volatile("nop"::), 255); + TIMEIT("nop", asm volatile("nop"::), 255); - TIMEIT("micros()", AP_HAL::micros(), 200); - TIMEIT("millis()", AP_HAL::millis(), 200); + TIMEIT("micros()", AP_HAL::micros(), 200); + TIMEIT("millis()", AP_HAL::millis(), 200); - TIMEIT("fadd", v_out += v_f, 100); - TIMEIT("fsub", v_out -= v_f, 100); - TIMEIT("fmul", v_out *= v_f, 100); - TIMEIT("fdiv /=", v_out /= v_f, 100); + TIMEIT("fadd", v_out += v_f, 100); + TIMEIT("fsub", v_out -= v_f, 100); + TIMEIT("fmul", v_out *= v_f, 100); + TIMEIT("fdiv /=", v_out /= v_f, 100); TIMEIT("fdiv 2/x", v_out = 2.0f/v_f, 100); - TIMEIT("dadd", v_out_d += v_d, 100); - TIMEIT("dsub", v_out_d -= v_d, 100); - TIMEIT("dmul", v_out_d *= v_d, 100); - TIMEIT("ddiv", v_out_d /= v_d, 100); + TIMEIT("dadd", v_out_d += v_d, 100); + TIMEIT("dsub", v_out_d -= v_d, 100); + TIMEIT("dmul", v_out_d *= v_d, 100); + TIMEIT("ddiv", v_out_d /= v_d, 100); - TIMEIT("sin()", v_out = sinf(v_f), 20); - TIMEIT("cos()", v_out = cosf(v_f), 20); - TIMEIT("tan()", v_out = tanf(v_f), 20); - TIMEIT("acos()", v_out = acosf(v_f * 0.2), 20); - TIMEIT("asin()", v_out = asinf(v_f * 0.2), 20); - TIMEIT("atan2()", v_out = atan2f(v_f * 0.2, v_f * 0.3), 20); - TIMEIT("sqrt()",v_out = sqrtf(v_f), 20); + TIMEIT("sin()", v_out = sinf(v_f), 20); + TIMEIT("cos()", v_out = cosf(v_f), 20); + TIMEIT("tan()", v_out = tanf(v_f), 20); + TIMEIT("acos()", v_out = acosf(v_f * 0.2), 20); + TIMEIT("asin()", v_out = asinf(v_f * 0.2), 20); + TIMEIT("atan2()", v_out = atan2f(v_f * 0.2, v_f * 0.3), 20); + TIMEIT("sqrt()",v_out = sqrtf(v_f), 20); - TIMEIT("iadd8", v_out_8 += v_8, 100); - TIMEIT("isub8", v_out_8 -= v_8, 100); - TIMEIT("imul8", v_out_8 *= v_8, 100); - TIMEIT("idiv8", v_out_8 /= v_8, 100); + TIMEIT("iadd8", v_out_8 += v_8, 100); + TIMEIT("isub8", v_out_8 -= v_8, 100); + TIMEIT("imul8", v_out_8 *= v_8, 100); + TIMEIT("idiv8", v_out_8 /= v_8, 100); - TIMEIT("iadd16", v_out_16 += v_16, 100); - TIMEIT("isub16", v_out_16 -= v_16, 100); - TIMEIT("imul16", v_out_16 *= v_16, 100); - TIMEIT("idiv16", v_out_16 /= v_16, 100); + TIMEIT("iadd16", v_out_16 += v_16, 100); + TIMEIT("isub16", v_out_16 -= v_16, 100); + TIMEIT("imul16", v_out_16 *= v_16, 100); + TIMEIT("idiv16", v_out_16 /= v_16, 100); - TIMEIT("iadd32", v_out_32 += v_32, 100); - TIMEIT("isub32", v_out_32 -= v_32, 100); - TIMEIT("imul32", v_out_32 *= v_32, 100); - TIMEIT("idiv32", v_out_32 /= v_32, 100); + TIMEIT("iadd32", v_out_32 += v_32, 100); + TIMEIT("isub32", v_out_32 -= v_32, 100); + TIMEIT("imul32", v_out_32 *= v_32, 100); + TIMEIT("idiv32", v_out_32 /= v_32, 100); - TIMEIT("iadd64", v_out_64 += v_64, 100); - TIMEIT("isub64", v_out_64 -= v_64, 100); - TIMEIT("imul64", v_out_64 *= v_64, 100); - TIMEIT("idiv64", v_out_64 /= v_64, 100); + TIMEIT("iadd64", v_out_64 += v_64, 100); + TIMEIT("isub64", v_out_64 -= v_64, 100); + TIMEIT("imul64", v_out_64 *= v_64, 100); + TIMEIT("idiv64", v_out_64 /= v_64, 100); - TIMEIT("memcpy128", memcpy((void*)mbuf1, (const void *)mbuf2, sizeof(mbuf1)), 20); - TIMEIT("memset128", memset((void*)mbuf1, 1, sizeof(mbuf1)), 20); - TIMEIT("delay(1)", hal.scheduler->delay(1), 5); + TIMEIT("memcpy128", memcpy((void*)mbuf1, (const void *)mbuf2, sizeof(mbuf1)), 20); + TIMEIT("memset128", memset((void*)mbuf1, 1, sizeof(mbuf1)), 20); + TIMEIT("delay(1)", hal.scheduler->delay(1), 5); } void loop() { - show_sizes(); - hal.console->printf("\n"); - show_timings(); - hal.console->printf("\n"); - hal.scheduler->delay(3000); + show_sizes(); + hal.console->printf("\n"); + show_timings(); + hal.console->printf("\n"); + hal.scheduler->delay(3000); } AP_HAL_MAIN();