This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5994:在编译和运行时将 csv 文件中的数据输入数组

Guru**** 2390755 points
Other Parts Discussed in Thread: MSP-EXP430FR5994

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1063552/msp430fr5994-input-data-from-csv-file-into-an-array-at-compile-and-run-time

器件型号:MSP430FR5994
主题中讨论的其他器件:MSP-EXP430FR5994

我想将'.csv 文件中的数据写入表示_Q15矩阵的数组中。 我在论坛上回答了一些建议使用#include "file.csv" 将.csv 文件加载到代码中的问题、但同时我也遇到了一些示例、其中提到使用 fatFS 系统读取文件。 在我的代码中、我希望在运行时间之前将大部分数据写入固定数组。 可以使用'memcpy()'或相关函数复制我在运行时要写入的数组。 问题是我在“.csv”文件中使用的数据格式,因为整个数据以(x*y)元素数组的形式存在。 在我在论坛上查看的大多数问题中、值之间有某种终止字符或等级字符、可用于将数据写入数组。 在本例中、数据是连续的、我不确定如何使用 fread、fscanf 等文件函数或其他一些方法来移动代码中的数据。

PS:我已经有一个关于这一点的问题,这更是为了了解可能的方法。 在此问题中、我将分享一个示例、说明当我将'.csv 文件中包含的数据存储在'.txt'文件中时、我尝试实现的内容。  

	FILE *fp;
	uint16_t i;
	float bias1[12];
	fp = fopen("bias1.txt","r");
	for(i=0;i<12;i++) {
        /* I have tried both fread() and fscanf() both as follows */
        // fread(&bias1, sizeof(float), 12, fp)
	     fscanf(fp, "%f", &bias1);
	}
	fclose(fp);
	
	
	

对于上面的代码、我从 Bias1数组中得到一个全为零的值作为输出。

".txt"文件如下所示:

[-0.0802988  -0.09100939  0.          0.09965173  0.         -0.07361444
  0.09968854  0.          0.          0.         -0.06165031  0.        ]

我想将此文件转换为更基本的格式、如下所示:  

-0.0802988	-0.09100939	0.00000000	0.09965173	0.00000000	-0.07361444	 0.09968854	 0.00000000  0.00000000  0.00000000 -0.06165031  0.00000000        

但是、代码仍然无法识别文件中的值、更不用说将它们复制到另一个数组中了。

如果有任何建议或想法、这将非常有帮助、因为这只是我提到的一个问题、我需要与另外5-6个问题一起处理、所有这些问题的尺寸都不同。

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这现在是 C 库输入转换方案在主机上的工作方式的问题。 (因为 fopen()仅在操作系统和文件系统时有效。) 我建议您查阅常见的信息来源、了解它们的工作原理。 ("info scanf"为我提供了技巧)

    fscanf 语句会将所有数据放在一个位置("&bias1")。 如果您想填充数组、我建议使用指针。 在每次转换后递增。 并通过对打开的文件等内容进行错误检查以更具防御性的方式进行编码、确保您不会超出数组的范围。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我现在使用以下代码。 我修改了数组、希望将值复制到 MSP430矩阵中。 下面给出的代码在我的系统 C 语言中起作用。但是,当我在 CCS 中运行时,fopen()返回 NULL 值,并在 MSP430上加载代码。  

    #include <stdio.h>
    #include <msp430.h> 
    #include <stdlib.h>
    #include "DSPLib.h"
    
    #define SIGNAL_COLS4 2
    
    int main()
    {
    	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
    
    	    FILE *file = NULL;
    	    int i;
    	    float bias3[SIGNAL_COLS4], num;
    	    file = fopen("bias3.txt","r");
    	    if(file == NULL)
    	    {
    	        printf("Error while opening file\n");
    	        return -1;
    	    }
    	    while(fscanf(file, "%f", &num)!= EOF)
    	    {
    	        bias3[i++] = num;
    	    }
    	    for(i=0;i<3;i++)
    	    {
    	         printf("value is: %f\n", bias3[i]);
    	    }
            fclose(file);
    	    return 0;
    }
    

    数据文件如下所示:

    -0.08071705  0.08071705

    虽然我在论坛上发现了一些相关问题、 我对我看到的任何答案都不清楚-这个答案提到了"启用堆"、但我不确定如何实现-我知道我可以操作从项目属性分配给堆栈和堆的内存、 但未能理解可能的解决方案是什么。 如果有人可以向我指出问题、或让我知道执行上述流程的任何其他方式、这将非常有帮助。 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    fopen()要求存在文件系统(通常是操作系统)。 您的 MSP430目标上的文件系统在哪里? 您是否已连接 SD 卡? 库代码来支持文件系统?

    否则、MSP430标准库中的桩模块将返回错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有使用 SD 卡。 该文件位于我的 CCS 项目文件夹中。 我没有单独安装文件系统、因此我不确定默认情况下是否存在文件系统或是否需要安装文件系统。 虽然我阅读了一些关于使用 FatFS 的文章、但我不清楚如何在这里对我的案例使用相同的内容。 如果您能引导我了解描述该流程的任何内容、那将非常有帮助。 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的 MSP430永远无法从您的项目文件夹中读取数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、明白了。 我有一种感觉,就是这样。 我将了解一下 FatFS 系统。 我不知道如何实施,但我将看一下这个论坛。 如果您有任何文章描述了如何将文件系统放置到 MSP430上、请告诉我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="504252" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/MSP-low-power-microcontroller-forum/1063552/msp430fr5994-input-data-from-csv-file-into an array-at-at-at-in-the-forum/39223.]如果缺省情况下不需要单独安装或运行,则不需要单独运行/3639223.]

    TI MSP430编译 器与 CCS 调试器配合运行时库支持 C I/O、这允许器件上的 stdio 调用在调试器下运行时访问主机上的文件。

    随附的示例稍微修改了您的示例、允许在 MSP-EXP430FR5994上运行的程序读取项目目录中的 bias3.txt 文件:

    为此、请执行以下操作:

    需要有足够的堆和堆栈。 它可以处理1024字节的堆和堆栈、但尚未尝试找到所需的最小堆和堆栈:

    2.打开的调用中使用的路径需要能够在主机上找到文件。 在此示例中、bias3.txt 位于工程目录中、启动调试会话时、当前工作目录似乎默认为.out 可执行文件位于中。 由于.out 文件位于工程中的 Debug 子目录中、因此在 打开的调用中使用了"./bias3.txt"作为文件名。 未 记录提出的"Default directory for file IO"行为 、以查询有关该问题的 CCS 文档。

    e2e.ti.com/.../MSP430FR5994_5F00_read_5F00_csv.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这对我来说很有用、当我尝试直接使用 fopen、fscanf 函数时、这是我的初始想法。 在这种情况下、我将检查我是否还可以找到堆和堆栈的最小大小。 非常感谢切斯特!!