Ну, наскільки великий ваш ПОС щодо пам’яті?
malloc - це дуже неефективний спосіб розподілу пам’яті. Проблема з цим полягає в тому, що пам'ять може роздроблено за допомогою частого звільнення та зловмисних програм, і лише кілька кілобайт пам'яті, помилки розподілу є занадто поширеними. Цілком ймовірно, що якщо ви використовуєте менший чіп або більш ранній PIC18, немає підтримки для malloc, оскільки Microchip або вважав це дуже важким для реалізації (або, можливо, навіть неможливим у деяких випадках), або недостатньо використовувався для того, щоб бути того варто Не кажучи вже про це, але це також досить повільно, ви дивитесь на 1 цикл, щоб використовувати статичний буфер, який уже доступний, і 100s на 1000s циклів, щоб зробити malloc.
Якщо ви хочете виділити статично, створіть такі речі, як буфер для своїх функцій sprintf (якщо такий є, близько 128 байт), буфер для вашої SD-карти (якщо такий є) тощо, поки не усунете необхідність у malloc. В ідеалі ви використовуєте його лише там, де вам це абсолютно потрібно, і не можете уникнути статичного розподілу, але такі ситуації, як правило, рідкісні і, можливо, є ознакою того, що вам слід дивитись на більші / потужніші мікроконтролери.
І якщо ви розробляєте / переносите "операційну систему" на PIC18 і якщо вона підтримує мікроконтролери, вона, ймовірно, має підтримку статичного розподілу. Наприклад, SQLite3 підтримує статичний розподіл - ви виділяєте йому великий масив буфера, і він використовує це, де це можливо, навіть якщо це не для мікроконтролерів. Якщо це не так, то ви впевнені, що він призначений для невеликого PIC18?