法1:使用MicroLIB库1.1 KEIL-MDK中的Use MicroLIB选项 在MDK开发环境中,
MicroLib是缺省c库的备选库,它可装入少量内存中,与嵌入式应用程序配合使用,且这些应用程序不在操作系统中运行。
MicroLib进行了高度优化以使代码变得很小,功能比缺省c库少,不具备某些ISO c特性,部分库函数的运行速度也比较慢,如内存拷贝函数memcpy()。 MicroLib与缺省c库之间的主要差异在网上有许多文章都有写到,这里摘抄记录:
- MicroLib 不符合 ISO C 库标准。不支持某些 ISO 特性,并且其他特性具有的功能也较少。
- MicroLib 不符合 IEEE 754 二进制浮点算法标准。
- MicroLib 进行了高度优化以使代码变得很小。
- 无法对区域设置进行配置。缺省 C 区域设置是唯一可用的区域设置。
- 不能将 main() 声明为使用参数,并且不能返回内容。
- 不支持 stdio,但未缓冲的 stdin、stdout 和 stderr 除外。
- MicroLib对 C99 函数提供有限的支持。
- MicroLib不支持操作系统函数。
- MicroLib不支持与位置无关的代码。
- MicroLib不提供互斥锁来防止非线程安全的代码。
- MicroLib不支持宽字符或多字节字符串。
- 与stdlib不同,MicroLib不支持可选择的单或双区内存模型。MicroLib只提供双区内存模型,即单独的堆栈和堆区。
MicroLib提供了一个有限的stdio子系统,它仅支持未缓冲的stdin、stdout和stderr,那么也就是说勾选了Use MicroLib选项后,在代码工程中就可以使用printf()函数咯? 然而事实并非如此,这样直接使用printf()函数,其打印的字符串最终不知道打印到何处。 我们要做的是将调试信息打印到USART1中,所以需要对printf()函数所依赖的打印输出函数fputc()重定向(MicroLib中的printf()函数打印操作依赖fputc())。
|