Page 1 of 1

[nRF52] Fix for buffered stdio

Posted: Wed Apr 24, 2019 7:29 pm
by FoldedToad
It appears the current port of nRF does not support buffered stdio.
Hopefully, this will fix that issue and allow support for buffered stdio.

Normally, buffered stdio is optioned in the ./port/nrf/mpconfigport.h file as shown below.

Code: Select all

While this is necessary, the subsequent build failed using current main branch.
The problem is that the GEN genhdr pre-processing for nRF does not include all the necessary directories when scanning for QSTR definitions.

The fix bellow is modeled after other ports' Makefiles (stm32 for example) are constructed.
This has been successfully tested on a PCA10040 board.

Code: Select all

diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile
index 80110f9..2ff01b7 100644
--- a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -158,6 +158,7 @@ SRC_LIB += $(addprefix lib/,\
 	utils/pyexec.c \
 	utils/interrupt_char.c \
 	timeutils/timeutils.c \
+	utils/sys_stdio_mphal.c \
 ifeq ($(MICROPY_FATFS), 1)
@@ -304,7 +305,7 @@ $(BUILD)/$(OUTPUT_FILENAME).elf: $(OBJ)
 	$(Q)$(SIZE) $@
 # List of sources for qstr extraction
 # Append any auto-generated sources that are needed by sources listed in

Re: [nRF52] Fix for buffered stdio

Posted: Sun Sep 15, 2019 7:35 pm
by sebi
Can you describe a bit more what buffered stdio is used for?
I am having difficulties copying files (e.g. using onto a nRF board, and I assume this is due to not having the buffered stdio enabled in my current build. Do you confirm this could be a reason?
I have applied the content of your patch to the Makefile of the latest MicroPython nRF port. However when invoking `make` I still get errors:

Code: Select all

LINK build-pca10040/firmware.elf
/usr/lib/gcc/arm-none-eabi/8.3.1/../../../arm-none-eabi/bin/ld: /tmp/ccFGNuZx.ltrans3.ltrans.o: in function `stdio_ioctl.lto_priv.328':
/mnt/c/micropython/ports/nrf/../../lib/utils/sys_stdio_mphal.c:91: undefined reference to `mp_hal_stdio_poll'
collect2: error: ld returned 1 exit status
make: *** [Makefile:346: build-pca10040/firmware.elf] Error 1
Here is the content of Makefile from line 344 to line 350, line where a modification mentioned in your patch is applied:

Code: Select all

	$(ECHO) "LINK $@"
	$(Q)$(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
	$(Q)$(SIZE) $@

# List of sources for qstr extraction
Hence, the Makefile:346 error corresponds to `$(Q)$(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)`. Do you know what this issue could be? Thanks in advance.