干货 | 阅板无数,这块 ARM 板吸引我的不仅仅是颜值(下)
接上篇。之前对本次评测的小板进行了简单的解析,对我个人觉得有意思的功能点进行了简要概述,最后这部分来看看英飞凌的DAVE开发环境。
如果没有继续往下看的精力,那么我这边一句话概括后面的内容:DAVE是我用过的最强、最完善的原厂开发环境。
如果有精力问一句我为什么这样说,那下面就我的角度来看社区、生成、应用等方面是否可以证明以上断言。
1、社区
最新4.3.2版的DAVE是基于行业内最强开发平台Eclipse衍生而出。熟悉开发模式的朋友应该知道作者是四个人,Eclipse就是其中一位的作品。大师作品保证了极强的适用性、扩展性和适应性。如果因为被自以为是的某些前辈FUD Java 20年前的弱点就不假思索的拒绝Eclipse,那一定会错过一个很强大的工具。
基本的代码编辑功能无疑比常用的keil、iar之流强大的很多,这点无需赘述。keil、iar的编辑器之烂有目共睹。较小代码量的工程无需多少功能性支撑便可很好的完成。然而随着MCU应用要求的不断提高,其所配备的flash,ram的不断增大,代码工程量也随之越来越大,到一定规模之后,简单的环境只会成为生产限制。Eclipse强大的功能包括但不限于在线宏处理、上下文解析、代码智能补充、代码结构解析、重构等等不逐一而述,这个工作几乎需要一本书来进行。
选取几个简单的功能点看看热闹。
有效宏提示:
显而易见中间的宏是当前的有效定义。需要说明的是根据当前上下文的引用路径和配置手段,有效宏并不能作为确定性条件,只能作为辅助参考,比如命令行参数,这里就无法预知你的实际数值。
大部分宏定义,包括不少复杂的宏定义都可以在线展开,当然,只是大部分,而不是全部,太复杂的文本宏解析器还是不能让人类下岗。
调用路径
值得注意的是如上图所示,调用路径不限于直接()形式调用,也可以分析出如上的指针结构形式,也可以解析数据域使用路径。
重构
重构是一个很深入的话题,eclipse提供基本支持。
头文件引用路径:
文件结构
除英飞凌外,其他各大厂的原生开发环境除一之外都是衍生自Eclipse,这不是偶然。那一个例外就是基于Java Netbeans 收购了基于微软visual studio(此处不好说名字),而这个厂的环境烂的也是有目共睹。
强迫症患者治愈剂,格式化:
格式化可以配置成自己习惯或者要求的样式,可以以文件为单位也可以以目录为单位,总之,这是一个强迫症患者工具。
2、代码生成
以上都是Eclipse自身带来的福利。针对每个MCU的代码生成,这只能依赖于英飞凌自身的扩展能力,设计模式大师的作品本身就为扩展提供强力保证。
DAVE的扩展称之为APP,毫无搜索关键字的名字,和王建国一样普遍。
目前发布的APP有如下一些:
重要的不是那些诸如I2C,SPI,SDMMC驱动,这部分工作每一个MCU厂都会提供。
简单的看名字,就可以发现我最前面的那个说法并不是空穴来风。英飞凌这个环境强大的地方是将不少应用也做进了代码生成器。相比较大部分其他厂只是驱动、时钟的代码生成器,无疑英飞凌的DAVE更完善更面向开发。
挑选一个PMSM应用为例,一起看看基于应用的代码生成器。但是手里没有驱动部分无法实际运行,只能评测DAVE的APP的方便性。以下截图从上到下所示为生成步骤。
双击下面依赖树中的PMSM_FOC和PWM_SVM,可以看到如下。具体参数不解释了,主要是给大家看看面向应用的强大代码生成能力。
然后,分配管脚:
然后生成代码。
不光是PMSM这种工业应用。再添加一个HTTPSERVER进去如下:
参数也有不少,不一一展示。
以上仅看到冰山一角,如前所说,能针对应用生成代码,绝对可以秒杀市面上现有的绝大多数环境。至于绝少数,那是我见识少没见过的。
3、应用
除了APP之外,英飞凌还在DAVE中提供了大量基于应用的Example。重点仍然是基于应用,而不是基于驱动。
首先要安装:
然后导入:
过程不表。只看有些什么东西。
这些例子,包括modbus,http,usb虚拟串口等应用,很完整,可以直接借鉴来用。安装的时候推荐把这一系列的器件都选上,不限于xmc4700,可以有更多的应用示例参考。
这些示例很规整,改掉底层驱动,完全可以作为其他硬件的实现参考。
感谢英飞凌补齐XMC4700 Relax Kit的FULL EDITION,也感谢EE的相关工作人员,让我们有机会看看网络和SD相关的资源情况。限于评测的目的,关注点放在英飞凌自身提供的资源和社区资源。从英飞凌自身提供资源的可参考性间接可以看出这条产线在厂里的地位,从社区提供资源的可参考性也可以间接看出产品的普及程度。网络系统与存储系统不管在哪一个完整的规模系统中从来都是顶级模块,它们涉及的内容远不是可以简单说说的。
先说社区资源吧。我翻了半天,在我射程范围内的公开资源只找到一个网络库CycloneTCP。
社区中关于英飞凌的资源确实很少,大部分流行的公开系统完全看不到英飞凌的影子,也就是说除了不公开的专业系统和专业领域,英飞凌几乎没有什么份额,有点可惜,当然问题也可能是我的射程不够见识少。从科技史的角度来看所谓的“高端”/“专业” 要么消失了要么被卖了要么转型成全市场覆盖,无一例外它们都是霸级一时的企业/产品。希望英飞凌可以覆盖全市场加强社区投入。
CycloneTCP原本在keil的仓库里可以直接下载,但是在较新的keil中似乎被去掉了。虽然keil仓库里被去掉了,可一点也不影响CycloneTCP的使用。直接下载的代码中包含了web server和ftp client的例子。这两个例子都支持iar,keil和dave。不过需要说明的是demo中的dave工程版本为3.x,最新的dave4并不能打开。
工程很简单,但是需要激活GPL_LICENSE_TERMS_ACCEPTED宏,表示咱用的GPL授权的代码。
编译之后就可以直接进行烧写。上电的时候用串口工具连接XMC4700Kit携带的虚拟串口之后显示过程信息,如下图黑色背景的窗体部分。
如果使用DHCP方式取得IP地址的话,这里可以看到。在浏览器中访问这个ip就可以打开该web server提供的首页。
很完整的网络实例。
这里没有使用英飞凌提供的xmclib库,而是cyclonetcp徒手操作xmc4700。主要是phy和mac driver两部分。分别在drivers/phy/ksz8081_driver.c和drivers/mac/xmc4700_eth_driver.c两个文件中。而mac driver个人感觉写的比英飞凌DAVE中官方的xmclib给的驱动要写的简洁、直观、最主要是配合一个可运行的协议栈比单纯的xmclibdriver更具有参考性。
社区资源能找到的确实很少很少,上面的网络协议栈已经是质量很好的代码中为数不多的支持英飞凌的系统。真的希望英飞凌可以加强覆盖全市场加强社区投入。
英飞凌自己提供的资源主要集中在官网的文档和DAVE中包含的各种参考、库、例子代码中。
官方文档写的很出色,把用户当完全没有经验的初学者引导。很入门,但是有一定经验的人看来又有点大材小用。
体验一下,是不是很检验耐心?
当然,也有很多其他器件厂的用户手册做到了如此这般的低理解门槛,他们同样的优秀。
英飞凌官方给出的示例代码极具参考价值。其中包括一份基于lwip协议栈和rtx rtos的web server参考,一份物联网IOT典型工作方式的参考,一份基于lwip协议栈和freemodbus的modbus实现参考,一份基于LUFA的USB 虚拟FAT文件系统。最有意思的是给出了一份在线更新固件的参考实现,这个功能就是现在流行的mbed那种虚拟磁盘直接拖拽拷贝实现二进制程序的下载。
文档写的很详细,详细的令人着急。
Lwip这个协议栈和前面说的cyclonetcp相比,很明显前者是个人英雄主义作品,后者是公司规范的大众团结协作作品。从设计和代码质量上来看,lwip用在产品中的话还有很多问题需要处理,使用经验相当痛苦,而cyclonetcp我没有产品经验,如果有机会的话,我十分乐意评估cyclonetcp用在产品中的质量和稳定性。
相比较网络资源,modbus和IAP这两份材料给的更有参考价值。好的地方是代码都在example中,都很全面而且有详尽的代码和文档说明,即便那些不使用英飞凌器件的朋友都可以参考这两份实现。
需要注意的是如果打算移植这部分代码在自己的项目中的话,dave中的相关部分rtos使用的是keil公司(很早之前就已经被arm收购,而arm也已经被日本人掌控)的RTX。这个操作系统是ARM的CMSIS-RTOS参考实现,但是在国内我了解使用并熟悉这个系统的人并不多。
Modbus参考中有一个poll测试工具很实在。
不仅源代码给你,英飞凌还担心你没有环境编译,它还把linux,qnx,solaris,win32上可执行文件也一并给你,以便运行测试。
SDMMC app中生成的关于协议操作的代码很有操作性,既不复杂也不简单。包含了最常用的read,write,和 ioctl等操作和诸如取得底层存储器大小,类型等命令,同时并没有完整的实现协议需要的所有操作,简化了复杂性。代码质量很高。我并没有在SD卡上做什么具体操作,只是想看看有这些资源的支撑下,搞一个基本应用需要多少时间。可能有过经验轻车熟路,总共没有花多少时间,但是感觉如果是没有经验的人来操作,一样也不会花多少精力。终于有一种从繁琐的driver中解脱出来可以昂首挺胸直面应用的感觉。
从资源情况来看,英飞凌的外部资源少得可怜,不知是英飞凌产品的针对市场战略,还是封闭产业生态的问题,总之,看起来非传统汽车、工业控制行业的人想要将英飞凌xmc4xxx系列mcu用在更广阔的场景时可能会多多少少遇到支持和资源的麻烦;传统汽车、工业控制行业,虽然和英飞凌一样还有其他半导体厂也推出基于arm cortex内核的处理器,但是从大部分情况来看,这部分专业市场对cortex并不是很接纳,我了解的信息还是倾向于使用过去验证过的稳定的有沉淀的产品系列。
英飞凌提供的资源很详尽也很有价值,无奈一个厂能提供的内容是远远无法与一个繁荣的生态可以提供的内容的丰富程度相提并论的。