Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我会得到;对“u stat”的未定义引用;在sys/stat.h库中?_C_Embedded_Firmware_Texas Instruments - Fatal编程技术网

C 为什么我会得到;对“u stat”的未定义引用;在sys/stat.h库中?

C 为什么我会得到;对“u stat”的未定义引用;在sys/stat.h库中?,c,embedded,firmware,texas-instruments,C,Embedded,Firmware,Texas Instruments,我试图使用`#include库中的stat()函数,但每次调用该函数时都会出现以下错误: ...toolchains/gcc-arm-none-eabi-8-2018/arm-gcc-macos/arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(lib_a-statr.o): in function `_stat_r': statr.c:(.text._stat_r+0xe): undefined reference to `_stat' 这是我的文件

我试图使用`#include库中的
stat()
函数,但每次调用该函数时都会出现以下错误:

...toolchains/gcc-arm-none-eabi-8-2018/arm-gcc-macos/arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(lib_a-statr.o): in function `_stat_r':
statr.c:(.text._stat_r+0xe): undefined reference to `_stat'
这是我的文件(我列出了我的所有包含项,我知道有些可能与此问题无关,但只是为了以防万一,我列出了所有包含项):

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义源文件“battery.gm.fs”
int write_to_dev(结构设备*dev)
{
结构统计;
国际资源文件;
char*pFileBuffer;
stat(SOURCE_FILE,&st);//有问题的行
//这里还有其他代码
}
每当我调用
write\u to\u dev()
时,我都会遇到这个问题。我的代码来自这个链接的第17页:谢谢你的帮助


编辑:我正在使用带有zephyr RTOS的STM32芯片和TI BQ27621燃油表

您尝试移植到设备的示例代码是为Linux系统编写的(例如Raspberry Pi)。这样的系统比你的MCU板功能更强:它有一个完整的操作系统、文件系统和文件以及必要的I/O操作。您仍然可以使用Zephyr OS在主板上运行相关部件:

终端系统相关API

实施TI文件要求和描述的功能
gauge\u read
gauge\u write
gauge\u address
。它应该相当直接,因为它主要是I2C通信的包装器。Zephyr提供所需的I2C功能

现在应该编译文件
gauge.c
gauge.h

FlashStream初始化

示例代码使用文件系统操作检索文件(FlashStream格式)以初始化传感器。文件格式的解析器是
gauge.c
的一部分,以字符串(文本文件内容)作为输入。因此,它不依赖于文件系统操作

我从未使用过这样的传感器,但我猜初始化文件很短,可以很容易地嵌入为字符串。因此,创建初始化文件,将其作为文本文件打开,并将内容复制到程序中:

const char* fs =
    "W: AA 3E 02 00\n"
    "C: AA 3E 02 00 02 20 00 03\n"
    "W: AA 3E 02 00\n";
现在您可以初始化传感器:

gauge_execute_fs(pHandle, fs);

文件系统代码(
stat()
fopen()
等)不再需要,可以删除。您的程序现在应该进行编译和构建。

也许这个答案可以帮助您:@PurpleSpark:它是纯金属还是嵌入式Linux处理器?请指定您正在使用的特定TI处理器或控制器。@GauravPathak它位于STM32处理器上。我用的是西风RTOS。我会用这个更新我的问题too@PurpleSpark:第17页上的代码是针对Linux用户空间应用程序的,它不是针对纯固件的。因此,不,您的平台上没有stat,您的平台环境没有实现posix或其他操作系统标准,没有底层文件系统,这毫无意义。Zeprhy支持posix函数的一个有意义的子集,但是对于I/O,您必须自己实现它们。您希望文件
“battery.gm.fs”
位于何处?一闪而过?在公羊?在外部sd卡中?谢谢@Codo。我放弃了使用
stat()1
fopen()
,只是把所有东西都放在我的程序中的
#define
。我认为这是从这里走出去最简单的方法。
gauge_execute_fs(pHandle, fs);