2015-09-07 4 views
0

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

/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). Else, malloc() всегда будет возвращать 0 и привести к errno от ENOMEM. Также см. this answer для более подробного объяснения вопроса ENOMEM.

Также отметим, что для встраиваемых приложений, особенно когда ориентируетесь высокой надежности, он не может быть целесообразно использовать динамическое выделение памяти (из которых _sbrk является частью) на всех (см this detailed explanation)

2

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