在一些对成本敏感且控制功能简单的应用领域,小Flash空间的芯片比较受欢迎,以前这部分都是8位机的地盘,而现在随着ARM产品越来越丰富,低端产品的覆盖率也在增加,其也开始慢慢觊觎这部分市场了。飞思卡尔Kinetis系列中KL02和KE04就是其中比较有代表性的两款产品系列,这两个系列里有部分型号拥有最小8k Flash空间管脚数最少14或者16个SSOP封装,哎,ARM做到这份儿上不容易啊,呵呵。。。 对一些小存储空间的MCU来说,每一个字节的空间都是宝贵的(粒粒皆辛苦啊),所以我们在使用小Flash空间开发时除了要对代码进行功能优化之外还要注意减少不必要的空间损耗,比如一些冗余的常数变量,用不到的API函数或者隐藏起来的一些自带函数库。今天我想说的就是在用Codewarrior10.x开发KL02或者KE04时如何去掉一个占空间的大户,即Debug I/O库(实际上就是一些printf和scanf之类的打印函数实现),这个Debug I/O我们在新建一个工程时是默认勾选的,如下图所示:
这个库我们大多数情况下是用不到的,但是在最后编译时其却包含在其中,所以我们在对KL02 8kflash型号的芯片随便编写几个底层驱动后再编译就会发现8k代码空间已经没剩下多少了,下图为我添加了部分工程后编译生成的bin格式文件的大小(注意Codewarrior下面,虽然其生成的文件都是.hex后缀,但是实际上里面具体的格式可能是S19或者是纯二进制数据,这个跟配置的输出类型有关系),可以看到已经耗掉7k多的代码空间了,有点束手束脚的感觉。
这时我们可以通过对该工程配置,去掉其新建工程时自带的Debug I/O库函数(默认为ewl库),选择ew_noio,即不使用Codewarrior自带Debug库函数。具体工程配置和再次编译后输出的bin格式文件大小如下图所示,可以看到使用ewl_noio库之后大概空闲出4k左右的代码空间出来,这对一共才有8k Flash的MCU来说多出一半可用的空间,已经非常可观了,这下子就可以游刃有余的继续增加功能代码了。
|