diff --git a/Demo-Build/RISC-V32/readme.txt b/Demo-Build/RISC-V32/readme.txt index 9777058e..f2d4bc9c 100644 --- a/Demo-Build/RISC-V32/readme.txt +++ b/Demo-Build/RISC-V32/readme.txt @@ -148,12 +148,12 @@ void SysTick_Handler(void) handle_reset: /* Enable interrupt nesting and hardware stack */ // HWSTKOVEN, PMTCFG, INESTEN, HWSTKEN - li t0, (1 << 4) | (3 << 2) | (1 << 1) | 1 - csrw 0x804, t0 + li t0, (1 << 4) | (3 << 2) | (1 << 1) | 1 + csrw 0x804, t0 /* Enable floating point and global interrupt, configure privileged mode */ // FS, MPP, MPIE, MIE - li t0, (3 << 13) | (3 << 11) | (1 << 7) | (1 << 3) - csrw mstatus, t0 + li t0, (3 << 13) | (3 << 11) | (1 << 7) | (1 << 3) + csrw mstatus, t0 /* 0x804 @@ -169,40 +169,10 @@ MPIE:进中断前中断使能状态 MIE: 机器模式中断使能 */ --------------------------------------------------------------------------------- - -补充说明——硬件压栈技术可靠性验证 - -决定硬件压栈技术是否稳定可靠的关键因素,在于 port_rv32_HWS.S 中的最后三句代码。 -简单来说,内核解锁后,最后两句代码(断点1、断点2)已不在服务层临界区的保护之中。 -如果在内核解锁前,系统中断(SysTick、PendSV)已经被触发,要保证在内核解锁之后, -在最后两句代码(断点1、断点2)执行完之前,不会响应系统中断。否则说明硬件压栈技 -术是不可靠的,不能使用。为此,特提供两种测试方法给自己和用户,以方便测试并验证 -硬件压栈技术的可靠性。 - -方法一 -在 port_rv32_HWS.S 中,通过自行 #define __TEST_PENDSV 来开启测试。 -该测试已在内核解锁之前触发 PendSV,在内核解锁之后,如果由 断点1 或 断点2 再入 -PendSV,当由 PendSV 直接返回后将跳转至 test_pendsv_fault_handler。 -用户可在该处理函数中通过 打印 或 点灯 等方式,来报告异常发生。 -/* 示例 */ -void test_pendsv_fault_handler(void) +/* 例程-断点测试钩子 */ +void test_breakpoint_hook(void) { - printf("hardware stack test error\r\n"); + printf("break point test failed\r\n"); while(1); } -方法二 -在 pendsv_hook 中打印 mepc,持续一段时间后数据统计,如果 mepc 出现过 断点1 -或 断点2 的地址,判定异常发生。 -/* 示例 */ -__WEAK void pendsv_hook(void) -{ - printf("mepc: %#x\r\n", __get_MEPC()); -} - -总结 -1、方法二要依赖方法一,不要单独使用,因为只有在每次内核解锁之前都触发 PendSV, - 才会有良好的测试效果。 -2、可两种方法同时使用,充分验证硬件压栈技术的可靠性。 -