软硬件协同开发的应对方案
足这一要求,一个办法就是要能够将项目从一个工具导出到另一个工具。举例来说,赛普拉斯的PSoC Creator能够将PSoC设计直接导入到Keil μVision工具中。在许多可编程系统中,“硬件”事实上是作为数据块提供,能在启动时被编程到器件中,以创建配置好的器件。对于软件而言,它仅仅是数据,因此导出设计只需硬件工具为目标产品生成项目文件,再用HAL源文件和初始化代码植入即可。应用随后就能在硬件顶层上进行构建,而且不会干扰现代化环境中使用的自动化测试和源控制系统。
图2:PSoC Creator的“IDE 导出”GUI.本对话框用来创建和更新用于应用开发的Keil μVision项目。
当然,对于动态的硬件平台而言,一次性导出不是完整的解决方案,还必须提供无缝更新设计的特性,而且不会破坏应用。对于支持库的IDE来说,更新过程很简单,因为设计可被拆分为应用项目和配置库,这就能将应用完全隔离开来,而且能让包含配置数据和HAL的硬件库在设计变化时自动更新。
图3:以上导出的系统控制器项目在Keil μVision中打开,可用于应用开发。
3、超越软件范畴的调试
设计人员所需的第三个特性就是改进调试。在现代化器件中,“处理器”的定义不仅限于CPU的寄存器和指令集。处理器芯片集成了各种额外的片上功能,比如说常见的通信模块和标准接口,此外还包括无所不在的定时器和计数器,以及为软件提供数字接口的模拟功能,有时也包括定制逻辑和可切换的路由功能等。这种可定制性说到底正是们最初选择协同设计的原因所在。调试器如果只支持CPU,就会让软件开发人员非常失望。们需要围绕硬件认真解决以下问题:硬件启动了吗?时钟启动并稳定了吗?外设在正常工作吗?通信模块是否生成中断?能否发送和接收数据?能否在内部总线上正常工作?
如果这听起来就够吓人的话,还没说到从调试器改变硬件呢,这其实是让人的角色在迫害者和受害者之间转变。需要符号化外设硬件的存取方式,这样就能监控和控制影响应用的状态变化。
当然,符号信息必须从硬件工具中生成,就好像上述HAL一样。通过简单添加这一点,调试过程就变得更加简单,功能也更加强大了。之所以说更简单,是因为们不再需要一直查询文档去寻找并确认调试器中要注意哪些关键寄存器的地址了。而之所以说更强大,是因为现在它能支持更为复杂的调试。除了快速获得外设模块状态快照之外,有时们还能从调试器控制功能块,无需编写代码以编程方式重建情境就能了解情境工作的具体情况。
交换此信息的典型方法就是让IDE使用由硬件工具生成的XML文件。ARM CMSIS-SVD(软件接口标准--系统视图描述)标准就是一个很好的例子。它是基于XML的硬件描述,旨在让调试器支持高度集成的微控制器。CMSIS是一种面向ARM Cortex微控制器的HAL的标准定义,得到了众多厂商的广泛采用。SVD扩展主要针对硬件描述,如寄存器、存储器、外设等,让从事可编程系统开发的人员真正地大获裨益。
图4:这是一小段XML,介绍了赛普拉斯PSoC Creator调试器有关CAN实施中一个寄存器的情况。CAN_CSR_ERR_SR寄存器的地址、大小和描述均已定义,在寄存器中有5个字段,定义了名称、大小和存取权限。
共享硬件定义的一个重要因素就是能够定义外设寄存器,进而言之,则能提供面向寄存器中字段的存取权限,从而确保调试器认真对待读/写可修改的位。硬件给们提供clear-on-read位和zero-to-toggle位以及各种其它晶体管能够感应但是软件很难应付的状态处理接口。只有对硬件进行良好的机器生成定义,们才能保证用户在外设模块上调试寄存器或个别位时不至于浪费时间,或导致意外结果。
有了可编程硬件的高级视图,们不仅能检查状态寄存器和错误状态,还能实现更多功能。举例来说,如果硬件支持寄存器控制的开关,能实现外设I/O到器件引脚的灵活路由,那么软件开发人员就能从调试器操控器件的内部布线!有些人听到这里可能感觉有些吓人,不过如果SVD信息正确生成,那么们就能限制允许的变化,确保“安全的”编辑,比如说数字信号上的多路复用器通道选择或两个物理引脚之间的模拟输入切换。
硬件工具为软件开发人员生成调试信息,有望显着缩短应用开发时间。不仅如此,重要的是,们还有机会在早期检测出硬件设计错误,因为软件开发人员发现混乱和代码重写的不正常情况下更有可能发现意料之外的行为。
4、面向可编程器件的完整产品
现在,“完整产品”的概念已得到充分地理解和广泛地接受,也成了成功的重要因素。只有最佳的工具或最出色的芯片已经不够了。们今
- SN2005学习系统 数字语音室解决方案(05-19)
- 以可编程DSP架构应对TD-SCDMA以及TD-LTE带来的设计挑战 (02-14)
- ARM-μCLinux嵌入式系统启动引导的实现(07-26)
- 多核处理器架构及调试方案(03-28)
- 基于DSP的电源解决方案(06-13)
- 间歇性Bug最佳解决方案(09-24)