微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > MIPS走向更多

MIPS走向更多

时间:11-10 来源: 点击:

跟以前一样,Microchip 的芯片评估很容易,而且便宜。PIC32 以太网入门套件(见照片1)定价$72,提供一切你需要的部件。虽然名字为"以太网"入门套件,该套件配备了高端的'795 型号MCU,同时支持USB 功能。

照片1:考虑到ARM的先发优势,MIPS需要奋起直追。最新集成USB、以太网和CAN的PIC32,是MIPS在MCU领域的一个巨大进步

该套件还包括配有一个"轻量级"GCC 编译器的Microchip MPLAB IDE。文档中关于"轻量级"编译器的说明有点矛盾。"轻量级"版本编译器暗示不支持先进的代码优化,但是我拿到的版本显然不是这样,在下一节你将看到这一点。或许实际上该工具包是所谓的"评估"版本,支持所有功能,但只有60 天有效期。

PIC32 采用的架构来源于"计算",因此它非常适合管理面向PC 的以太网和USB 接口。让我们看一些演示程序,你就会明白我的意思。

多年来Microchip 一直在为其小型的PIC 芯片提供部分网络软件栈,PIC32 做得更多,它提供了全功能、免费的BSD TCP/IP 网络堆栈。包含所有的网络服务、套接字等,以及这些常用的协议:DHCP、UDP、ICMP、ARR 等。'795 型芯片中有512KB 的片上flash,有充足的空间存储一些漂亮的演示程序,让我们浏览一下入门电路板(见照片2)。

照片2:当把一个"计算"架构裁剪为"微控制器"使用时,诚然会有很多挑战;但同时也能继承很多好处,比如这里看到的免费BSD TCP/IP堆栈。

USB 支持不错。OTG功能允许一个设备在USB 主、从设备之间动态切换。一个典型的应用案例是打印机,当连接到PC 时它是一个从设备,而当连接到相机时它成为主设备。现在所有的USB 芯片似乎都有OTG 了,不过我自己从没有遇到过需要以这种方式切换的情况。

不管 OTG 是否真正有用,它使得PIC32 能在更多的传统领域中得到应用,无论是作为主设备或从设备。USB"嵌入式主设备"在使用中有一些限制,不像"标准主设备"如电脑,举例来说PIC32 不提供VBUS 电源(100-500 mA),但是你可以在个人电脑的USB接口上找到这种电源--当然这完全可以理解。另外,速度限制也需要注意,,作为从设备时能够"全速"(12 Mbps),而作为主设备时只能提供"低速"(1.5 Mbps)。

这个套件包含了一些实用的演示。其中一个演示让该板子成为一个标准人机接口设备(HID)--比如鼠标。因为HID 驱动已经是标准,你可以把它直接插入PC 使用。另外,你可以把这个套件配置成USB 主设备,从而利用PIC32 不断完善的FAT 文件管理软件库,有一些演示展示了如何访问广泛使用的USB 存储器(见照片3)。

照片3:另一个免费软件是USB主、从设备驱动,这里演示的是利用集成的FAT文件系统,以USB主设备访问一个USB存储器

不过需要指出的是这个套件中没有包含CAN 演示。因为我不懂也没有实验条件进行有意义的CAN 测试,如果你需要该功能,你需要自己来评估和结论。

优化的迷宫

结构体系进化的重要标志之一,曾经是编译器的优化。您可能还记得有些人把"RISC"缩写调侃为"Relegate the Impossible Stuff to the Compiler",即"把不可能完成的任务丢给编译器"。然而,在调试时,一个太过自我聪明的编译器其问题也是显而易见的。比如PIC32 的"C"编译手册有提到说,当调试经过优化的代码时"可能偶尔会碰到令人惊讶的结果。"

例如,有些变量和代码会消失,如果编译器认为你其实并不需要它们。举例说你声明了一个变量,然后给它赋值一个常数,接着在某个计算时调用了这个变量。不要为找不到那个变量和赋值语句而抓狂,编译器只是比你更聪明一点,它在计算中直接调用了常数。

当你在一个条件分支指令处点击了单步执行,然后看到光标移动到了下一条指令处,这是否意味该条件分支的条件未被满足呢?未必,请注意这是MIPS 架构的一个特性,即分支指令的下一条指令总是会被执行,当编译器找不到合适的指令时会填充一条NOP 指令。你必须再执行一次单步操作,才能确认分支条件是否被满足(在这种情况下,你会看到光标跳到分支目标处)或不满足(光标跳转到下一条顺序指令)。更先进的"代码移动"优化能够导致更多的优化干预。请记住,有时指令可以被挪动很远的距离,甚至超出你认为应在的循环之外。


不过,调试优化过的代码也是可能的,尤其是你喜欢头脑风暴的话(例如,在分支指令后跟一个分支指令会发生什么?)。通常缺省的编译器优化只生成简单的代码,会完整保留你的意图即使可能它效率底下。当调试时在断点触发处,,你可以放心地修改某个变量的值,而不用担心编译器会捣什么鬼(比如虽然你从源代码中看不到,但一些赋值语句已经被挪动并执行了)。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top