Сделал как посоветовал Valen. Размер кучи установил в 4 кб. Результат тот же. Вот .map файл для деталей, и, кажется, тут не всё в порядке:
Код:
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
_HEAP 0000C35D 000013FF = 5119. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
0000D35D __sdcc_heap_start
ASxxxx Linker V03.00 + NoICE + sdld, page 6.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
_HEAP_END 0000D75C 00000001 = 1. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
0000D75C __sdcc_heap_end
Здесь не понимаю откуда берётся число 5119 (13FF), ведь в асм-файле задан размер 4096 байт.
Теперь если не задавать при компиляции myheap.rel, то размер кучи становится 1 кб:
Код:
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
_HEAP 0000C35D 000003FF = 1023. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
0000C35D __sdcc_heap_start
ASxxxx Linker V03.00 + NoICE + sdld, page 6.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
_HEAP_END 0000C75C 00000001 = 1. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
0000C75C __sdcc_heap_end
Т.е. установка размера кучи таки работает! Но malloc по-прежнему не отрабатывает. Если не трудно, прошу, Valen, прогоните пример кода, приведённого выше, у себя при разных размерах кучи и желательно свежим билдом SDCC, если это как-то заработает у Вас - будем искать чего я делаю не так.