我的DSP项目在一步步深入,经过一轮轮的计算和选型,最终控制器做成了STM32F1与F28335组合体,ARM和DSP分管不同的功能,芯片间进行通信。这篇文章给大家对比一下在编程环节上,STM32系列和DSP系列的区别。
一、IDE
STM32系列属于ARM架构,最常用的IDE应该是MDK了(除MDK外,也有IAR,ST也推出针对STM32的IDE)。MDK的优点是功能的完整和齐全,从包管理器(支持多间厂商的ARM MCU的库文件下载,各种常用的中间件,以及RTOS等),到仿真器(JLINK、ULINK等等),以及编辑器、调试器一应俱全。
但MDK的优点也止乎于止了,让人吐槽的地方多不胜数:编辑器的功能停留于20年前、调试器的功能有限、ARMCC的死板… …我对MDK的依赖也仅止乎于它对仿真器的支持了。网上有很多例子用VSCode、Edit Plus之类的高级编辑器加插件,再搭配GCC来写单片机程序,但这些做法在我看来(我也尝试过),就是缺少了对仿真器的支持,调试程序的时候非常的不方便,所以我放弃了。
DSP用的IDE就是CCS了,CCS是一个基于Eclipse的IDE。一旦基于Eclipse,这IDE就一定逃不开启动缓慢的缺点。相比MDK,CCS的项目管理、代码编辑器功能上略强,但很过分的是CCS的某些基本操作如注释代码你只能用快捷键,在编辑菜单中你找不到注释代码的按钮,也找不到任何快捷键的说明,会不会用全凭你对Eclipse的熟悉程度或者依靠搜索引擎… …
CCS没有MDK V5的包管理器,在这点上MDK赢CCS九条街。
但在调试器功能上,CCS就真的比MDK强很多了。首先是对变量的监测数量和反应上都优于MDK,另外程序断点的数量上也明显多于MDK(这两点可能与仿真器有很大关系,毕竟我用的STM32仿真器和DSP仿真器不是同一档次的东西),另外CCS可以很轻松的对某个变量的数值变化进行实时跟踪,也能直观的完成实时图表的展示,非常方便。
二、库文件
库文件的作用基本就是把单片机的寄存器地址用宏来表示,再把一些时钟、外设的初始化、配置、回调用C函数组织起来,让开发者能相对简单利用单片机的资源。我印象中STM32的库文件是单片机界第一次掀起讨论热潮的底层函数,以往的51、AVR一般只有头文件,而不会做成C函数库的形式。使用库文件后,开发效率当然比直接操作寄存器高,但也带来了程序效率下降、代码空间增大的问题,但STM32的主频、FLASH、RAM相比51、AVR提高得太多,以至于基于库文件的开发也成为现在的主流。
我见过也用过几个品牌的Cortex M单片机,就库文件而言,ST是最用心搞的。以前的标准库已经可以让程序基本用不到汇编的语句了,现在主推的HAL库野心更大,虽然带来了程序效率下降、代码空间增大的问题,但随着新的性能更强的单片机系列推出,我相信HAL库会成为主流。
DSP C2000的库文件相比ST的库文件差距就比较明显了,与NXP的差不多吧,程序中要用到很多宏,宏也是直接使用汇编语句,抽象程度不高。另外C2000的头文件中对寄存器大量使用结构体和联合体进行表达,让开发者必须老老实实的看完手册才能编程,如果能够再做一层中间函数就非常优秀了。相对而言,ST的库文件即使看不透寄存器的操作,但单凭中间函数的定义与说明都可以让开发者容易地上手。
三、仿真器
仿真器这东西对于单片机的开发而言,我认为是不可缺少的。单凭串口输出调试字串,一是麻烦,二来对于复杂的程序不容易定位问题。
Cortex M的仿真器现在是很便宜了,我以前用过Jlink,现在更多用所谓的Jlink OB,也就是SW调试方式的仿真器,也就二三十元的价格,坏了连维修的想法都没有。
DSP C2000的仿真器价格就感人了,国产都要上百,不过配合CCS后,在功能、性能上也比MDK+JLINK要强不少。
本文地址:https://blog.csdn.net/lingcoln/article/details/109251128