123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- #if (defined __SES_ARM) || (defined __SES_RISCV) || (defined __CROSSWORKS_ARM)
- #include "SEGGER_RTT.h"
- #include <stdarg.h>
- #include <stdio.h>
- #include "limits.h"
- #include "__libc.h"
- #include "__vfprintf.h"
- #ifndef PRINTF_USE_SEGGER_RTT_FORMATTING
- #define PRINTF_USE_SEGGER_RTT_FORMATTING 0
- #endif
- #ifndef PRINTF_BUFFER_SIZE
- #define PRINTF_BUFFER_SIZE 128
- #endif
- #if PRINTF_USE_SEGGER_RTT_FORMATTING
- int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList);
- int printf(const char *fmt,...) {
- int n;
- va_list args;
- va_start (args, fmt);
- n = SEGGER_RTT_vprintf(0, fmt, &args);
- va_end(args);
- return n;
- }
- #elif PRINTF_BUFFER_SIZE == 0
- static int _putchar(int x, __printf_tag_ptr ctx) {
- (void)ctx;
- SEGGER_RTT_Write(0, (char *)&x, 1);
- return x;
- }
- int printf(const char *fmt, ...) {
- int n;
- va_list args;
- __printf_t iod;
- va_start(args, fmt);
- iod.string = 0;
- iod.maxchars = INT_MAX;
- iod.output_fn = _putchar;
- SEGGER_RTT_LOCK();
- n = __vfprintf(&iod, fmt, args);
- SEGGER_RTT_UNLOCK();
- va_end(args);
- return n;
- }
- #else
- int printf(const char *fmt,...) {
- int n;
- char aBuffer[PRINTF_BUFFER_SIZE];
- va_list args;
- va_start (args, fmt);
- n = vsnprintf(aBuffer, sizeof(aBuffer), fmt, args);
- if (n > (int)sizeof(aBuffer)) {
- SEGGER_RTT_Write(0, aBuffer, sizeof(aBuffer));
- } else if (n > 0) {
- SEGGER_RTT_Write(0, aBuffer, n);
- }
- va_end(args);
- return n;
- }
- #endif
- int puts(const char *s) {
- return SEGGER_RTT_WriteString(0, s);
- }
- int __putchar(int x, __printf_tag_ptr ctx) {
- (void)ctx;
- SEGGER_RTT_Write(0, (char *)&x, 1);
- return x;
- }
- int __getchar() {
- return SEGGER_RTT_WaitKey();
- }
- #endif
|