我正在研究USB通信。在此,每次来自主机的数据大小都会变化。为了避免来自主机的这种情况,它将在发送数据之前先发送数据的大小,因此我需要分配主机发送的大小的缓冲区。
来自主机的数据为“ 5”,这是一个字符串,我需要分配大小为5的缓冲区。 例如:rec_buff [5]。从主机读取大小后。
每次大小变化时,我该如何使用C代码片段进行此操作。我不知道该怎么做。我以前在Java上工作,我是C的新手。
我需要不使用动态内存分配。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
我假设您不希望使用可变大小的块分配内存,因为您不希望内存碎片。然后,您要寻找的是一个内存池(固定块大小)或固定大小的数组(在.bss部分中预先分配的一个)。
您可以查看API for memory pool in Zephyr RTOS的外观,并检查源代码以了解实现细节。还有question about implementing own memory pool。
该系统的一个重要方面是处理输入超出缓冲区最大可用空间时发生的情况。您可以例如实现某种状态机并以块为单位解析输入或只是中止。