Я пытаюсь использовать функцию stat()
в библиотеке `#include ‹sys/stat.h›, однако всякий раз, когда я ее вызываю, я получаю эту ошибку:
...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 <kernel.h>
#include <device.h>
#include <drivers/i2c.h>
#include <sys/__assert.h>
#include <logging/log.h>
#include <sys/printk.h>
#include <soc.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define SOURCE_FILE "battery.gm.fs"
int write_to_dev(struct device* dev)
{
struct stat st;
int nSourceFile;
char *pFileBuffer;
stat(SOURCE_FILE, &st); // problematic line
// other code here
}
Всякий раз, когда я звоню write_to_dev()
, я получаю эту проблему. Я основываю свой код на странице 17 этой ссылки: https://www.ti.com/lit/an/slua801/slua801.pdf?ts=1595360845070&ref_url=https%253A%252F%252Fwww.google.com%252F Спасибо за помощь!
Редактировать: я использую чип STM32 с zephyr RTOS и датчик уровня топлива TI BQ27621.
stat
, среда вашей платформы не реализует ни posix, ни другие стандарты операционной системы, нет базовой файловой системы, и это просто не имеет смысла. Zeprhy может быть настроен для поддержки значимого подмножества функций posix, но для ввода-вывода вы должны реализовать их самостоятельно. Где вы ожидаете, что файл"battery.gm.fs"
будет расположен? Во вспышке? В рам? На внешней сд карте? - person KamilCuk   schedule 21.07.2020battery.gm.fs
располагался в оперативной памяти. - person PurpleSpark   schedule 21.07.2020And I want
Так реализуйте это.how you found out that my platform doesn't support it?
Ну... проще объяснить, где что-то есть, чем чего-то не хватает отовсюду. Поскольку вы получаете неопределенную ссылку, символ отсутствует. Но, возможно, это знакомство с zephyr, newlib, разработкой встроенных и «голых» приложений и автономной средой. - person KamilCuk   schedule 21.07.2020_stat()
. @PurpleSpark Скопированный вами исходный код был написан для совершенно другой лиги систем: система Linux с файловой системой и приличным объемом оперативной памяти против MCU STM32 с суперминимальной операционной системой, очень ограниченной оперативной памятью и без файловой системы. - person Codo   schedule 22.07.2020fopen()
из#include<stdio.h>
тоже не будет работать? Я пытаюсь читать файлы, используя это, и это дает мнеerrno
как 0, но я не уверен, как это интерпретировать, потому что 0 является значением по умолчанию. - person PurpleSpark   schedule 22.07.2020It also includes optional interfaces for middleware components comprising a TCP/IP stack and a Flash file system.
Разве это не означает, что у нее есть файловая система? - person PurpleSpark   schedule 22.07.2020fopen()
не имеет смысла. - person Codo   schedule 22.07.2020fopen
не будет работать. например, toy может добавить поддержку fatfs (от chan) или lwip. - person 0___________   schedule 22.07.2020