在开发中我一直遇到一个百思不得其解的问题:
为什么在keil中要选择启用microlib,为什么我在用clion开发时,一旦引入了标准库在对printf进行重定向之后,flash占用几乎爆满?
后来在向大佬请教之后理解了这个问题:
原来我们在开发的时候,引入的stdio就是c语言的标准输入输出库,这个库功能齐全且占用巨大,但我们发现其中很多内容其实是给更高级的计算机使用的,我们单片机根本用不到,然而如果使用了这个库,这些含有大量冗余内容的库会参与我们的编译,最后生成的文件会占用很多空间
所以我们在keil进行开发,重定向printf实现串口输出时,要在设置中勾选启用microlib,因为microlib便是一个标准库的精简库,这样能把更多flash留给我们的程序
而在clion中我们没有这个选项,况且clion使用GCC编译并没有使用到keil所用的库,那么怎么解决呢?
我们可以在makifile中修改参与编译的c语言标准库,只需要加入这一条:
add_link_options(-specs=nano.specs)
便可以使用精简版的C库替代标准C库,从而大幅节省我们珍贵的flash空间,适用于使用makifile编译开发的一切单片机工程(不过像esp32那种动辄几mb的flash是不是加不加也就无所谓了?)