summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2016-05-20 18:39:50 +1000
committerChris Johns <chrisj@rtems.org>2016-05-25 15:47:34 +1000
commit24d0ee57a4d95f99be6e7e60bd162a30daf0638d (patch)
tree94239c8cc6b21813ca44b6ca89da73f9038914cc /cpukit/rtems
parentpsxtests/psxmsgq01: Fix typo (diff)
downloadrtems-24d0ee57a4d95f99be6e7e60bd162a30daf0638d.tar.bz2
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.
Diffstat (limited to '')
-rw-r--r--cpukit/rtems/include/rtems/rtems/ratemon.h13
-rw-r--r--cpukit/rtems/src/ratemonreportstatistics.c27
2 files changed, 19 insertions, 21 deletions
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 <rtems/rtems/status.h>
#include <rtems/score/thread.h>
#include <rtems/score/watchdog.h>
-#include <rtems/bspIo.h>
+#include <rtems/print.h>
#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 <rtems/rtems/ratemonimpl.h>
#include <rtems/rtems/object.h>
+#include <rtems/print.h>
#include <inttypes.h>
@@ -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 );
}