大家好、
我正在尝试将从2D 阵列格式的量化函数获取的数据复制到另一个1D 格式的阵列。 我将使用'mcpy()' 进行相同的操作。 当我尝试使用示例代码执行此操作时、我将指定类似大小的数据输入、量化数据、然后将其复制到一维数组中-代码工作正常、我可以在两个数组中看到相同的值。 但是、当我尝试为我在 MSP430上执行神经网络的主项目复制此代码时、memcpy 函数进入无限执行状态、我无法在调试期间跳转到下一步。 我对为什么无法在项目中复制具有所有相同参数值和数组大小的单独示例所执行的确切功能有点困惑。 我删除了代码中任何未使用或不需要的变量和行、似乎仍然会遇到相同的问题。 我能够成功执行的代码片段如下:
#include <stdio.h>
#include <msp430.h>
#include <string.h>
#include "lib_mfcc.h"
#include <stdint.h>
#include <math.h>
#include <stdlib.h>
#define STATIC_MEMORY
#ifdef STATIC_MEMORY
static uint8_t *nnom_static_buf = NULL; //pointer to static buffer
static size_t nnom_static_buf_size = 0; //static buf size
static size_t nnom_static_buf_curr = 0;
void nnom_set_static_buf(void* buf, size_t size)
{
nnom_static_buf = buf;
nnom_static_buf_size = size;
nnom_static_buf_curr = 0;
}
#endif
#ifdef STATIC_MEMORY
uint8_t static_buf[1024];
#endif
void quantize_data(float*din, int8_t *dout, uint32_t size, uint32_t int_bit)
{
#define _MAX(x, y) (((x) > (y)) ? (x) : (y))
#define _MIN(x, y) (((x) < (y)) ? (x) : (y))
float limit = (1 << int_bit);
uint32_t i;
float d;
for(i=0; i<size; i++)
{
d= round(_MAX(_MIN(din[i], limit), -limit) / limit * 128);
d = d/128.0f;
dout[i] = round(d * 127);
}
}
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
#define MFCC_COEFFS (12)
#define MFCC_LEN (62)
#define MFCC_FEAT_SIZE (MFCC_LEN * MFCC_COEFFS)
#ifdef STATIC_MEMORY
nnom_set_static_buf(static_buf, sizeof(static_buf));
#endif
float arr[12] = {11.2,34.2,54.6,7.8,9.2,3.5,22.2,59.2,17.2,1.3,23.6,28.4};
int8_t a[MFCC_LEN][MFCC_COEFFS];
uint32_t mfcc_feat_index=0;
quantize_data(arr,a[mfcc_feat_index],MFCC_COEFFS,3);
static int8_t b[744]={0};
memcpy(b, a, MFCC_FEAT_SIZE);
return 0;
}
上述代码执行成功、我能够将 A[62][12]的值复制到 b[744]中。 但是、当我在调试模式下使用此函数时、作为另一个项目的一部分使用的过程完全相同、会立即运行到无限执行状态。 我已经在这方面停留了相当一段时间,如果有任何答复,我将不胜感激。
请告诉我是否需要任何其他信息来澄清问题、我会立即提供同样的信息。 谢谢!!
此致、
Siddhant