Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
SPI
使用spi和定时器中断时遇到shall not be used in ISR
发布于 2018-10-15 17:41:30 浏览:6771
订阅该版
你好:我使用的是RT-Thread v3.1.0 released,使用scon编译的bsp/stm32f10x-HAL工程,然后新建一个线程中使用了spi和定时器中断,然后运行过程中,当定时器中断发送时串口打印如下错误 ``` Function[rt_mutex_take] shall not be used in ISR (0) assertion failed at function:rt_mutex_take, line number:656 ``` 感觉是SPI和定时器中断发送了冲突,刚接触这个系统,还不熟悉,我需要在定时器中断函数中关闭硬件中断什么的么? 谢谢
查看更多
9
个回答
默认排序
按发布时间排序
misonyo
2019-01-22
这家伙很懒,什么也没写!
RTT SPI数据收发相关函数会调用rt_mutex_take(),此函数不能再中断函数中使用。
yangjie
认证专家
2019-01-22
hello
互斥量不可以在中断中使用
liu2guang
认证专家
2019-01-23
这家伙很懒,什么也没写!
[i=s] 本帖最后由 liu2guang 于 2019-1-23 14:22 编辑 [/i] 中断中为何不能使用take互斥量? take互斥量会导致睡眠 中断中为何不能睡眠? 中断发生以后,CPU跳到内核设置好的中断处理代码中去,由这部分内核代码来处理中断。这个处理过程中的上下文就是中断上下文。 为什么可能导致睡眠的函数都不能在中断上下文中使用呢? 首先睡眠的含义是将进程置于“睡眠”状态,在这个状态的进程不能被调度执行。然后,在一定的时机,这个进程可能会被重新置为“运行”状态,从而可能被调度执行。 可见,“睡眠”与“运行”是针对进程而言的,代表进程的task_struct结构记录着进程的状态。内核中的“调度器”通过task_struct对进程进行调度。 但是,中断上下文却不是一个进程,它并不存在task_struct,所以它是不可调度的。所以,在中断上下文就不能睡眠。 那么,中断上下文为什么不存在对应的task_struct结构呢? 中断的产生是很频繁的(至少每毫秒(看配置,可能10毫秒或其他值)会产生一个时钟中断),并且中断处理过程会很快。如果为中断上下文维护一个对应的task_struct结构,那么这个结构频繁地分配、回收、并且影响调度器的管理,这样会对整个系统的吞吐量有所影响
yqiu
2018-10-15
这家伙很懒,什么也没写!
Function[rt_mutex_take] shall not be used in ISR (0) assertion failed at function:rt_mutex_take, line number:656 翻译下 不应在中断ISR 中使用 rt_mutex_take
杨庆涛NB
2018-10-15
这家伙很懒,什么也没写!
遇到和你一样的问题,求解
zchong
2018-10-15
这家伙很懒,什么也没写!
中断中使用了rt_mutex_take?中断中不能使用可能使系统挂起的函数。
lissettecarlr
2018-10-16
这家伙很懒,什么也没写!
完全没用过这些涉及系统的函数,中断里面肯定也没有,难道是自带的SMT32F10X的外设驱动有问题么- -|
yqiu
2018-10-16
这家伙很懒,什么也没写!
>完全没用过这些涉及系统的函数,中断里面肯定也没有,难道是自带的SMT32F10X的外设驱动有问题么- -| ... --- 看下堆栈回溯信息,应该是ISR调用的某个函数,里面用到了rt_mutex_take,例如rt_malloc;
lissettecarlr
2018-10-18
这家伙很懒,什么也没写!
我层层屏蔽是发现 SPI读写的问题,屏蔽了就是没有这个报错,但是治标不治本,没有发现问题的核心,依照目前的情况分析,也就是在定时器 或者GPIO中断中操作SPI有一定概率发生问题,也不能说是概率吧,应该是写法,例如嵌套多层之类的,还没有发现规律,但是这个报错我这儿基本都是在中断中执行了SPI操作导致的。 这样以来就很尴尬了,其他厂家提供的设备驱动本来是留出接口,用户只需要传入读写函数即可,但是这样以来,就不得不给RTT单独写一套。就我现在来说,就是讲本来原厂驱动在中断函数中执行的操作,改写成发送一个事件,然后在接收事件处来执行。这样一改,就无法移植其他地方咯
撰写答案
登录
注册新账号
关注者
0
被浏览
6.8k
关于作者
lissettecarlr
这家伙很懒,什么也没写!
提问
12
回答
14
被采纳
0
关注TA
发私信
相关问题
1
BBB的SPI驱动
2
求个SPI上挂两个或多个设备的使用例子
3
SPI设备有个bug
4
spi flash 的fatfs使用一段时间后读写文件出现故障
5
SPI驱动
6
请教rt_spi_configure函数理解
7
SPI FLASH挂载的问题
8
SPI-FLASH 文件系统 SPIFFS
9
求助一个完整的 spi flash 驱动
10
关于同时使用文件系统与SPI FLASH的问题
推荐文章
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
在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区
2
GD32F450 片内 flash驱动适配
3
STM32H7R7运行CherryUSB
4
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
5
使用RC522软件包驱动FM1722
热门标签
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在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
6
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部