Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Hardfault
基于STM32103VC移植Rtthread进入硬件错误中断,请求各位看看
发布于 2020-04-10 16:02:21 浏览:2099
订阅该版
本人直接基于Rtthread4.01版本的官方移植好的[STM32F1](http://openedv.taobao.com/)03例程直接下载到[开发板](http://eboard.taobao.com/)上跑,系统正常运行,LED运行正常; 但由于项目需求,需要使得部分中断不能被操作系统打断,于是修改了官网移植好的context_rvds.S,需改内容如下(列出修改部分,其他没有改动), 一共修改4处,都是与开关中断有关的;改完还有重新编译运行,系统直接进入硬件错误中断,但是我之前用[STM32F407](http://openedv.taobao.com/)这样改一点问题没有, 现在不知道问题出在哪里,请各位大神帮帮小弟: --- ------------------------源文件------------------------------ ``` ;/* ; * rt_base_t rt_hw_interrupt_disable(); ; */ rt_hw_interrupt_disable PROC EXPORT rt_hw_interrupt_disable MRS r0, PRIMASK CPSID I BX LR ENDP ;/* ; * void rt_hw_interrupt_enable(rt_base_t level); ; */ rt_hw_interrupt_enable PROC EXPORT rt_hw_interrupt_enable MSR PRIMASK, r0 BX LR ENDP PendSV_Handler PROC EXPORT PendSV_Handler ; disable interrupt to protect context switch MRS r2, PRIMASK CPSID I pendsv_exit ; restore interrupt MSR PRIMASK, r2 ``` --- ------------------------------修改文件--------------------------------------- ``` ;/* ; * rt_base_t rt_hw_interrupt_disable(); ; */ rt_hw_interrupt_disable PROC EXPORT rt_hw_interrupt_disable MOV r0, #0x50 MSR BASEPRI,r0 BX LR ENDP ;/* ; * void rt_hw_interrupt_enable(rt_base_t level); ; */ rt_hw_interrupt_enable PROC EXPORT rt_hw_interrupt_enable MOV r0, #0 MSR BASEPRI,r0 BX LR ENDP PendSV_Handler PROC EXPORT PendSV_Handler ; disable interrupt to protect context switch MOV r2, #0x50 MSR BASEPRI,r2 pendsv_exit ; restore interrupt MOV r2, #0 MSR BASEPRI,r2 ```
查看更多
3
个回答
默认排序
按发布时间排序
Rses_001
2020-04-14
这家伙很懒,什么也没写!
不清楚你所说的不能被打断的代码是用户代码还是ISR。操作系统的用到的是systick和SVC中断,这两个中断的优先级都是可以配置的,中断优先级高于系统中断,是不会被打断的。如果是普通代码,那调用进入临界区宏,同样可以保证不被系统打断。为什么一定要修改这个系统的代码呢?
huangyj1118A
2020-04-17
这家伙很懒,什么也没写!
>清楚你所说的不能被打断的代码是用户代码还是ISR。操作系统的用到的是systick和SVC中断,这两个中断的优 ... 抱歉,是我没说清楚; 不能被打断的代码是用户中断里面的可执行代码(优先级为0最高),systick和SVC中断一般都是低优先级,,但是RTT操作系统在进入临界区时会关闭中断,这无可厚非,但官方的关闭中断实现方式是直接把全部中断都关闭了 ``` MRS r0, PRIMASK CPSID I; ``` 而不是向freertos一样分级关断(操作BASEPRI寄存器); 这在部分对ISR实时性要求高的地方是不可取的; 所以我才改了开关中断的代码;望指教下? freetos: ```c #define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI() #define portENABLE_INTERRUPTS() vPortSetBASEPRI( 0 ) static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI ) { __asm { /* Barrier instructions are not used as this function is only used to lower the BASEPRI value. */ msr basepri, ulBASEPRI } } /*-----------------------------------------------------------*/ static portFORCE_INLINE void vPortRaiseBASEPRI( void ) { uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY; __asm { /* Set BASEPRI to the max syscall priority to effect a critical section. */ msr basepri, ulNewBASEPRI dsb isb } } ```
rt_liner
2023-06-12
这家伙很懒,什么也没写!
楼主,这个帖子有下文吗,我遇到同样的需求,准备按照 freertos 的方式修改开关中断。 需要注意的是设置好 SysTick、SVC、PendSV 的中断优先级, 需要低于 `configMAX_SYSCALL_INTERRUPT_PRIORITY`
撰写答案
登录
注册新账号
关注者
0
被浏览
2.1k
关于作者
huangyj1118A
这家伙很懒,什么也没写!
提问
1
回答
1
被采纳
0
关注TA
发私信
相关问题
1
RTT1.0,STM32调试时会跑到HardFault【已解决】,出现新问题
2
新手请教关于hardfault怎么查
3
github最新版本库中stm32f0X分支,运行切换任务时候出现hardfault[已解决]
4
实现iap功能,bootloader使用了rtt操作系统,在跳转到app代码的时候提示出现hardfault的问题
5
ymodem在on_begin内发送can无法断开连接,而且RTT会报hardfault
6
挂载UFFS文件系统执行到退出_BuildTreeStepOne函数时hardfault异常
7
STM32F1+RTT串口接收中断进入hardfault
8
STM32F746NG随机进入hardfault(已解决)
9
[已解决]自已建了个STM32F103的MDK工程,初始化时总是进入HardFault,求教!
10
将 Cortex M3 的 hardfault 处理与 M4、M7、M0 保持一致?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
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
雅特力单片机开发工具
2
NXP MCXN236测评——rt-thread中配置启动PWM
3
MilkV Duo RT-Thread HWtimer 对接
4
【NXP-MCXA153】RTT PIN驱动添加
5
NXP MCXN236测评-FLASH
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
DMA
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
ESP8266
rt-smart
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
packages_软件包
cubemx
freemodbus
PWM
潘多拉开发板_Pandora
定时器
BSP
ADC
flashDB
中断
编译报错
Debug
socket
GD32
msh
keil_MDK
at_device
SFUD
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1508
个答案
341
次被采纳
小小李sunny
1431
个答案
289
次被采纳
张世争
751
个答案
163
次被采纳
crystal266
546
个答案
159
次被采纳
whj467467222
1221
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
3
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
3
篇文章
5
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部