使用MicroLIB原因
当前的嵌入式系统主流由C语言进行开发,大多需要使用到C语言标准库的功能,然而C语言标准库过于庞大,难以直接应用于嵌入式系统当中,需要对其简化,进而形成了MicroLIB库。
MicroLIB与C标准库区别
- MicroLib 专为深度嵌入式应用而设计;
- MicroLib 经过优化,可以使用比使用 ARM 标准库更少的代码和数据存储器;
- MicroLib 设计为无需操作系统即可工作,但这并不妨碍它与任何操作系统或 RTOS(例如 Keil RTX)一起使用;
- MicroLib 不包含文件 I/O 或宽字符支持;
- 由于 MicroLib 已经过优化以最小化代码大小,因此某些函数的执行速度将比 ARM 编译工具中可用的标准 C 库例程更慢;
- MicroLib 和 ARM 标准库都包含在 Keil MDK-ARM 中;
- 有关更多详细信息,请参阅与默认 C 库的差异,参考
printf重定向目的
C语言程序编写过程中需要打印调试,最为常用的是printf函数,该函数是将信息打印到屏幕上,然而嵌入式系统没有计算机常规定义的屏幕,因此需要将printf函数进行改写。
此外,printf函数位于标准库中,基于嵌入式的printf同样位于MicroLIB中,在嵌入式系统中使用printf函数,需要添加MicroLIB。
printf重定向操作
如何对printf进行改写?具体printf需要经过多层函数的实现,其中有一个名为fputc的函数,
C 库函数 int fputc(int char, FILE *stream) 把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。
通过重写这个函数,将输出流指定到嵌入式系统的一个串口上,即可以通过这个串口输出打印信息,再通过这个串口连接到上位机,则可在上位机上观察到调试信息。