提问人:jjjjbbb 提问时间:11/10/2023 更新时间:11/10/2023 访问量:17
在 C 中将 uint8_t* 转换为 int16_t8
Casting uint8_t* to int16_t8 in C
问:
我正在尝试从这里改编一个示例,该示例读取 PDM 麦克风数据并使用串行 USB 将其打印到计算机。 我想绕过示例中的过滤阶段,这样我就可以在维护其他函数的同时编写自己的过滤器。
我目前的计划是将传入的 PDM 数据作为过滤阶段的输出传递。但是,输入为 ,输出为 。最简单的铸造方法是什么?我复制了下面的整个函数。uint8_t* in
int16_t* out
in
out
int pdm_microphone_read(int16_t* buffer, size_t samples) {
int filter_stride = (pdm_mic.filter.Fs / 1000);
samples = (samples / filter_stride) * filter_stride;
if (samples > pdm_mic.config.sample_buffer_size) {
samples = pdm_mic.config.sample_buffer_size;
}
if (pdm_mic.raw_buffer_write_index == pdm_mic.raw_buffer_read_index) {
return 0;
}
uint8_t* in = pdm_mic.raw_buffer[pdm_mic.raw_buffer_read_index];
int16_t* out = buffer; //need to change this line
pdm_mic.raw_buffer_read_index++;
for (int i = 0; i < samples; i += filter_stride) {
#if PDM_DECIMATION == 64
Open_PDM_Filter_64(in, out, pdm_mic.filter_volume, &pdm_mic.filter);
#elif PDM_DECIMATION == 128
Open_PDM_Filter_128(in, out, pdm_mic.filter_volume, &pdm_mic.filter);
#else
#error "Unsupported PDM_DECIMATION value!"
#endif
in += filter_stride * (PDM_DECIMATION / 8);
out += filter_stride;
}
return samples;
}
答:
0赞
Xeno
11/10/2023
#1
如果我理解正确,您需要逐个条目复制列表列表条目。我会使用for循环:
for (int p1 = 0, p2 = 0; p1 < IN_SIZE; p1++, p2++) {
out[p1] = (int16_t)in[p2];
}
评论