Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
请教关于开关中断的提问
发布于 2012-04-24 09:18:24 浏览:5298
订阅该版
在RT-Thread 1.0.1的stm32f10x bsp中关中断是通过CPSID I来实现的。如果在系统中需要不能被os关闭的中断,比如在定时器中断中用ad对50hz的交流信号进行一个周波32点的采样。 这时是不是需要使用 BASEPRI寄存器来只掩蔽优先级低于某一阈值的中断来实现。 这样改对吗?r1是否需要先入栈? ``` ;/* ; * rt_base_t rt_hw_interrupt_disable(); ; */ rt_hw_interrupt_disable PROC EXPORT rt_hw_interrupt_disable MRS r0, BASEPRI MOV r1, #0x80 MSR BASEPRI, r1 BX LR ENDP ;/* ; * void rt_hw_interrupt_enable(rt_base_t level); ; */ rt_hw_interrupt_enable PROC EXPORT rt_hw_interrupt_enable MSR BASEPRI, r0 BX LR ENDP ``` 如果某个中断不受os管理的话,它还能使用os的功能函数吗?比如用信号量来通知线程。
查看更多
9
个回答
默认排序
按发布时间排序
xiao苦
2012-04-24
这家伙很懒,什么也没写!
你可以把定时器的优先级设定比系统优先级高。这样定时器就不会被打断。但是考虑到稳定性,只有测试过才知道。
zfshenghua
2012-04-24
这家伙很懒,什么也没写!
就算定时器的优先级设定比系统优先级高,但是如果os使用CPSID I来进行关中断的话是不是可能会有定时器中断延迟响应的情况?
bernard
2012-04-24
这家伙很懒,什么也没写!
这个改动要从整个系统的角度来考虑,会是比较麻烦的。最好的方法是不更改现有机制而想其他办法,例如减少关闭中断时间相关的占用。
gpfrank
2012-07-18
这家伙很懒,什么也没写!
我也遇到精细中断控制的问题。 做脉冲输出方面,需要计数脉冲输出个数,当个数达到后,中断关闭输出。 这个时候,如果OS关闭全部中断,就可能导致脉冲输出的个数变多,特别是通道多,频率快的时候。 有时候允许的临界时间要少于2.5US。对于STM32来说是个很紧迫的时间。 这个时候希望能够对中断进行精细的控制,我也想使用BASEPRI这个儿不是全部关闭。 不知道为何CORTEX-M3分之没有使用BASE而是使用的全局中断控制。 我时候可以吧SYSTICK放置在一个级别。 使用BASEPRIM来关闭仅OS以下的中断呢? 这样有什么样子的限制吗? 因为没有一份详细的RT-THREAD的内核关闭中断时间的统计。 不清楚内核关中断的时间到底是多少个CLOCK,还有频繁程度。 应用部分可以自己控制。
bernard
2012-07-19
这家伙很懒,什么也没写!
不关闭总中断,需要这部分中断处理与整个系统的处理完全区分开来,否则系统的一些数据会被破坏掉。 另外就是任务切换的时候,对中断嵌套的处理,因为在RT-Thread的pendsv异常处理中对中断嵌套情况进行了特别处理,以防止多次pendsv异常,或未完成的pendsv异常的情况。
netyrj
2012-10-17
这家伙很懒,什么也没写!
RT-Thread 修改内核数据时会关中断,有的 RTOS 这时只会关掉线程调度,减少关中断的时间,不过中断处理程序就要做特殊处理。RT-Thread 以后会不会增加这种特征?
gpfrank
2017-10-26
这家伙很懒,什么也没写!
>在RT-Thread 1.0.1的stm32f10x bsp中关中断是通过CPSID I来实现的。如果在系统中需要不能被os关闭的中断,比如在定时器中断中用ad对50hz的交流信号进行一个周波32点的采样。 >这时是不是需要使用 BASEPRI寄存器来只掩蔽优先级低于某一阈值的中断来实现。 >这样改对吗?r1是否需要先入栈? > > >``` >;/* >; * rt_base_t rt_hw_interrupt_disable(); >; */ >rt_hw_interrupt_disable PROC > EXPORT rt_hw_interrupt_disable > MRS r0, BASEPRI > MOV r1, #0x80 > MSR BASEPRI, r1 > BX LR > ENDP > >;/* >; * void rt_hw_interrupt_enable(rt_base_t level); >; */ >rt_hw_interrupt_enable PROC > EXPORT rt_hw_interrupt_enable > MSR BASEPRI, r0 > BX LR > ENDP >``` > > >如果某个中断不受os管理的话,它还能使用os的功能函数吗?比如用信号量来通知线程。 --- 您最后怎么解决的?
gpfrank
2018-05-21
这家伙很懒,什么也没写!
因为调查了所有RT-THREAD相关的代码,使用 ``` rt_hw_interrupt_enable rt_hw_interrupt_diable ``` 的地方实在太多了。 是否可以像楼主这样。采用FREERTOS的办法。设置一个系统优先级。 这个优先级以下的都是被关闭的。 这个优先级以上的,都不被关闭。 而高于系统优先级的这部分,不使用任何系统级别的服务。 这样是否可以?
撰写答案
登录
注册新账号
关注者
0
被浏览
5.3k
关于作者
zfshenghua
这家伙很懒,什么也没写!
提问
1
回答
16
被采纳
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
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
2
freemodbus主机在freertos的适配,参考rtthread例程
3
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
4
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
5
RT-Thread EtherKit开源以太网硬件正式发布
热门标签
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
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部