中断嵌套
指标测试方案
测试用例设计
V1核跑freertos驱动V0核,V0核跑裸机运行程序;
主程触发中优先级中断,在中优先级中断处理子程内拉高中优先级中断运行信号并触发高优先级中断;
高优先级中断打断中优先级中断运行,高优先级中断处理子程内拉高高优先级中断运行信号并触发低优先级中断;
高优先级中断在退出前将irq_high_end_flag置1并拉低高优先级中断运行信号之后退出到中优先级中断,中优先级中断处理过程中等待irq_high_end_flag置1后拉低中优先级中断运行信号并退出;
低优先级中断紧接着咬尾中优先级中断触发在低优先级中断处理子程内拉高低优先级中断运行信号并将irq_low_end_flag置1之后拉低低优先级中断运行信号并退出;
主程中等待irq_low_end_flag置1后将中优先级中断触发信号拉低再拉高进入循环。

图 1 中断嵌套与中断咬尾测试流程
时间节点说明

图 2 中断响应、嵌套与咬尾时间节点
G32S103 测试结果
开/关硬件加速以及在PSRAM和SRAM上的运行情况:
经过多次测量,每次测量数据仅相差几ns,取其中一次数据进行记录。
| CPUcore | V0 | V0 | V0 | V0 |
|---|---|---|---|---|
| CPU主频 | 400MHz | 400MHz | 400MHz | 400MHz |
| 程序运行内存 | PSRAM | PSRAM | SRAM | SRAM |
| PSRAM频率或SRAM频率 | 250MHz | 250MHz | 400MHz | 400MHz |
| 开/关硬件加速 | 关硬件加速 | 开硬件加速 | 关硬件加速 | 开硬件加速 |
| t1-t0(中断CPU响应时间) | 520ns | 360ns | 240ns | 280ns |
| t3-t2(中断软件处理时间) | 1620ns | 600ns | 1120ns | 390ns |
| t3-t1-PLIC探针时间(130ns) (中优先级整体运行时间) | 2150ns | 950ns | 1370ns | 660ns |
| t5-t4(中断嵌套CPU响应时间) | 240ns | 280ns | 240ns | 280ns |
| t7-t6(中断嵌套软件处理时间) | 1100ns | 392ns | 1140ns | 390ns |
| t7-t4-PLIC探针时间(130ns) (高优先级整体运行时间) | 1350ns | 662ns | 1370ns | 660ns |
| t9-t8(中断咬尾CPU响应时间) | ------------ | 120ns | ------------- | 120ns |
| t11-t10(中断咬尾软件处理时间) | ------------ | 528ns | ------------- | 530ns |
| 硬件加速下:(t11-t10)+(t9-t8) 关硬件加速下:(t11-t8) (中断咬尾整体响应时间) (t1-t0)+(t3-t2)=t3-t1-PL | 1060ns LIC(t5 | 648ns 5-t4)+(t7-t6)=-t7 | 1480ns 7-t4-PLIC | 650ns |
理论上(t1-t0)+(t3-t2)=t3-t1-PLIC探针时间、(t5-t4)+(t7-t6)=-t7-t4-PLIC探针时间,但存在测量误差,表中测量误差为10ns。
文档入口:查看 PLIC 用户手册 · 查看 PLIC SDK 文档。