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

tom*_*gic 5 c embedded

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

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

在我重新发明轮子之前,我想知道是否有现有的实现我可以移植或用作我工作的起点. 即使我们向客户提供完整的源代码,GPL许可代码也不是一种选择,因为我们的客户不希望向其产品发布源代码.

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

小智 8

请参阅PJ Plauger的书"标准C库",该书详细描述了完整C89标准库的一种可能实现.

  • 这是一本非常好的书,但请注意,本书中出版的图书馆资源不能自由分发.严格地说,你必须自己重新实现lib(不是一项庞大的工作,但是根据你的公司对IP的严格程度,可能需要一些箍来跳过).请注意,Plauger出售图书馆并以重新分配权利出售该图书馆.MSVC的库和我目前正在使用的IAR库最初都是从Plaugher的Dinkumware获得许可的,我相信其他几个编译器供应商都会这样做.如果你想走这条路,我不知道会花多少钱. (2认同)

bta*_*bta 5

您应该能够从GNU C标准库的源代码中提取您需要的大部分内容.它与Lesser GPL一起许可,这意味着您可以链接到库,而不会影响您的软件许可(或强迫您的客户发布他们的代码).将其移植到您的平台(从而将LGPL编辑的代码保存在自己的库中)可能比从头开始实现您自己的代码更容易.

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

特别是,EGLIBC和uLIBC被设计为在缺少MMU的嵌入式系统上正常运行.

您还可以查看BSD的libc实现

另外还有STLSoft,它在BSD许可下提供了几个库(包括C标准库).我无法证明他们的质量,因为我自己没有使用过他们的代码,但是如果你不能在你的项目中使用LGPL代码,那么值得一看.