嵌入式世界中的 C 文件函数

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/

Kei*_*las 2

查看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)