Неопределенная ссылка на _sbrk в ChibiOS

Я использую ChibiOS 3.x для написания встроенного приложения. При компиляции / компоновке я получаю сообщение об ошибке, подобное этому:

/usr/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/libg.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk'

Где _sbrk определены и как я могу решить эту проблему?

2 ответа

Решение

_sbrk определяется в os/various/syscalls.c, поэтому убедитесь, что этот файл правильно скомпилирован и связан.

Обратите внимание, что _sbrk будет работать правильно, если и только если CH_CFG_USE_MEMCORE == TRUE (вы можете изменить это в chconf.h). В противном случае, malloc() всегда будет возвращать 0 и приведет к errno из ENOMEM, Также см. Этот ответ для более подробного объяснения ENOMEM вопрос.

Также обратите внимание, что для встраиваемых приложений, особенно при высокой надежности, может быть нецелесообразно использовать динамическое выделение памяти (из которых _sbrk является частью) на всех (см. это подробное объяснение)

Добавленной $(CHIBIOS)/os/various/syscalls.c \ в CSRC в моем Makefile

Другие вопросы по тегам