我正在编写软件,以使用BSD套接字通过各种Web协议(TCP / UDP,MQTT,WebSocket,HTTP等)提供对微控制器UART端口的访问。我发现一个常见的主题是,每个处理器都需要使用自己的缓冲区来存储从套接字接收到的数据,然后再处理并发送到UART。
来自较高级别的编程背景,在分配这些缓冲区时,我仍然不确定最佳实践。
优缺点:
static char *buffer;
初始化的buffer = malloc(BUFFER_SIZE)
static char buffer[BUFFER_SIZE]
char buffer[BUFFER_SIZE]
我知道:
即使考虑了所有这些问题,似乎没有什么是显而易见的“最佳”解决方案,而且我已经看到在现有代码中,前3种用于各种组合。如果局部变量方法比动态分配要快得多,那么为什么每个函数都可以根据需要使用自己的缓冲区,为什么还要使用共享暂存缓冲区呢?当然,需要仔细考虑以避免每个函数都具有相同大缓冲区的10个函数,但是在某些情况下,这似乎是最简单的选择。
处理C中缓冲区的首选方法是什么,或者归结为个人喜好?
[david说过,这不太可能是真正的“最佳实践”,但我可以告诉您在做串行工作时通常回用的内容。
如果您确定要在函数返回后不使用缓冲区,并且缓冲区不是很丑陋,那么就想到在堆栈中使用缓冲区。
Pro:快速分配,因为它在堆栈中。
Con:较大的堆栈空间(但在常规计算机上不是问题,但是您的系统的堆栈限制较小)吗?Con:如果函数返回后有数据输入,则可能会损坏内存。Con:无法将缓冲区返回给调用者。
函数uart_io(...){字符缓冲区[BUFFER_SIZE];bla_bla_bla();}
如果您想静态化,那么根据我阅读的内容,一个共享缓冲区似乎很有吸引力。