Skip to content
Snippets Groups Projects
Verified Commit e728833c authored by rahix's avatar rahix
Browse files

fix(pycardium): Remove all uses of newlib malloc


Fixes #44

Signed-off-by: default avatarRahix <rahix@rahix.de>
parent 7a39ec76
No related branches found
No related tags found
No related merge requests found
...@@ -71,6 +71,7 @@ upy = static_library( ...@@ -71,6 +71,7 @@ upy = static_library(
elf = executable( elf = executable(
name + '.elf', name + '.elf',
'main.c', 'main.c',
'patch.c',
'mphalport.c', 'mphalport.c',
frozen_source, frozen_source,
modsrc, modsrc,
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "py/mpstate.h" #include "py/mpstate.h"
#include "py/obj.h" #include "py/obj.h"
#include "py/runtime.h" #include "py/runtime.h"
#include "py/mpprint.h"
#include "mxc_delay.h" #include "mxc_delay.h"
#include "max32665.h" #include "max32665.h"
...@@ -15,6 +16,7 @@ ...@@ -15,6 +16,7 @@
#include "epicardium.h" #include "epicardium.h"
#include "api/common.h" #include "api/common.h"
/****************************************************************************** /******************************************************************************
* Serial Communication * Serial Communication
*/ */
...@@ -36,30 +38,15 @@ int DEBUG_printf(const char *fmt, ...) ...@@ -36,30 +38,15 @@ int DEBUG_printf(const char *fmt, ...)
{ {
va_list args; va_list args;
va_start(args, fmt); va_start(args, fmt);
int ret = vprintf(fmt, args); int ret = mp_vprintf(MP_PYTHON_PRINTER, fmt, args);
va_end(args); va_end(args);
return ret; return ret;
} }
/* newlib syscall to allow printf to work */ void __attribute__((noreturn)) sbrk_is_not_implemented___see_issue_44(void);
long _write(int fd, const char *buf, size_t cnt) intptr_t _sbrk(int incr)
{ {
/* sbrk_is_not_implemented___see_issue_44();
* Only print one line at a time. Insert `\r` between lines so
* they are properly displayed on the serial console.
*/
size_t i, last = 0;
for (i = 0; i < cnt; i++) {
if (buf[i] == '\n') {
epic_uart_write_str(&buf[last], i - last);
epic_uart_write_str("\r", 1);
last = i;
}
}
if (last != i) {
epic_uart_write_str(&buf[last], cnt - last);
}
return cnt;
} }
void epic_isr_ctrl_c(void) void epic_isr_ctrl_c(void)
......
#include "epicardium.h"
#include <stdarg.h>
#include <stdio.h>
#include "py/mpprint.h"
#include "py/mphal.h"
#include <string.h>
int printf(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
int ret = mp_vprintf(MP_PYTHON_PRINTER, fmt, ap);
va_end(ap);
return ret;
}
#ifdef putc
#undef putc
#endif /* putc */
int putc(int c, FILE *f)
{
char chr = (char)c;
mp_hal_stdout_tx_strn_cooked(&chr, 1);
return c;
}
#ifdef putchar
#undef putchar
#endif /* putchar */
int putchar(int c)
{
char chr = (char)c;
mp_hal_stdout_tx_strn_cooked(&chr, 1);
return c;
}
int puts(const char *s)
{
int length = strlen(s);
if (length) {
mp_hal_stdout_tx_strn_cooked(s, length);
}
return length;
}
/* Used by mp_hal_move_cursor_back() */
int snprintf(char *str, size_t size, const char *format, ...)
{
/* TODO: What should we do with this? */
return -EIO;
}
/* Use by assert() */
int fiprintf(FILE *f, const char *fmt, ...)
{
/* TODO: Maybe printing everything to UART isn't the correct thing? */
va_list ap;
va_start(ap, fmt);
int ret = mp_vprintf(MP_PYTHON_PRINTER, fmt, ap);
va_end(ap);
return ret;
}
int raise(int sig)
{
/* Ignore signals */
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment