Zynq + FreeRTOS 笔试题
(时间:90分钟,总分:100分)
一、选择题(每题2分,共20分)
-
Zynq-7000 的 PS 端包含以下哪些组件?
A. NEON协处理器
B. XADC
C. FPGA 逻辑
D. 以上全是 -
AXI4 总线协议中,以下哪种类型适合高吞吐量数据传输?
A. AXI4-Lite
B. AXI4-Stream
C. AXI4-Full
D. APB -
FreeRTOS 中,任务优先级数值越大表示优先级:
A. 越高
B. 越低
C. 无固定关系
D. 由configMAX_PRIORITIES
决定 -
以下哪个函数用于在 FreeRTOS 中创建任务?
A.xTaskCreate()
B.vTaskStartScheduler()
C.xQueueCreate()
D.xSemaphoreCreateBinary()
-
Zynq 中,PL(Programmable Logic)与 PS(Processing System)通过哪种接口通信?
A. GPIO
B. AXI 总线
C. I2C
D. SPI -
FreeRTOS 的软件定时器回调函数在以下哪个上下文中执行?
A. 中断上下文
B. 守护任务上下文
C. 用户任务上下文
D. 空闲任务上下文 -
在 FreeRTOS 中,以下哪种同步机制适合任务间传递大量数据?
A. 二值信号量
B. 互斥锁
C. 队列
D. 事件组 -
Zynq 的启动流程中,FSBL(First Stage Bootloader)的主要功能是:
A. 加载 Linux 内核
B. 初始化 PS 端硬件并加载第二阶段引导程序
C. 配置 PL 端逻辑
D. 运行应用程序 -
以下哪个工具用于生成 Zynq 的硬件平台描述文件(.xsa)?
A. Vivado
B. Vitis
C. SDK
D. PetaLinux -
FreeRTOS 中,
vTaskDelay()
函数的参数单位是:
A. 毫秒
B. 系统节拍(Tick)
C. 微秒
D. 纳秒
二、简答题(每题10分,共30分)
- 简述 Zynq PS 和 PL 的协同工作流程,并举例说明一个典型应用场景。
- FreeRTOS 中,为什么在中断服务程序(ISR)中不能直接使用
xQueueSend()
?应如何正确使用? - 在 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()
检测任务堆栈溢出。
参考答案与评分标准
一、选择题
- A 2. B 3. A 4. A 5. B
- B 7. C 8. B 9. A 10. B
二、简答题
-
PS 和 PL 协同工作流程(10分):
- PS 运行应用程序,PL 实现硬件加速或专用外设。
- 示例:PL 实现图像处理 IP 核,PS 通过 AXI DMA 传输数据。
-
中断中队列操作(10分):
- 直接使用
xQueueSend()
可能阻塞,需使用xQueueSendFromISR()
。 - 需调用
portYIELD_FROM_ISR()
触发任务切换。
- 直接使用
-
AXI DMA 数据传输(10分):
- 配置 DMA 通道,初始化描述符。
- PS 通过中断或轮询等待传输完成。
三、设计题
-
多任务系统设计(20分):
- 任务关系图(5分):任务1→队列→任务2;任务3通过事件组监控。
- 优先级:任务3(最高)、任务1、任务2(最低)(5分)。
- 代码框架(10分)。
-
中断与双缓冲(15分):
- ISR 伪代码(7分):使用
xQueueSendFromISR()
和信号量。 - 双缓冲解释(8分):交替写入两个缓冲区,减少竞争。
- ISR 伪代码(7分):使用
-
调试与优化(15分):
- 高优先级任务:缩短执行时间或拆分任务(5分)。
- 中断优化:合并中断或使用 DMA(5分)。
- 内存管理:静态分配或内存池(5分)。
说明:
- 基础题考察对 Zynq 架构和 FreeRTOS 核心机制的理解。
- 综合题强调实际场景中的系统设计、调试与优化能力。
- 设计题结合硬件特性(如 AXI、PL 加速)与 RTOS 功能(任务、同步)。