From 24d0ee57a4d95f99be6e7e60bd162a30daf0638d Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Fri, 20 May 2016 18:39:50 +1000 Subject: cpukit, testsuite: Add rtems_printf and rtems_printer support. This change adds rtems_printf and related functions and wraps the RTEMS print plugin support into a user API. All references to the plugin are removed and replaced with the rtems_printer interface. Printk and related functions are made to return a valid number of characters formatted and output. The function attribute to check printf functions has been added to rtems_printf and printk. No changes to remove warrnings are part of this patch set. The testsuite has been moved over to the rtems_printer. The testsuite has a mix of rtems_printer access and direct print control via the tmacros.h header file. The support for begink/endk has been removed as it served no purpose and only confused the code base. The testsuite has not been refactored to use rtems_printf. This is future work. --- cpukit/rtems/include/rtems/rtems/ratemon.h | 13 ++++++------- cpukit/rtems/src/ratemonreportstatistics.c | 27 +++++++++++++-------------- 2 files changed, 19 insertions(+), 21 deletions(-) (limited to 'cpukit/rtems') diff --git a/cpukit/rtems/include/rtems/rtems/ratemon.h b/cpukit/rtems/include/rtems/rtems/ratemon.h index 87bd064c98..6e8fab64d5 100644 --- a/cpukit/rtems/include/rtems/rtems/ratemon.h +++ b/cpukit/rtems/include/rtems/rtems/ratemon.h @@ -35,7 +35,7 @@ #include #include #include -#include +#include #ifdef __cplusplus extern "C" { @@ -356,14 +356,13 @@ void rtems_rate_monotonic_reset_all_statistics( void ); * @brief RTEMS Report Rate Monotonic Statistics * * This routine allows a thread to print the statistics information - * on ALL period instances which have non-zero counts using printk. - * The implementation of this directive straddles the fence between - * inside and outside of RTEMS. It is presented as part of the Manager - * but actually uses other services of the Manager. + * on ALL period instances which have non-zero counts using the RTEMS + * printer. The implementation of this directive straddles the fence + * between inside and outside of RTEMS. It is presented as part of + * the Manager but actually uses other services of the Manager. */ void rtems_rate_monotonic_report_statistics_with_plugin( - void *context, - rtems_printk_plugin_t print + const rtems_printer *printer ); /** diff --git a/cpukit/rtems/src/ratemonreportstatistics.c b/cpukit/rtems/src/ratemonreportstatistics.c index 856d431bdc..3f264df487 100644 --- a/cpukit/rtems/src/ratemonreportstatistics.c +++ b/cpukit/rtems/src/ratemonreportstatistics.c @@ -20,6 +20,7 @@ #include #include +#include #include @@ -29,8 +30,7 @@ #define NANOSECONDS_FMT "%06" PRId32 void rtems_rate_monotonic_report_statistics_with_plugin( - void *context, - rtems_printk_plugin_t print + const rtems_printer *printer ) { rtems_status_code status; @@ -39,12 +39,9 @@ void rtems_rate_monotonic_report_statistics_with_plugin( rtems_rate_monotonic_period_status the_status; char name[5]; - if ( !print ) - return; - - (*print)( context, "Period information by period\n" ); - (*print)( context, "--- CPU times are in seconds ---\n" ); - (*print)( context, "--- Wall times are in seconds ---\n" ); + rtems_printf( printer, "Period information by period\n" ); + rtems_printf( printer, "--- CPU times are in seconds ---\n" ); + rtems_printf( printer, "--- Wall times are in seconds ---\n" ); /* Layout by columns -- in memory of Hollerith :) @@ -58,7 +55,7 @@ ididididid NNNN ccccc mmmmmm X 1234567890123456789012345678901234567890123456789012345678901234567890123456789\ \n"); */ - (*print)( context, + rtems_printf( printer, " ID OWNER COUNT MISSED " " CPU TIME WALL TIME\n" " " @@ -90,7 +87,7 @@ ididididid NNNN ccccc mmmmmm X /* * Print part of report line that is not dependent on granularity */ - (*print)( context, + rtems_printf( printer, "0x%08" PRIx32 " %4s %5" PRId32 " %6" PRId32 " ", id, name, the_stats.count, the_stats.missed_count @@ -100,7 +97,7 @@ ididididid NNNN ccccc mmmmmm X * If the count is zero, don't print statistics */ if (the_stats.count == 0) { - (*print)( context, "\n" ); + rtems_printf( printer, "\n" ); continue; } @@ -114,7 +111,7 @@ ididididid NNNN ccccc mmmmmm X struct timespec *total_cpu = &the_stats.total_cpu_time; _Timespec_Divide_by_integer( total_cpu, the_stats.count, &cpu_average ); - (*print)( context, + rtems_printf( printer, "%" PRId32 "." NANOSECONDS_FMT "/" /* min cpu time */ "%" PRId32 "." NANOSECONDS_FMT "/" /* max cpu time */ "%" PRId32 "." NANOSECONDS_FMT " ", /* avg cpu time */ @@ -137,7 +134,7 @@ ididididid NNNN ccccc mmmmmm X struct timespec *total_wall = &the_stats.total_wall_time; _Timespec_Divide_by_integer(total_wall, the_stats.count, &wall_average); - (*print)( context, + rtems_printf( printer, "%" PRId32 "." NANOSECONDS_FMT "/" /* min wall time */ "%" PRId32 "." NANOSECONDS_FMT "/" /* max wall time */ "%" PRId32 "." NANOSECONDS_FMT "\n", /* avg wall time */ @@ -154,5 +151,7 @@ ididididid NNNN ccccc mmmmmm X void rtems_rate_monotonic_report_statistics( void ) { - rtems_rate_monotonic_report_statistics_with_plugin( NULL, printk_plugin ); + rtems_printer printer; + rtems_print_printer_printk( &printer ); + rtems_rate_monotonic_report_statistics_with_plugin( &printer ); } -- cgit v1.2.3