Hi,
I tried to implement the Btree module in a custom board with an stm32F765.
When in implement the line
"#define MICROPY_PY_BTREE (1)"
into the mpconfigboard.h, I get an error when creating the firmware:
"In file included from ../../py/objmodule.h:29:0,
from ../../py/objmodule.c:30:
../../py/objmodule.c:221:19: error: 'MP_QSTR_btree' undeclared here (not in a function)
{ MP_ROM_QSTR(MP_QSTR_btree), MP_ROM_PTR(&mp_module_btree) },
^
../../py/obj.h:92:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
#define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 2) | 2))
^
../../py/objmodule.c:221:7: note: in expansion of macro 'MP_ROM_QSTR'
{ MP_ROM_QSTR(MP_QSTR_btree), MP_ROM_PTR(&mp_module_btree) },
^"
I used the acutal master branch of micropython (MicroPython v1.9.3-411-g6db0cb78)
I also tried to activate the module in the makefile.
This lead to a different error message, which lead me to also activate :
#define MICROPY_STREAMS_POSIX_API (1)
which ultimatly lead to another error when creating the firmware.
Is this modul working for an stm32 MCU or only for ESP and UNIX ports of micropython?
Btree Module on stm32
Re: Btree Module on stm32
When you make a change like that you should do a clean and then rebuild. Otherwise you run into water errors like you're seeing.
Re: Btree Module on stm32
Hi,
good advice, but I didn't get to compile the firmware for an stm32 port with the BTREE module enabled.
When I add the define for BTREE in the mpconfigboard.h, I get the following error:
build-mcCPU_F7V01/py/objmodule.o:(.rodata.mp_builtin_module_table+0xc4): undefined reference to `mp_module_btree'
When I add a define for BTREE in the make file (like in an esp port), I get the following error:
../../extmod/modbtree.c:324:5: error: 'mp_stream_posix_read' undeclared here (not in a function)
mp_stream_posix_read,
^
../../extmod/modbtree.c:325:5: error: 'mp_stream_posix_write' undeclared here (not in a function)
mp_stream_posix_write,
^
../../extmod/modbtree.c:326:5: error: 'mp_stream_posix_lseek' undeclared here (not in a function)
mp_stream_posix_lseek,
^
../../extmod/modbtree.c:327:5: error: 'mp_stream_posix_fsync' undeclared here (not in a function)
mp_stream_posix_fsync
^
When I then add a define for the Posix api in the mpconfigport.h (#define MICROPY_STREAMS_POSIX_API (1)) and add the posix_helpers.c to the source in the makefile, I get to the following error:
build-mcCPU_F7V01/posix_helpers.o: In function `m_malloc':
posix_helpers.c:(.text.m_malloc+0x0): multiple definition of `m_malloc'
build-mcCPU_F7V01/py/malloc.o:malloc.c:(.text.m_malloc+0x0): first defined here
build-mcCPU_F7V01/posix_helpers.o: In function `m_free':
posix_helpers.c:(.text.m_free+0x0): multiple definition of `m_free'
build-mcCPU_F7V01/py/malloc.o:malloc.c:(.text.m_free+0x0): first defined here
build-mcCPU_F7V01/posix_helpers.o: In function `m_realloc':
posix_helpers.c:(.text.m_realloc+0x0): multiple definition of `m_realloc'
build-mcCPU_F7V01/py/malloc.o:malloc.c:(.text.m_realloc+0x0): first defined here
build-mcCPU_F7V01/extmod/modbtree.o: In function `mod_btree_open':
modbtree.c:(.text.mod_btree_open+0x54): undefined reference to `__errno'
build-mcCPU_F7V01/extmod/modbtree.o: In function `btree_seq':
modbtree.c:(.text.btree_seq+0x2c): undefined reference to `__errno'
build-mcCPU_F7V01/extmod/modbtree.o: In function `btree_iternext':
modbtree.c:(.text.btree_iternext+0x56): undefined reference to `__errno'
build-mcCPU_F7V01/extmod/modbtree.o: In function `btree_subscr':
modbtree.c:(.text.btree_subscr+0x78): undefined reference to `__errno'
build-mcCPU_F7V01/extmod/modbtree.o: In function `btree_get.part.0':
modbtree.c:(.text.unlikely.btree_binary_op.part.1+0x2): undefined reference to `__errno'
build-mcCPU_F7V01/lib/berkeley-db-1.xx/btree/bt_close.o:bt_close.c:(.text.__bt_sync+0x1a): more undefined references to `__errno' follow
Before each build I did a make clean.
Long question short, did anyone of you get the BTREE module to run in an stm32 port, because in the doc of the pyboard the module is listed?
good advice, but I didn't get to compile the firmware for an stm32 port with the BTREE module enabled.
When I add the define for BTREE in the mpconfigboard.h, I get the following error:
build-mcCPU_F7V01/py/objmodule.o:(.rodata.mp_builtin_module_table+0xc4): undefined reference to `mp_module_btree'
When I add a define for BTREE in the make file (like in an esp port), I get the following error:
../../extmod/modbtree.c:324:5: error: 'mp_stream_posix_read' undeclared here (not in a function)
mp_stream_posix_read,
^
../../extmod/modbtree.c:325:5: error: 'mp_stream_posix_write' undeclared here (not in a function)
mp_stream_posix_write,
^
../../extmod/modbtree.c:326:5: error: 'mp_stream_posix_lseek' undeclared here (not in a function)
mp_stream_posix_lseek,
^
../../extmod/modbtree.c:327:5: error: 'mp_stream_posix_fsync' undeclared here (not in a function)
mp_stream_posix_fsync
^
When I then add a define for the Posix api in the mpconfigport.h (#define MICROPY_STREAMS_POSIX_API (1)) and add the posix_helpers.c to the source in the makefile, I get to the following error:
build-mcCPU_F7V01/posix_helpers.o: In function `m_malloc':
posix_helpers.c:(.text.m_malloc+0x0): multiple definition of `m_malloc'
build-mcCPU_F7V01/py/malloc.o:malloc.c:(.text.m_malloc+0x0): first defined here
build-mcCPU_F7V01/posix_helpers.o: In function `m_free':
posix_helpers.c:(.text.m_free+0x0): multiple definition of `m_free'
build-mcCPU_F7V01/py/malloc.o:malloc.c:(.text.m_free+0x0): first defined here
build-mcCPU_F7V01/posix_helpers.o: In function `m_realloc':
posix_helpers.c:(.text.m_realloc+0x0): multiple definition of `m_realloc'
build-mcCPU_F7V01/py/malloc.o:malloc.c:(.text.m_realloc+0x0): first defined here
build-mcCPU_F7V01/extmod/modbtree.o: In function `mod_btree_open':
modbtree.c:(.text.mod_btree_open+0x54): undefined reference to `__errno'
build-mcCPU_F7V01/extmod/modbtree.o: In function `btree_seq':
modbtree.c:(.text.btree_seq+0x2c): undefined reference to `__errno'
build-mcCPU_F7V01/extmod/modbtree.o: In function `btree_iternext':
modbtree.c:(.text.btree_iternext+0x56): undefined reference to `__errno'
build-mcCPU_F7V01/extmod/modbtree.o: In function `btree_subscr':
modbtree.c:(.text.btree_subscr+0x78): undefined reference to `__errno'
build-mcCPU_F7V01/extmod/modbtree.o: In function `btree_get.part.0':
modbtree.c:(.text.unlikely.btree_binary_op.part.1+0x2): undefined reference to `__errno'
build-mcCPU_F7V01/lib/berkeley-db-1.xx/btree/bt_close.o:bt_close.c:(.text.__bt_sync+0x1a): more undefined references to `__errno' follow
Before each build I did a make clean.
Long question short, did anyone of you get the BTREE module to run in an stm32 port, because in the doc of the pyboard the module is listed?
- pythoncoder
- Posts: 5956
- Joined: Fri Jul 18, 2014 8:01 am
- Location: UK
- Contact:
Re: Btree Module on stm32
I don't know the status of the official port but the Loboris port claims to support it: see this post.
Peter Hinch
Index to my micropython libraries.
Index to my micropython libraries.
Re: Btree Module on stm32
I know this is an old thread but I was able to build btree support into the Pyboard 1.1 firmware.
If this interests you, make the following changes to the code:
Change the target board to build for (pretty obvious but here it is) in the Makefile:
Copy posix_helpers.c from the esp8266 port. Add it to the Makefile in the SRC_C section, appending it to the list with a trailing backslash:
Also pretty obviously, add btree module to mpconfigport.mk:
mpconfigport.h: add this line for ssize_t, off_t (and probably others):
also add a #define to mpconfigport.h:
add this to the end of mphalport.c (fixes __errno reference):
Thanks to @Drako for his informative post. I had some spare time over the weekend and I did a lot of grep-ing on the code to find the missing references. I have a program reading from an existing btree database right now and it's working splendidly.
If this interests you, make the following changes to the code:
Change the target board to build for (pretty obvious but here it is) in the Makefile:
Code: Select all
BOARD ?= PYBV11
Code: Select all
posix_helpers.c \
Code: Select all
MICROPY_PY_BTREE = 1
Code: Select all
#include <sys/types.h>
Code: Select all
#define MICROPY_STREAMS_POSIX_API (1)
Code: Select all
extern int mp_stream_errno;
int *__errno() {
return &mp_stream_errno;
}