pmp例程切换usermode模式执行函数触发异常Instruction page fault
配置pmp,spmp模块的区域范围是4G,并且权限都是rwx,在机器模式下都是正常运行的,但切换到用户模式就会触发异常Instruction page fault,这个是什么原因呢?
void JumpUserMode(uint32_t func)
{
__RV_CSR_WRITE(CSR_MSCRATCH, sMachineModeStack + MACHINE_MODE_STACK_SIZE);
__RV_CSR_CLEAR(CSR_MSTATUS, MSTATUS_MPP);
__RV_CSR_WRITE(CSR_MEPC, func);
__ASM volatile ( "mret ");
}
/**
* @brief Main function
*/
int main(void) {
/* System Clocks Configuration */
PMP_Config();
JumpUserMode((uint32_t)Led);
while (1) {
LedBlink(LED2_PORT, LED2_PIN);
delay_ms(1000);
}
}
y
yuxin694 天前 ·
1 楼
回复 dongyong:
看起来你没有设置umode下的stack。 只是把m下的stack base保存在的mscatch
可以参考nuclei-sdk/NMSIS/Core/Include/core_feature_base.h __switch_mode
和application/baremetal/demo_spmp
我在这个例子上修改了,调用__switch_mode(PRV_U, umode_sp, test_user),还是出错了
d
dongyong724 天前 ·
3 楼
看起来你没有设置umode下的stack。 只是把m下的stack base保存在的mscatch
可以参考nuclei-sdk/NMSIS/Core/Include/core_feature_base.h __switch_mode
和application/baremetal/demo_spmp
💡 请 登录 后参与讨论(微信扫码即登录/注册)
帖子信息
版块CM32M433R MCU
回复3
浏览3613
发布2024-09-23 17:27
本版热门
关于如何创建一个浮点立即数0 回复