在嵌入式系统上使用 fopen() 需要什么?

gbm*_*ter 3 c embedded fopen file

我对标准 C 库提供的 FILE 函数系列很陌生。

我最近fopen()在研究了如何使用后偶然发现了类似的功能stdoutstdinstderrprintf().

我想知道,fopen()在嵌入式系统(不一定有操作系统支持)上需要使用什么。在阅读更多关于它的信息后,在更强大的嵌入式系统上做一个很酷的事情来挂钩说,一个 UART/SPI 接口,这样调用printf()就会从 UART 打印数据。同样,您可以通过调用从 UART 缓冲区读取数据scanf()

这也将增加便携性!(例如为 Linux 编写的代码,如果printf()支持的话会更容易移植)。如果文件在生产环境中运行,您还可以将调试数据打印到文件中,然后再从中读取。

你能fopen()在一个简单的嵌入式系统上使用吗?如果是这样,那么谁/何地/何时创建了“文件”(就我现在而言,文件fopen()没有malloc()空间,也没有指定多少)?或者您是否需要支持 FAT 文件的操作系统。如果是这样,像http://ultra-embedded.com/?fat_filelib这样的东西会起作用吗?使用 FreeRTOS 会有帮助吗?

Cli*_*ord 5

检查工具链的 C 库的文档 - 它应该有关于重新定位库的说明。

例如,如果您使用Newlib,则必须重新实现部分或全部 [系统调用存根][3] 以适合您的目标。open()在这种情况下,低级系统调用将允许fopen()根据需要工作。最简单的说,您可以实现open()支持对串行端口的更高级别的 stdio 访问,但是如果您期望标准文件系统访问,那么您仍然需要一个底层文件系统来映射它。

可以在此处找到重新定位 Keil/ARM 标准库的另一个示例。