【发布时间】:2022-08-18 18:59:59
【问题描述】:
我在库中有 3 个缓冲区,每个缓冲区用于单独的数据流。
目前,缓冲区的输入与设备上的数据纠缠在一起,但我想概括设备外数据的输入,以便在不进行预处理的情况下通过相同的算法推送。
我看到 2 个选项。
我最安全的选择是初始化库中的缓冲区并控制那里的缓冲区溢出。
#define BUFFSIZE 100
float buff[BUFFSIZE] = {0};
uint8_t bufferCount = 0;
uint8_t pushSampleToBuffer(float sample)
{
if(bufferCount < BUFFSIZE)
{
buff[bufferCount] = sample;
bufferCount++;
return 0;
}
return 1;
}
另一种选择是使用缓冲区指针。 我认为这对于让用户访问他们自己的缓冲区而不复制它是非常可行的。
#define BUFFSIZE 100
float* algBuffPtr = NULL;
uint8_t algBuffSize = 0;
uint8_t initAlg(float* buffPtr, uint8_t buffSize)
{
if((buffSize < BUFFSIZE) && (algBuffPtr != NULL))
{
algBuffSize = buffSize;
algBuffPtr = buffPtr;
return 0;
}
return 1;
}
有没有办法采用指针方法并更严格地验证指示的地址是否有效?
-
OT:为什么不将布尔值用于布尔值?为什么要使用 0(
false如果 C 将其解释为布尔值)来表示成功? - 什么样的 \”严格地\" 验证你想到了吗?你的目标系统能提供任何关于有效地址的信息吗?
标签: c embedded signal-processing buffer-overflow