我有一个嵌入式系统和一个库的问题.
我目前正在使用一个名为Ambiq [3]的设备,该设备使用Cortex M-4,我想在其上使用FANN(快速人工神经网络)库[2].
我能够编译和链接所有内容,但问题是FANN库在启动时需要读取2个文件.
现在,我有一个嵌入式系统,所以我没有任何文件系统,也没有操作系统.
我很确定我可以在某种程度上将该文件的内容写入闪存内但我真的不知道如何将第一个文件地址链接到C文件函数,例如“fopen”需要文件名作为输入.我只需要文件名和文件的物理地址之间的一些连接,如果它退出我就完成了(或者接受与文件名不同的C函数).
我已经尝试过的一件事是使用xxd -i [filename] [1]将文件内容硬编码到C数组中,但我不知道应该如何链接FANN库使用的fopen.我也开始使用一些切割器解析器,但它似乎非常耗时.
如果你能给我一些建议,请告诉我.
先感谢您.
最好的祝福.
Jaskirat
附加信息:
– 用于编译的软件:带有makefile的Eclipse.
– 编译器:eabi-none-gcc工具箱
– 我正在使用应该在Cortex M4上运行的Ambiq微控制器应用程序直接编译FANN库源代码.
参考文献:
[1] Read a file into a string at compile-time
[2] FANN LIBRARY UFFICIAL SITE http://leenissen.dk/fann/wp/
[3] AMBIQ MICRO:http://ambiqmicro.com/
最佳答案 查看FANN源代码,您需要重写一个函数,并用sscanf替换fscanf并将指针传递给训练数据….
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;
}