Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Hardfault
基于STM32103VC移植Rtthread进入硬件错误中断,请求各位看看
发布于 2020-04-10 16:02:21 浏览:2253
订阅该版
本人直接基于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.3k
关于作者
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
国产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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
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
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部