mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-08-17 08:42:13 +08:00
update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
This commit is contained in:
@@ -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、可两种方法同时使用,充分验证硬件压栈技术的可靠性。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user