在嵌入式平台上实现C文件流(file*、fopen、fread等)

在嵌入式平台上实现C文件流(file*、fopen、fread等),c,embedded,C,Embedded,我的任务是为我公司的传统嵌入式C编译器的库添加streams支持(C89/C90)我们的目标硬件通常具有1MB或更少的代码空间,并且没有操作系统。 我们在整个代码库中有很多类似流的实现,我可以将它们作为起点。例如,通过TCP套接字或串行端口工作的控制台、从SD卡或内存文件上的FAT读取的web服务器,甚至是从多个源读取的固件更新程序 在我开始重新发明轮子之前,我想知道是否有现有的实现可以移植或用作我工作的起点尽管我们向客户提供完整的源代码,但GPL许可代码不是一个选项,因为我们的客户不想将源代码

我的任务是为我公司的传统嵌入式C编译器的库添加streams支持(C89/C90)我们的目标硬件通常具有1MB或更少的代码空间,并且没有操作系统。

我们在整个代码库中有很多类似流的实现,我可以将它们作为起点。例如,通过TCP套接字或串行端口工作的控制台、从SD卡或内存文件上的FAT读取的web服务器,甚至是从多个源读取的固件更新程序

在我开始重新发明轮子之前,我想知道是否有现有的实现可以移植或用作我工作的起点尽管我们向客户提供完整的源代码,但GPL许可代码不是一个选项,因为我们的客户不想将源代码发布到他们的产品中。


有人能推荐一本书(带注释的Unix源代码、CompSci文本)或公共域/BSD许可的源代码吗?我更愿意看一看针对单个设备的旧操作系统,因为当前的操作系统包含大量的宏和typedef层,这使得即使是简单的结构定义也很难遵循。

试着看一下看看p.J.Plauger的书,它详细描述了完整C89标准库的一种可能实现。

BSD(Net | Open | Free)不合适吗?至少作为一个起点。

您应该能够从GNU的源代码中获取所需的大部分内容。它通过获得许可,这意味着您可以链接到库,而不会影响软件的许可(或强制客户发布其代码)。将其移植到您的平台(从而将LGPL-ed代码保存在自己的库中)可能比从头开始实现自己的更容易

有几个不同的项目采用了GNU GLIBC,并针对嵌入式系统对其进行了优化。您可能想看看:

  • (LGPL)
  • (LGPL)
  • (多个免费许可证)
特别是,EGLIBC和uLIBC被设计为在缺乏MMU的嵌入式系统上正常运行

你也可以看看


或者,世卫组织在BSD许可下提供了几个库(包括C标准库)。我无法证明它们的质量,因为我自己没有使用过它们的代码,但是如果您不能将LGPL代码应用到项目中,那么可能值得一看。

检查您的开发工具。一些开发工具附带其软件库的源代码


我获取了编译器的
printf
的源代码,并将其改编为嵌入式系统上的调试端口。当你有一个建立基础的时候,工作就少了。

正是我要找的东西——我会在一天结束之前订购它。谢谢这是一本非常好的书,但请注意,书中发布的图书馆资源不是可以自由分发的。严格地说,您必须自己重新实现lib(这不是一项艰巨的工作,但取决于您的公司对IP的要求有多严格,可能需要跨越一些障碍)。请注意,普劳格出售该库,并将其与再发行权一起出售。MSVC的库和我目前使用的IAR库最初都是从Plaugher的Dinkumware获得许可的,我相信其他几个编译器供应商也会这样做。如果你想走那条路,我不知道要花多少钱。快速跟进——我拿到了这本书,它是一本很好的参考书。只要对C90文档的stdlib摘录进行评论就很方便了。我能够记录一个将现有库更新为C90合规性的计划,并且一直在致力于一个完全支持流的设计。谢谢你的提示,尼尔。这就是我正在做的——为我们出售的开发工具的软件库添加源代码。作为更正:Newlib不是基于GNU GLIBC;这是它自己的事情。此外,除了一些特定于Linux的部分和其他一些东西之外,大多数都是BSD许可的或等效的。无论如何,这不是一个糟糕的开始。@Brooks Moses:谢谢你的澄清