mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-14 20:10:18 +03:00
Merge pull request #7621 from betaflight/bf-allow-compilation-with-no-serial-ports
Allow compilation of the printf code when no serial ports are used.
This commit is contained in:
commit
65603e49a2
6 changed files with 125 additions and 60 deletions
|
@ -52,6 +52,7 @@ extern uint8_t __config_end;
|
||||||
#include "common/color.h"
|
#include "common/color.h"
|
||||||
#include "common/maths.h"
|
#include "common/maths.h"
|
||||||
#include "common/printf.h"
|
#include "common/printf.h"
|
||||||
|
#include "common/printf_serial.h"
|
||||||
#include "common/strtol.h"
|
#include "common/strtol.h"
|
||||||
#include "common/time.h"
|
#include "common/time.h"
|
||||||
#include "common/typeconversion.h"
|
#include "common/typeconversion.h"
|
||||||
|
|
|
@ -38,24 +38,17 @@
|
||||||
|
|
||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
|
|
||||||
#include "common/utils.h"
|
|
||||||
|
|
||||||
#include "drivers/serial.h"
|
|
||||||
#include "io/serial.h"
|
|
||||||
|
|
||||||
#include "printf.h"
|
#include "printf.h"
|
||||||
|
|
||||||
#ifdef REQUIRE_PRINTF_LONG_SUPPORT
|
#ifdef REQUIRE_PRINTF_LONG_SUPPORT
|
||||||
#include "typeconversion.h"
|
#include "typeconversion.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static serialPort_t *printfSerialPort;
|
|
||||||
|
|
||||||
#ifdef REQUIRE_CC_ARM_PRINTF_SUPPORT
|
#ifdef REQUIRE_CC_ARM_PRINTF_SUPPORT
|
||||||
|
|
||||||
typedef void (*putcf) (void *, char);
|
putcf stdout_putf;
|
||||||
static putcf stdout_putf;
|
void *stdout_putp;
|
||||||
static void *stdout_putp;
|
|
||||||
|
|
||||||
// print bf, padded from left to at least n characters.
|
// print bf, padded from left to at least n characters.
|
||||||
// padding is zero ('0') if z!=0, space (' ') otherwise
|
// padding is zero ('0') if z!=0, space (' ') otherwise
|
||||||
|
@ -166,16 +159,6 @@ void init_printf(void *putp, void (*putf) (void *, char))
|
||||||
stdout_putp = putp;
|
stdout_putp = putp;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tfp_printf(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list va;
|
|
||||||
va_start(va, fmt);
|
|
||||||
int written = tfp_format(stdout_putp, stdout_putf, fmt, va);
|
|
||||||
va_end(va);
|
|
||||||
while (!isSerialTransmitBufferEmpty(printfSerialPort));
|
|
||||||
return written;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void putcp(void *p, char c)
|
static void putcp(void *p, char c)
|
||||||
{
|
{
|
||||||
*(*((char **) p))++ = c;
|
*(*((char **) p))++ = c;
|
||||||
|
@ -192,36 +175,5 @@ int tfp_sprintf(char *s, const char *fmt, ...)
|
||||||
return written;
|
return written;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // REQUIRE_CC_ARM_PRINTF_SUPPORT
|
||||||
|
|
||||||
static void _putc(void *p, char c)
|
|
||||||
{
|
|
||||||
UNUSED(p);
|
|
||||||
serialWrite(printfSerialPort, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
void printfSupportInit(void)
|
|
||||||
{
|
|
||||||
init_printf(NULL, _putc);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
// keil/armcc version
|
|
||||||
int fputc(int c, FILE *f)
|
|
||||||
{
|
|
||||||
// let DMA catch up a bit when using set or dump, we're too fast.
|
|
||||||
while (!isSerialTransmitBufferEmpty(printfSerialPort));
|
|
||||||
serialWrite(printfSerialPort, c);
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
void printfSupportInit(void)
|
|
||||||
{
|
|
||||||
// Nothing to do
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void setPrintfSerialPort(serialPort_t *serialPort)
|
|
||||||
{
|
|
||||||
printfSerialPort = serialPort;
|
|
||||||
}
|
|
||||||
|
|
|
@ -106,14 +106,11 @@ regs Kusti, 23.10.2004
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
typedef void (*putcf) (void *, char);
|
||||||
|
extern putcf stdout_putf;
|
||||||
|
extern void *stdout_putp;
|
||||||
|
|
||||||
void init_printf(void *putp, void (*putf) (void *, char));
|
void init_printf(void *putp, void (*putf) (void *, char));
|
||||||
|
|
||||||
// Disabling this, in favour of tfp_format to be used in cli.c
|
|
||||||
//int tfp_printf(const char *fmt, ...);
|
|
||||||
int tfp_sprintf(char *s, const char *fmt, ...);
|
int tfp_sprintf(char *s, const char *fmt, ...);
|
||||||
|
|
||||||
int tfp_format(void *putp, void (*putf) (void *, char), const char *fmt, va_list va);
|
int tfp_format(void *putp, void (*putf) (void *, char), const char *fmt, va_list va);
|
||||||
|
|
||||||
struct serialPort_s;
|
|
||||||
void setPrintfSerialPort(struct serialPort_s *serialPort);
|
|
||||||
void printfSupportInit(void);
|
|
||||||
|
|
86
src/main/common/printf_serial.c
Normal file
86
src/main/common/printf_serial.c
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Cleanflight and Betaflight.
|
||||||
|
*
|
||||||
|
* Cleanflight and Betaflight are free software. You can redistribute
|
||||||
|
* this software and/or modify this software under the terms of the
|
||||||
|
* GNU General Public License as published by the Free Software
|
||||||
|
* Foundation, either version 3 of the License, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* Cleanflight and Betaflight are distributed in the hope that they
|
||||||
|
* will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
* See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this software.
|
||||||
|
*
|
||||||
|
* If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "platform.h"
|
||||||
|
|
||||||
|
#include "common/printf.h"
|
||||||
|
|
||||||
|
#include "drivers/serial.h"
|
||||||
|
#include "io/serial.h"
|
||||||
|
|
||||||
|
#include "printf_serial.h"
|
||||||
|
|
||||||
|
#ifdef SERIAL_PORT_COUNT
|
||||||
|
|
||||||
|
static serialPort_t *printfSerialPort;
|
||||||
|
|
||||||
|
void setPrintfSerialPort(serialPort_t *serialPort)
|
||||||
|
{
|
||||||
|
printfSerialPort = serialPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef REQUIRE_CC_ARM_PRINTF_SUPPORT
|
||||||
|
|
||||||
|
int tfp_printf(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
va_start(va, fmt);
|
||||||
|
int written = tfp_format(stdout_putp, stdout_putf, fmt, va);
|
||||||
|
va_end(va);
|
||||||
|
while (!isSerialTransmitBufferEmpty(printfSerialPort));
|
||||||
|
return written;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _putc(void *p, char c)
|
||||||
|
{
|
||||||
|
UNUSED(p);
|
||||||
|
serialWrite(printfSerialPort, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void printfSerialInit(void)
|
||||||
|
{
|
||||||
|
init_printf(NULL, _putc);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // REQUIRE_CC_ARM_PRINTF_SUPPORT
|
||||||
|
|
||||||
|
// keil/armcc version
|
||||||
|
int fputc(int c, FILE *f)
|
||||||
|
{
|
||||||
|
// let DMA catch up a bit when using set or dump, we're too fast.
|
||||||
|
while (!isSerialTransmitBufferEmpty(printfSerialPort));
|
||||||
|
serialWrite(printfSerialPort, c);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void printfSerialInit(void)
|
||||||
|
{
|
||||||
|
// Nothing to do
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // SERIAL_PORT_COUNT
|
27
src/main/common/printf_serial.h
Normal file
27
src/main/common/printf_serial.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Cleanflight and Betaflight.
|
||||||
|
*
|
||||||
|
* Cleanflight and Betaflight are free software. You can redistribute
|
||||||
|
* this software and/or modify this software under the terms of the
|
||||||
|
* GNU General Public License as published by the Free Software
|
||||||
|
* Foundation, either version 3 of the License, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* Cleanflight and Betaflight are distributed in the hope that they
|
||||||
|
* will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
* See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this software.
|
||||||
|
*
|
||||||
|
* If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
struct serialPort_s;
|
||||||
|
|
||||||
|
void printfSerialInit(void);
|
||||||
|
void setPrintfSerialPort(struct serialPort_s *serialPort);
|
||||||
|
|
||||||
|
int tfp_printf(const char *fmt, ...);
|
|
@ -32,7 +32,7 @@
|
||||||
#include "common/axis.h"
|
#include "common/axis.h"
|
||||||
#include "common/color.h"
|
#include "common/color.h"
|
||||||
#include "common/maths.h"
|
#include "common/maths.h"
|
||||||
#include "common/printf.h"
|
#include "common/printf_serial.h"
|
||||||
|
|
||||||
#include "config/config_eeprom.h"
|
#include "config/config_eeprom.h"
|
||||||
#include "config/feature.h"
|
#include "config/feature.h"
|
||||||
|
@ -246,7 +246,9 @@ void init(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printfSupportInit();
|
#ifdef SERIAL_PORT_COUNT
|
||||||
|
printfSerialInit();
|
||||||
|
#endif
|
||||||
|
|
||||||
systemInit();
|
systemInit();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue