Zynq + FreeRTOS 笔试题2


Zynq + FreeRTOS 笔试题

(时间:90分钟,总分:100分)


一、选择题(每题2分,共20分)

  1. Zynq-7000 的 PS 端包含以下哪些组件?
    A. ARM Cortex-A9 双核
    B. FPGA 可编程逻辑
    C. DDR 控制器
    D. 以上全是

  2. AXI4 总线协议中,以下哪种类型适合高吞吐量数据传输?
    A. AXI4-Lite
    B. AXI4-Stream
    C. AXI4-Full
    D. APB

  3. FreeRTOS 中,任务优先级数值越大表示优先级:
    A. 越高
    B. 越低
    C. 无固定关系
    D. 由 configMAX_PRIORITIES 决定

  4. 以下哪个函数用于在 FreeRTOS 中创建任务?
    A. xTaskCreate()
    B. vTaskStartScheduler()
    C. xQueueCreate()
    D. xSemaphoreCreateBinary()

  5. Zynq 中,PL(Programmable Logic)与 PS(Processing System)通过哪种接口通信?
    A. GPIO
    B. AXI 总线
    C. I2C
    D. SPI

  6. FreeRTOS 的软件定时器回调函数在以下哪个上下文中执行?
    A. 中断上下文
    B. 守护任务上下文
    C. 用户任务上下文
    D. 空闲任务上下文

  7. 在 FreeRTOS 中,以下哪种同步机制适合任务间传递大量数据?
    A. 二值信号量
    B. 互斥锁
    C. 队列
    D. 事件组

  8. Zynq 的启动流程中,FSBL(First Stage Bootloader)的主要功能是:
    A. 加载 Linux 内核
    B. 初始化 PS 端硬件并加载第二阶段引导程序
    C. 配置 PL 端逻辑
    D. 运行应用程序

  9. 以下哪个工具用于生成 Zynq 的硬件平台描述文件(.xsa)?
    A. Vivado
    B. Vitis
    C. SDK
    D. PetaLinux

  10. FreeRTOS 中,vTaskDelay() 函数的参数单位是:
    A. 毫秒
    B. 系统节拍(Tick)
    C. 微秒
    D. 纳秒


二、简答题(每题10分,共30分)

  1. 简述 Zynq PS 和 PL 的协同工作流程,并举例说明一个典型应用场景。
  2. FreeRTOS 中,为什么在中断服务程序(ISR)中不能直接使用 xQueueSend()?应如何正确使用?
  3. 在 Zynq 中,如何通过 AXI DMA 实现 PL 到 PS 的高速数据传输?请描述关键步骤。

三、设计题(共50分)

题目1:多任务系统设计(20分)

设计一个基于 FreeRTOS 的传感器数据采集系统,要求:

  • 任务1:每 100ms 读取一次温度传感器(I2C 接口)。
  • 任务2:每 1s 将数据打包并通过 UART 发送。
  • 任务3:监控系统状态,发现传感器故障时触发告警(LED 闪烁)。

要求

  • 画出任务关系图并说明通信机制(如队列、信号量)。
  • 写出任务优先级分配及理由。

题目2:中断与性能优化(15分)

在 Zynq 中,PL 端通过 GPIO 中断通知 PS 端数据就绪。

  • 请编写 FreeRTOS 中断服务程序(ISR)的伪代码,实现数据接收并唤醒处理任务。
  • 解释如何通过双缓冲技术减少数据丢失风险。

题目3:系统调试与优化(15分)

某系统使用 FreeRTOS 后出现任务响应延迟,可能原因包括:

  • 高优先级任务长时间占用 CPU。
  • 中断频率过高。
  • 内存碎片导致分配失败。

要求

  • 针对每种可能原因,提出至少一种调试或优化方法。
  • 简述如何通过 uxTaskGetStackHighWaterMark() 检测任务堆栈溢出。

参考答案与评分标准

一、选择题
  1. D 2. B 3. A 4. A 5. B
  2. B 7. C 8. B 9. A 10. B
二、简答题
  1. PS 和 PL 协同工作流程(10分):

    • PS 运行应用程序,PL 实现硬件加速或专用外设。
    • 示例:PL 实现图像处理 IP 核,PS 通过 AXI DMA 传输数据。
  2. 中断中队列操作(10分):

    • 直接使用 xQueueSend() 可能阻塞,需使用 xQueueSendFromISR()
    • 需调用 portYIELD_FROM_ISR() 触发任务切换。
  3. AXI DMA 数据传输(10分):

    • 配置 DMA 通道,初始化描述符。
    • PS 通过中断或轮询等待传输完成。
三、设计题
  1. 多任务系统设计(20分):

    • 任务关系图(5分):任务1→队列→任务2;任务3通过事件组监控。
    • 优先级:任务3(最高)、任务1、任务2(最低)(5分)。
    • 代码框架(10分)。
  2. 中断与双缓冲(15分):

    • ISR 伪代码(7分):使用 xQueueSendFromISR() 和信号量。
    • 双缓冲解释(8分):交替写入两个缓冲区,减少竞争。
  3. 调试与优化(15分):

    • 高优先级任务:缩短执行时间或拆分任务(5分)。
    • 中断优化:合并中断或使用 DMA(5分)。
    • 内存管理:静态分配或内存池(5分)。

说明

  • 基础题考察对 Zynq 架构和 FreeRTOS 核心机制的理解。
  • 综合题强调实际场景中的系统设计、调试与优化能力。
  • 设计题结合硬件特性(如 AXI、PL 加速)与 RTOS 功能(任务、同步)。

你可能感兴趣的:(zynq,fpga开发)