Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
rtt2.0.0 中断退出时候cpu模式切换
发布于 2015-07-02 18:49:40 浏览:2725
订阅该版
我这里在调试中断的时候,看到在进入中的汇编代码时,cpu的模式是isr模式,cpsr_isr是svc模式的,这里都是正确的,但是,在跳出中断汇编前,原有代码并没有加入回复cpsr为中断前的svc模式。这里是否会有问题?但是在外部线程中看到的却是cpu仍然处在svc模式,想请教下是什么时候把cpu模式给切换掉的。 下面贴出汇编部分代码。 ```vector_irq: stmfd sp!, {r0-r12,lr} #ifdef RT_USING_VFP vmrs r0, fpexc stmfd sp!, {r0} @ save VFP status -- irq_fpexc = fpexc bic r0, r0, #FPEXC_EN @ always disable VFP so we can @ lazily save/restore the old state. vmsr fpexc, r0 #endif bl rt_interrupt_enter bl rt_hw_trap_irq bl rt_interrupt_leave #ifdef RT_USING_VFP ldmfd sp!, {r1} vmrs r0, fpexc tst r0, #FPEXC_EN @ irq used VFP? bicne r1, r0, #FPEXC_EN @ if irq used VFP, then clear fpexc.en bit vmsr fpexc, r1 @ restore VFP status @ if irq not used VFP, then fpexc = irq_fpexc @ if irq used VFP, then disable VFP #endif @ if rt_thread_switch_interrupt_flag set, jump to @ rt_hw_context_switch_interrupt_do and don't return ldr r0, =rt_thread_switch_interrupt_flag ldr r1, [r0] cmp r1, #1 beq rt_hw_context_switch_interrupt_do ldmfd sp!, {r0-r12,lr} mrs r8,spsr @msr cpsr, r8 subs pc, lr, #4```
查看更多
4
个回答
默认排序
按发布时间排序
aozima
2015-07-03
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
哪个CPU要写清楚了。 ARM的话留意某条指令后面的 “^” 会 自动将spsr拷贝到cpsr中。
zhangy_fullhan
2015-07-05
这家伙很懒,什么也没写!
>哪个CPU要写清楚了。 > >ARM的话留意某条指令后面的 “^” 会 自动将spsr拷贝到cpsr中。 --- CPU:arm1176 话说我在参考libcpu/arm/arm926/context_gcc.S的时候,发现如下问题 rt_hw_context_switch: stmfd sp!, {lr} @ push pc (lr should be pushed in place of PC) stmfd sp!, {r0-r12, lr} @ push lr & register file mrs r4, cpsr stmfd sp!, {r4} @ push cpsr mrs r4, spsr stmfd sp!, {r4} @ push spsr str sp, [r0] @ store sp in preempted tasks TCB ldr sp, [r1] @ get new task stack pointer ldmfd sp!, {r4} @ pop new task spsr msr spsr_cxsf, r4 ldmfd sp!, {r4} @ pop new task cpsr msr spsr_cxsf, r4 ldmfd sp!, {r0-r12, lr, pc}^ @ pop new task r0-r12, lr & pc 注释为红字部分怎么没有copy 带cpsr。。如果只靠最后跳入到pc的一个“^”那原有进程的cpsr不就都给毁了么。当然如果spsr和cpsr一致的话,就没有问题。 从中断退出的时候并没“^”,貌似需要软件把spsr copy到cpsr。我自己有时间做一个裸测得中断调试下就好了。 谢谢回复
zhangy_fullhan
2015-07-07
这家伙很懒,什么也没写!
昨天下午做了实验 主要测试项: 1:进入中断时候的sp指针,spsr,cpsr,lr 2:中断处理函数时候的sp指针,spsr,cpsr,lr 3:退出中断后的sp指针,spsr,cpsr,lr 结果如下: 1:sp:irq_sp(即指向中断模式下的栈顶,我这里的栈是满递减栈); spsr:svc模式(因为正常情况是svc模式); cpsr:中断模式; lr:保存的是svc模式下的下一条指令(进入中断的汇编代码后,如果有跳转函数,这里就要保存irq_lr,否则就会丢掉在svc模式下的返回地址了。) 2:sp:irq_sp(即在中断服务函数中,用的还是中断模式下的栈空间); spsr:svc模式,因为软件没有保存cpsr; cpsr:中断模式; lr:保存的中断处理函数处理完后的返回地址,还是irq_lr。 3:sp:svc_sp(切换到svc模式下的栈空间了); spsr:0x10(即处于用户模式,暂时不管了); cpsr:处于svc模式; lr:svc模式下的栈空间 下面列出我的中断处理函数: normal_interrupt: mrs r8,spsr stmfd sp!, {r0-r12,lr} bl rt_hw_trap_irq ldmfd sp!, {r0-r12,lr} mrs r8,spsr @msr cpsr, r8 subs pc, lr, #4 可以看出在退出中断的时候,cpu自动切换到了svc模式,不需要软件干预,猜测是把中断模式下的spsr直接复制到cpsr中了。 所以在中断函数开始一定要保护中断前的状态信息:spsr_irq,lr_irq,公用寄存器
撰写答案
登录
注册新账号
关注者
0
被浏览
2.7k
关于作者
zhangy_fullhan
这家伙很懒,什么也没写!
提问
17
回答
53
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-Thread项目助手v0.2.0 - 支持Env Windows
2
RttreadV5.10上,GD32F450Z RTC时间显示问题
3
rt-smart启动流程分析
4
EtherKit快速上手PROFINET
5
RTThread USB转串口无法接收数据
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部