我正在开发一个非操作系统支持的Arm Board。我已经在我的桌面计算机上测试了我的c ++代码。它运行正常。现在我必须转储使用arm-elf-g ++交叉编译代码后生成的bin文件。 我的代码是打开一个文件来使用fopen命令读取它的内容,但这个东西是否适用于主板,因为没有操作系统,所以没有文件系统?
由于 vid09
答案 0 :(得分:2)
为什么要打开文件来阅读它 - 那是什么数据?
您可以通过其他方式将其提供给嵌入式代码。例如
答案 1 :(得分:1)
在裸机上使用文件I / O的常用方法是进行调试。在这种情况下,它通常使用semihosting实现。
CS3旨在支持没有操作系统的主板。至 允许
open
和write
等函数在没有操作系统的情况下工作 支持,支持半主机功能,以及 调试器。启用半主机后,这些系统调用将被转换为 主机系统上的等效函数调用。你只能使用这些 连接到调试器时的函数调用;如果你试图使用它们 当与调试器断开连接时,您将获得一个硬件 异常。
显然,这在独立设置中不起作用。
但是,您可以选择自己实施必要的调用。这取决于您正在使用的C运行时库;这是关于如何为Newlib执行此操作的教程:http://www.embedded.com/electronics-blogs/industry-comment/4023922/Embedding-GNU-Newlib-Part-2
答案 2 :(得分:1)
你的目标库很可能有一个fopen()存根;一个无法运行的空函数定义,需要用工作版本替换。这称为重新定位。如果没有重新定位,您的代码可能会编译和链接,但fopen()调用和任何其他标准I / O调用(例如printf())将不执行任何操作。
重新定位的方式取决于编译器的标准C库。在Keil / RealView中,您可以修改其中一个提供的retarget.c示例并将其与项目链接。如果您使用的是Newlib(通常与裸机GNU工具链一起使用),则需要修改或重新实现 syscalls 存根。其他工具链也有类似的方法。
然而,这完全是学术性的,因为要打开文件,您必须拥有一个文件系统,这反过来又要求您拥有某种形式的媒体,其中包含可以作为文件读取的数据。所有这些都可以在裸机系统上完成,但它涉及额外的硬件和软件。例如,请参阅FatFs。例如,通过SPI接口添加SD或MMC卡在硬件方面相对简单。您当然可以在片上Flash上实现RAM磁盘或文件系统,但您仍然必须考虑如何将数据放到这样的文件系统上。