Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
中断
rt_interrupt_leave 中为什么没有 在退出中断时进行调度
发布于 2020-02-06 20:09:30 浏览:1074
订阅该版
rt_interrupt_leave 中为什么没有像其他RTOS,例如ucosii ucosIII TencentOS 等在退出中断时进行调度? 我的理解是: 以上三个OS 都不允许在interruput_nest不为0时进行任务调度。 rt_thread 可以,是因为rt_thread主要支持cortex m处理器 可以用pendsv 来处理任务切换,pendsv会等待所有中断都退出了,才处理切换,所以无所谓嵌套层数吗? ucosii ucosIII TencentOS还兼容其他架构的MCU,例如pic等,所以不允许中断在嵌套中进行调度? rt_thread在中断后如果想进行任务切换,直接在中断中提交信号量、邮箱等使任务就绪,无所谓现在的嵌套层数,都可以进行任务切换,反正pendsv会退出所有中断后再进行任务切换。 不用像ucos检测嵌套层数,在退出所有嵌套的中断最后在提交任务切换。 可以这么理解吗?
查看更多
5
个回答
默认排序
按发布时间排序
rtt-fans
2020-02-07
这家伙很懒,什么也没写!
没人回答吗?
aozima
2020-02-07
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
你可以对比下非M的移植,也会检查的。
rtt-fans
2020-02-08
这家伙很懒,什么也没写!
>你可以对比下非M的移植,也会检查的。 感谢解答 我看了一下`2440 asm9260t`的移植,中断似乎工作再irq模式,不支持中断嵌套 `rt_hw_context_switch_interrupt`并没有完成线程的切换,只是用全局变`rt_interrupt_from_thread` 和`rt_interrupt_to_thread`保存了被换出和换入的线程的栈顶指针,而真正的切换过程在中断处理中IRQ_Handler完成。 并不是我问题里所说的 在中断退出前检测`nest = 0,`再切换
aozima
2020-02-08
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
楼主这里几个问题: 1. 标题`“rt_interrupt_leave 中为什么没有 在退出中断时进行调度“` 对于M,不调度,通过触发PendSV来实现。 对于arm9这类,退出中断时检查是否需要调度。 2. `“rt_hw_context_switch_interrupt并没有完成线程的切换”` 没毛病,中断里面不可能直接切的。切的时机参考问题1。 3. ARM9没支持中断嵌套。如果你的ARM9的中断控制器改造了抢占式中断,可以考虑支持嵌套,但会比较麻烦,所以看你是否必要。
rtt-fans
2020-02-08
这家伙很懒,什么也没写!
对于问题2:是在`IRQ_Handler`中断里进行的切换 ``` IRQ_Handler PROC STMFD SP!, {R0-R12,LR} BL rt_interrupt_enter BL rt_hw_trap_irq BL rt_interrupt_leave ; 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} SUBS PC, LR, #4 ENDP ;------ void rt_hw_context_switch_interrupt_do(rt_base_t flag) ----------------- rt_hw_context_switch_interrupt_do PROC MOV R1, #0 ; Clear flag STR R1, [R0] ; Save to flag variable LDMFD SP!, {R0-R12,LR} ; Reload saved registers STMFD SP, {R0-R2} ; Save R0-R2 SUB R1, SP, #4*3 ; Save old task's SP to R1 SUB R2, LR, #4 ; Save old task's PC to R2 MRS R0, SPSR ; Get CPSR of interrupt thread MSR CPSR_c, #MODE_SVC:OR:NOINT ; Switch to SVC mode and no interrupt STMFD SP!, {R2} ; Push old task's PC STMFD SP!, {R3-R12,LR} ; Push old task's LR,R12-R3 LDMFD R1, {R1-R3} STMFD SP!, {R1-R3} ; Push old task's R2-R0 STMFD SP!, {R0} ; Push old task's CPSR LDR R4, =rt_interrupt_from_thread LDR R5, [R4] ; R5 = stack ptr in old tasks's TCB STR SP, [R5] ; Store SP in preempted tasks's TCB LDR R6, =rt_interrupt_to_thread LDR R6, [R6] ; R6 = stack ptr in new tasks's TCB LDR SP, [R6] ; Get new task's stack pointer LDMFD SP!, {R4} ; Pop new task's SPSR MSR SPSR_cxsf, R4 LDMFD SP!, {R0-R12,LR,PC}^ ; pop new task's R0-R12,LR & PC SPSR to CPSR ENDP ```
撰写答案
登录
注册新账号
关注者
0
被浏览
1.1k
关于作者
rtt-fans
这家伙很懒,什么也没写!
提问
13
回答
37
被采纳
0
关注TA
发私信
相关问题
1
使用CmBacktrace定位错误异常,请教分析原因
2
ARM9、raspberry-pi中断问题
3
内联函数不压栈,会因为中断导致栈内现场被破坏吗
4
rt_hw_context_switch_interrupt的逻辑
5
中断的入口程序在哪个文件里?
6
我想实现一个定时器中断,发现rt_hw_interrupt_install未定义
7
临界区和关中断,是否需要同时使用?
8
gpio 引脚一直进中断,请问怎么办呢?
9
RT-Thread那些API可以在中断程序中调用?
10
spi dma 中断接收的问题
推荐文章
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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
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
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部