借助 C I/O 函数,能够访问主机的操作系统以执行 I/O。具备在主机上执行 I/O 的能力,您便可在调试和测试代码时拥有更多的选择。
I/O 函数在逻辑上分为多个层级:高级别、低级别和器件驱动程序级。
借助恰当编写的器件驱动程序,C 标准高级别 I/O 函数可用于在用户定义的自定义器件上执行 I/O 操作。这提供了一种在任意器件上使用高级别 I/O 函数的复杂缓冲技术的简易方法。
注: 默认主机所需的调试器:若要让默认主机器件正常工作,必须使用调试器来处理 C I/O 请求;默认的主机器件无法在嵌入式系统中自行工作。若要在嵌入式系统中工作,您需要为系统提供适当的驱动程序。
注: C I/O 函数莫名失败:如果堆上没有足够的空间用于 C I/O 缓冲区,文件上的操作将会以静默方式失败。如果 printf() 调用莫名失败,可能就是这个原因。堆必须足够大,至少应足以分配执行 I/O 的每个文件所需的块大小 BUFSIZ(在 stdio.h 中定义),包括 stdout、stdin 和 stderr,以及用户代码执行的分配和分配记账开销。也可以声明一个大小字符数组 BUFSIZ,并将其传递给 setvbuf 来避免动态分配。要设置堆大小,请在链接时使用 --heap_size 选项
节 12.4。
注: Open 函数莫名失败:运行时支持会将打开的文件总数限制为相对于通用处理器的较小数字。如果您尝试打开的文件数量超过最大值,您可能会发现 open 函数将会莫名失败。您可以通过从 rts.src 提取源代码并编辑控制一些 C I/O 数据结构大小的常量,增加可打开文件的数量。宏命令 _NFILE 能控制一次可打开的 FILE (fopen) 对象数量(stdin、stdout 和 stderr 均计入此总数)。(另请参阅 FOPEN_MAX。)宏命令 _NSTREAM 能控制一次可打开的低级别文件描述符数量(stdin、stdout 和 stderr 下的低级别文件计入此总数)。宏命令 _NDEVICE 能控制一次可安装的器件驱动程序数量(主机器件计入此总数)。