rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

[Feature] rtt进入临界区直接粗暴的关掉全局中断,为何不像FreeRtos那样,只关闭受操作系统管理的中断,而不关闭不受操作系统管理的中断

Open yu1999hub opened this issue 1 year ago • 7 comments

RT-Thread Version master Hardware Type/Architectures bsp/stm32 Develop Toolchain GCC

Describe problem solved by the proposed feature

https://github.com/RT-Thread/rt-thread/blob/master/libcpu/arm/cortex-m4/context_gcc.S#L34-L39

.global rt_hw_interrupt_disable
.type rt_hw_interrupt_disable, %function
rt_hw_interrupt_disable:
    MRS     r0, PRIMASK
    CPSID   I
    BX    

image

https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/portable/GCC/ARM_CM4F/portmacro.h#L122 https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/portable/GCC/ARM_CM4F/portmacro.h#L213-L247

    __asm volatile
    (
        "   mov %0, %1                                              \n" \
        "   msr basepri, %0                                         \n" \
        "   isb                                                     \n" \
        "   dsb                                                     \n" \
        : "=r" ( ulNewBASEPRI ) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
    );

image

yu1999hub avatar Jul 10 '24 08:07 yu1999hub

这个就是要做区分的了,一些可能也会和芯片相关(是否支持中断硬件抢占,以及位数是多少等)

BernardXiong avatar Jul 12 '24 01:07 BernardXiong

这个就是要做区分的了,一些可能也会和芯片相关(是否支持中断硬件抢占,以及位数是多少等)

rtthead 有计划支持可选择性的关闭中断吗

yu1999hub avatar Jul 12 '24 03:07 yu1999hub

在串口数据高速收发中,921600波特率,1000Hz发送频率,serial_v2框架,非阻塞接收,一个包16-24个字节之间,经常遇到包接收不完整导致的丢包,这个会不会也是由于全局中断关闭造成的?

logeexpluoqi avatar Jul 15 '24 08:07 logeexpluoqi

这个就是要做区分的了,一些可能也会和芯片相关(是否支持中断硬件抢占,以及位数是多少等)

rtthead 有计划支持可选择性的关闭中断吗

可以给出方案出来,大家一起来review,讨论

BernardXiong avatar Jul 21 '24 01:07 BernardXiong

basepri issue提出已经几年了 https://github.com/RT-Thread/rt-thread/issues/5808#issuecomment-1146984762 https://github.com/RT-Thread/rt-thread/issues/7110

QIANWC avatar Feb 20 '25 00:02 QIANWC

在串口数据高速收发中,921600波特率,1000Hz发送频率,serial_v2框架,非阻塞接收,一个包16-24个字节之间,经常遇到包接收不完整导致的丢包,这个会不会也是由于全局中断关闭造成的?

实测会出现丢中断的现象,在实时运动控制领域这是不可接受的

yu1999hub avatar Jun 13 '25 03:06 yu1999hub

题外话,我这最近调试 gd32h7 似乎遇到了相反的情况, 系统运行一段时间后,assert 出错了。coremark 打出的调用信息显示,似乎在定时器中断中调用了关终端保护的动作,但是依然触发了串口中断。就挺奇怪的...

Image

a1012112796 avatar Jun 13 '25 07:06 a1012112796