Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
1.2.0RC 挂载3个SPI设备到SPI1上出现的奇怪问题
发布于 2013-11-10 17:16:14 浏览:3426
订阅该版
哎,一直在索取,从未有过贡献,每次出问题都来求助感觉很不好意思。。。 这次这个问题搞了4、5天也没搞清楚,实在没招只能厚着脸皮来发帖, 1.2.0RC中好像没有rt_stm32f10x_spi.c 这个文件,我从之前的某个过程中的这个文件加到其中, 然后挂载3个SPI设备到spi10 spi11 spi12, 然后finish->list_device(),也显示成功加载了这3个device, 然后分别“手动”读写这3个设备也没问题,但是奇怪是是, 当我在单独的一个线程中,“自动”的反复切换调用spi11 和 spi12 这2 个设备时,程序总是死掉, 这个线程干的事情类似于:先不停的读写spi11设备,然后会去不停的读写spi12设备, 不停的读写spi11设备时没问题,一旦要切换到读写spi12设备,程序立刻死掉,打印如下: ```psr: 0x21000000 r00: 0x20004bd0 r01: 0x10000000 r02: 0xf0000000 r03: 0x00000020 r04: 0x20001350 r05: 0x00000000 r06: 0x20001290 r07: 0x00000001 r08: 0x20001288 r09: 0x00000001 r10: 0xdeadbeef r11: 0xdeadbeef r12: 0x0800bfed lr: 0x0800a99d pc: 0x0800a99c hard fault on thread: atau thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- tcpip 0x0c suspend 0x000000dc 0x00000400 0x00000134 0x00000012 000 ushell 0x0d suspend 0x00000080 0x00000800 0x00000248 0x0000000a 000 ttcp 0x0c suspend 0x00000148 0x00000400 0x00000178 0x0000000a 000 atau 0x0b ready 0x000000e0 0x00001000 0x00000210 0x00000009 000 etx 0x0f suspend 0x0000009c 0x00000200 0x0000009c 0x00000010 000 erx 0x0f suspend 0x00000094 0x00000200 0x00000094 0x00000010 000 tidle 0x1f ready 0x00000044 0x00000100 0x00000060 0x00000011 000 usage fault: SCB_CFSR_UFSR:0x02 INVSTATE``` 每次都死在spi_core.c文件中的rt_spi_send_then_recv()函数中的 /* not the same owner as current, re-configure SPI bus */ result = device->bus->ops->configure(device, &device->config); 这个地方,因为切换不同spi设备时,肯定要调用configure()进行重新配置。 为什么说奇怪呢,因为手动发串口命令先读写spi10设备 再读写spi11设备,再读写spi12 设备。。。这样反复再多次也没问题, 但是一旦发串口命令启动挂起的一个线程“自动”切换读写spi11 和 spi12 设备时就会死掉。。。 查了宋岩译的《M3的权威指南》,好像SCB_CFSR_UFSR:0x02 INVSTATE这个错误是:试图切换到ARM状态错误 但是不知道是什么引起的 然后我就反复研究spi_core.c 、 spi_device.c 和rt_stm32f10x_spi.c这3个文件,但始终不懂问题出在哪里。。。
查看更多
5
个回答
默认排序
按发布时间排序
activeleo
2013-11-13
这家伙很懒,什么也没写!
Cortex-M3 不支持ARM状态?是Thumb-2
grissiom
2013-11-13
这家伙很懒,什么也没写!
会不会是 ``` device->bus->ops->configure ``` 中的哪个为空,然后跑飞了?
saiyn
2013-11-14
这家伙很懒,什么也没写!
>会不会是 > >``` >device->bus->ops->configure >``` > > 中的哪个为空,然后跑飞了? --- 不知道啊,但是接收串口命令先使用SPI11设备,再使用SPI12设备也是要执行 device->bus->ops->configure的啊,这样反复反复都正常的。 但是接收串口命令唤起单独的一个线程,这个线程会反复地切换使用2个设备,刚一要从SPI11切换到SPI12程序就崩的 了。而且就死在 device->bus->ops->configure 这个地方,怪异的一米。。。。。。
saiyn
2013-11-14
这家伙很懒,什么也没写!
>Cortex-M3 不支持ARM状态?是Thumb-2 --- 这个我知道啊,但是不知道是哪个地方引起这样的错误的。。。。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.4k
关于作者
saiyn
这家伙很懒,什么也没写!
提问
11
回答
9
被采纳
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
【NXP-MCXA153】 定时器驱动移植
2
GD32F450 看门狗驱动适配
3
【NXP-MCXA153】看门狗驱动移植
4
RT-Thread Studio V2.2.9 Release Note
5
CherryUSB的bootuf2配置
热门标签
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
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
9
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部