其实每家人的ARM单片机,都应该有一个符合CMSIS标准的库,但是,不是每家都那么好用,比如看NXP的,大多数用户还是寄存器操作,包括ZLG这个力推NXP的.但是不是实现同样一个东西,库函数比寄存器操作要多很多代码占用呢,先看看实例[STM32 正点原子 综合测试应用].编译采用不优化.因为优化过后,编译器会自动把某些函数变成inline,或者直接操作寄存器,显得大小差不多.
寄存器版本中,Program Size: Code=203098 RO-data=88322 RW-data=5580 ZI-data=1103140,实际上大多数代码都是上层实现的为主了,对于在Linux内核里面,开发驱动就是操作寄存器,上面调用/dev下就是库函数的样子,我猜.
而采用库函数方式,Program Size: Code=206342 RO-data=88430 RW-data=5628 ZI-data=1104292,目测是因为库的占用,但是完全可以接受啊.才3KB耶,对于256K这么大的单片机来说,这就如你要一个处理器裸跑,还是加一个Linux框架一样,框架必然有开销,但不多,就让你开发效率提升了不少.
当然,下面来看NXP的库.
非常简单,当然对于简单反转IO,可以用寄存器直接操作,速度最快.当然代码空间也没节省下来的哦,如果采用-O3就算你不是操作寄存器,也会完全优化好的.所以我个人观点不必过分追求寄存器开发,这是没什么意义的,还浪费自己时间,除非...你说底层调用非常多的操作,严重影响你的使用了,你又很多时间来开发这东西...