搜索
bottom↓
回复: 5

为什么LED例程运行一遍就卡住?

[复制链接]

出0入0汤圆

发表于 2011-6-7 14:29:24 | 显示全部楼层 |阅读模式
运行下载的0.3.1版本中led例程(路径:RT-Thread-0[1].3.1\RT-Thread-0.3.1\bsp\stm3210\project_led),从串口调试助手发现输出如下信息后便不再有任何输出:
\ | /
- RT -     Thread Operating System
/ | \ 0.3.1 build Jun  7 2011
2006 - 2010 Copyright by rt-thread team
led2 on,count : 0

led1 on

有时会多点信息:
\ | /
- RT -     Thread Operating System
/ | \ 0.3.1 build Jun  7 2011
2006 - 2010 Copyright by rt-thread team
led2 on,count : 0

led1 on

led1 off

进入调试状态发现程序运行到start_rvds.S文件的B指令处就死循环了:
WWDG_IRQHandler
PVD_IRQHandler
TAMPER_IRQHandler
RTC_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler
TIM2_IRQHandler
TIM3_IRQHandler
TIM4_IRQHandler
I2C1_EV_IRQHandler
I2C1_ER_IRQHandler
I2C2_EV_IRQHandler
I2C2_ER_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
RTCAlarm_IRQHandler
OTG_FS_WKUP_IRQHandler
TIM8_BRK_IRQHandler
TIM8_UP_IRQHandler
TIM8_TRG_COM_IRQHandler
TIM8_CC_IRQHandler
ADC3_IRQHandler
FSMC_IRQHandler
SDIO_IRQHandler
TIM5_IRQHandler
SPI3_IRQHandler
UART4_IRQHandler
UART5_IRQHandler
TIM6_IRQHandler
TIM7_IRQHandler
DMA2_Channel1_IRQHandler
DMA2_Channel2_IRQHandler
DMA2_Channel3_IRQHandler
DMA2_Channel4_5_IRQHandler
; for STM32F10x Connectivity line devices
DMA2_Channel5_IRQHandler
ETH_IRQHandler
ETH_WKUP_IRQHandler
CAN2_TX_IRQHandler
CAN2_RX0_IRQHandler
CAN2_RX1_IRQHandler
CAN2_SCE_IRQHandler
OTG_FS_IRQHandler
                B       .

                ENDP

                ALIGN

我除了把LED灯的GPIO口号改为我使用的EVB(STM32F103RBT6)上的对应I/O口号并将SRAM大小改为20K,其他什么都没改。为什么LED例程自己进入上面的中断死循环里去?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-6-7 15:14:10 | 显示全部楼层
应该是出了什么中断,然后没相应的中断服务例程,所以b .了

出0入0汤圆

发表于 2011-6-7 17:04:38 | 显示全部楼层
应该是出现了意外的中断,没有对应的处理程序   如果内核异常造成的中断就比较麻烦   需要一定的功底

出0入0汤圆

 楼主| 发表于 2011-6-7 19:18:03 | 显示全部楼层
在调试状态下检查了程序卡死时CPU内核NVIC相关寄存器的状态,发现只有PENDSVC中断Pending着,其他几个被使能的中断此时都未Pending。因为PENDSVC在RTOS内核中是执行线程切换的入口,因此从目前现象看起来程序卡死似乎和PENDSVC中断有关,有种可能是:PENDSVC中断被软件触发,但是CPU响应中断时却跳到了start_rvds.S文件中的死循环里面(正常应跳到线程上下文切换的汇编代码段中)。我把程序卡死时的NVIC状态寄存器快照和内核相关寄存器快照截图下来,请高人帮忙分析一下什么原因。


(原文件名:1.JPG)


(原文件名:2.JPG)

出0入0汤圆

 楼主| 发表于 2011-6-7 19:52:19 | 显示全部楼层
问题找到了:下载的0.3.1版本的LED例程中没有把USART1_Rx中断关闭,但是start_rvds.S文件中USART1_IRQHandler又是空的,从而导致EVB上STM32 MCU的USART1外接可工作的串口设备时触发USART1_Rx中断,进而进入死循环。

出0入0汤圆

发表于 2011-6-8 22:46:49 | 显示全部楼层
问题好深,碰到了都不知道如何解决
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-4 16:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表