Ну, а насколько велик ваш PIC с точки зрения памяти?
malloc - очень неэффективный способ выделения памяти. Проблема заключается в том, что память может быть фрагментирована с частыми освобождениями и mallocs, и только с несколькими килобайтами памяти, ошибки выделения слишком распространены. Вполне вероятно, что если вы используете меньшую микросхему или более раннюю PIC18, то нет поддержки malloc, поскольку Microchip либо посчитал ее очень сложной для реализации (или, возможно, даже невозможной в некоторых случаях), либо недостаточно используемой для ее использования. стоило того. Не говоря уже об этом, но он также довольно медленный, вы смотрите на 1 цикл, чтобы использовать статический буфер, который уже доступен, и от 100 до 1000 циклов, чтобы сделать malloc.
Если вы хотите выделить статически, создайте такие вещи, как буфер для ваших функций sprintf (если есть, около 128 байт), буфер для вашей SD-карты (если есть) и так далее, до тех пор, пока вы не удалите необходимость в malloc. В идеале вы используете его только там, где это абсолютно необходимо, и не можете избежать статического распределения, но такие ситуации обычно редки и, возможно, являются признаком того, что вы должны смотреть на более крупные / более мощные микроконтроллеры.
И если вы разрабатываете / переносите «операционную систему» на PIC18 и если она поддерживает микроконтроллеры, она, вероятно, поддерживает статическое распределение. Например, SQLite3 поддерживает статическое распределение - вы выделяете ему большой буферный массив, и он использует его там, где это возможно, даже если это не для микроконтроллеров. Если это не так, то вы уверены, что он предназначен для небольшого PIC18?