嵌入式软件,包括实时操作系统、中间件和驱动库,需要适配多种硬件架构和编译环境。确保这些软件组件在真实环境中能够正确运行,而不仅仅是依赖于主机仿真环境下的测试结果,是一个重要的挑战。由于存在不同版本的编译器、硬件架构以及特定于设备的配置(例如IIC EEPROM的不同容量版本),如何验证每种组合的兼容性、有效性和性能成为了一个复杂的问题。
本题目旨在设计并实现一个基于FPGA的硬件平台,该平台能够在微控制器(MCU)与待测硬件之间进行多路复用(MUX),从而允许根据上位机指令选择任何组合来进行软件测试。通过这种方式,可以对所有可能的组合进行全面的功能正确性测试。测试结果将利用Semihosting技术输出至上位机,以便与上位机协作完成全面的质量保证流程。
- 支持多种微控制器架构和编译环境。
- 使用FPGA作为MUX,以支持灵活的硬件配置和组合测试。
- 利用Semihosting技术进行调试信息输出,增强测试过程中的诊断能力。
- 软硬件结合,确保嵌入式软件在实际硬件环境中的兼容性和稳定性。
第一题:MUX底板实现
- 设计并实现一个基于FPGA的MUX电路,用于在多个MCU与待测硬件之间切换。
- 提供详细的硬件设计方案文档,并使用VHDL或Verilog等硬件描述语言在FPGA上实现。
- 参赛者与老师联系后将免费得到专用的MUX FPGA开发板(FPGA下载器需自行准备)。赛后开发板无需退回;但其它硬件的设计必须自行完成。分发的FPGA开发板的硬件原理图可以在repo中找到。
第二题:MCU底板与待测设备载板实现
- 设计与FPGA相连接的MCU底板,该底板上装载AVR、MSP430和STM32等三种架构的微控制器以运行测试程序。另外,还需要装载一颗控制器,实现Semihosting调试协议(与主机进行通信),并用来通知FPGA更换MCU与待测设备之间的连线。
- 设计可以搭载于FPGA底板上的待测设备子卡。要求待测设备至少包括全系列IIC EEPROM,以及一个加速度计、一个温度计、一个陀螺仪、一个ADC和一个DAC。
第三题:软件实现
- 开发一套具有广泛可移植性的构建系统,确保其可以调用在不同的MCU架构上(至少包括8位的AVR、16位的MSP430和32位的STM32等)自动化各类开源驱动(如EEPROM、SD卡、SPI Flash等)及其测试用例的编译和下载工作。
- 根据MCU底板传递回来的信息,确认测试是否通过,并记录于log中。
第三题:测试框架构建
- 构建一个自动化的测试框架,该框架可以根据输入参数自动选择适当的MCU和硬件配置进行测试。
- 对比不同配置组合下软件库的表现,分析并记录性能差异和潜在问题。
- 利用收集的数据优化软件库,提高其在各种硬件配置上的稳定性和性能。
中间件(如通信协议栈、文件系统、图形库等)通常需要适配多种硬件架构和编译器工具链。例如,TCP/IP协议栈在不同MCU上的实现可能存在差异。
- 测试系统可以快速切换不同的硬件配置和编译器版本,验证中间件的功能是否正常、库函数的行为是否一致。
- 通过自动化测试框架,可以全面覆盖中间件的API调用、错误处理和性能指标(如响应时间)。
设备驱动程序(如ADC、DAC、PWM、IIC、SPI等)需要适配多种硬件架构和外设配置。例如,EEPROM驱动程序可能需要支持不同容量的芯片。
- 硬件平台中的FPGA可以灵活连接不同的外设模块(如EEPROM、ADC芯片),并通过MUX选择不同的组合进行测试。
- 测试系统可以验证驱动程序在不同硬件配置下的兼容性和稳定性。
开源嵌入式项目(如Zephyr OS、RIOT OS等)需要在全球范围内适配多种硬件架构和编译器工具链。
- 测试系统可以快速切换不同的硬件配置,验证开源项目的移植性和稳定性。
- 自动化测试框架可以帮助开发者生成详细的测试报告,为项目贡献高质量的代码和文档。
- RT-Thread、Nuttx、Zephyr等RTOS的各类设备驱动库
- 本repo的测试板