Jas*_*ngh 5 c embedded microcontroller file
我对嵌入式系统和一个库有疑问。
我目前正在使用一种名为 Ambiq [3] 的设备,该设备使用 Cortex M-4,我想在其上使用 FANN(快速人工神经网络)库 [2]。我能够编译和链接所有内容,但问题是 FANN 库在启动时需要读取 2 个文件。
现在,我有一个嵌入式系统,所以我没有任何文件系统,也没有操作系统。我很确定我可以以某种方式将该文件的内容写入闪存,但我真的不知道如何将第一个文件地址链接到 C 文件函数,例如“fopen”需要文件名作为输入。我只需要文件名和文件物理地址之间的某种联系,如果它存在(或者接受与文件名不同的内容的 C 函数),我就完成了。
我已经尝试过的一件事是使用 xxd -i [文件名] [1] 将文件的内容硬编码到 C 数组中,但我不知道应该如何链接 FANN 库使用的 fopen。我还启动了一些 cleaver 解析器,但它似乎非常耗时。
如果您有什么建议,请告诉我。先感谢您。此致。贾斯基拉特
附加信息: - 用于编译的软件:带有 makefile 的 Eclipse。- 编译器:eabi-none-gcc 工具箱 - 我正在使用应在 Cortex M4 上运行的 Ambiq 微控制器应用程序直接编译 FANN 库源代码。
参考资料: [1]在编译时将文件读入字符串 [2] FANN LIBRARY UFFICIAL SITE http://leenissen.dk/fann/wp/ [3] AMBIQ MICRO: http: //ambiqmicro.com/
查看FANN源代码,有一个函数需要重写,并将fscanf替换为sscanf,并传入指向训练数据的指针......
struct fann_train_data *fann_read_train_from_fd(FILE * file, const char *filename)
{
unsigned int num_input, num_output, num_data, i, j;
unsigned int line = 1;
struct fann_train_data *data;
if(fscanf(file, "%u %u %u\n", &num_data, &num_input, &num_output) != 3)
{
fann_error(NULL, FANN_E_CANT_READ_TD, filename, line);
return NULL;
}
line++;
data = fann_create_train(num_data, num_input, num_output);
if(data == NULL)
{
return NULL;
}
for(i = 0; i != num_data; i++)
{
for(j = 0; j != num_input; j++)
{
if(fscanf(file, FANNSCANF " ", &data->input[i][j]) != 1)
{
fann_error(NULL, FANN_E_CANT_READ_TD, filename, line);
fann_destroy_train(data);
return NULL;
}
}
line++;
for(j = 0; j != num_output; j++)
{
if(fscanf(file, FANNSCANF " ", &data->output[i][j]) != 1)
{
fann_error(NULL, FANN_E_CANT_READ_TD, filename, line);
fann_destroy_train(data);
return NULL;
}
}
line++;
}
return data;
}
Run Code Online (Sandbox Code Playgroud)