中断嵌套

指标测试方案

测试用例设计

V1核跑freertos驱动V0核,V0核跑裸机运行程序;

主程触发中优先级中断,在中优先级中断处理子程内拉高中优先级中断运行信号并触发高优先级中断;

高优先级中断打断中优先级中断运行,高优先级中断处理子程内拉高高优先级中断运行信号并触发低优先级中断;

高优先级中断在退出前将irq_high_end_flag置1并拉低高优先级中断运行信号之后退出到中优先级中断,中优先级中断处理过程中等待irq_high_end_flag置1后拉低中优先级中断运行信号并退出;

低优先级中断紧接着咬尾中优先级中断触发在低优先级中断处理子程内拉高低优先级中断运行信号并将irq_low_end_flag置1之后拉低低优先级中断运行信号并退出;

主程中等待irq_low_end_flag置1后将中优先级中断触发信号拉低再拉高进入循环。

perf-g32s10x-irq-pdf02.png

图 1 中断嵌套与中断咬尾测试流程

时间节点说明

perf-g32s10x-irq-pdf03.png

图 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 文档。