|

楼主 |
发表于 2024-12-21 09:39:42
|
显示全部楼层
终于捣鼓成功了, 他奶奶的 , 真费劲, 原来是 tx 设置的 中断保护 造成的
#if 1 使用这个方法 接收 就完全没有问题
__attribute__( ( always_inline ) ) static inline void _tx_thread_system_return_inline(void)
{
unsigned int interrupt_save;
/* Set PendSV to invoke ThreadX scheduler. */
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
if (__get_ipsr_value() == 0)
{
interrupt_save = __get_interrupt_posture();
#ifdef TX_PORT_USE_BASEPRI
__set_basepri_value(0);
#else
__enable_interrupts();
#endif
__restore_interrupt(interrupt_save);
}
}
#define TX_INTERRUPT_SAVE_AREA UINT interrupt_save;
#define TX_DISABLE interrupt_save = __disable_interrupts();
#define TX_RESTORE __restore_interrupt(interrupt_save);
#else
// 使用如下方法接收, 刚开始可以, 接收一会就不行了,
// C/C++ __ARM_ARCH_7M__=1 需要势能这个, 因为 需要用到 如下的一些函数
//#include <stdlib.h>
//#include <string.h>
#include "stm32h7xx_hal.h"
#include "cmsis_armclang.h"
#define ThreadX_MAX_INTERRUPT_PRIORITY (0x10)
#define TX_INTERRUPT_SAVE_AREA uint32_t was_masked;
#define TX_DISABLE was_masked = __get_BASEPRI(); __set_BASEPRI(ThreadX_MAX_INTERRUPT_PRIORITY);
#define TX_RESTORE __set_BASEPRI(was_masked);
#define _tx_thread_system_return _tx_thread_system_return_inline
static void _tx_thread_system_return_inline(void)
{
unsigned int was_masked;
/* Set PendSV to invoke ThreadX scheduler. */
*((ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
if (__get_IPSR() == 0)
{
was_masked = __get_BASEPRI();
__set_BASEPRI(0);
__set_BASEPRI(was_masked);
}
}
#endif
|
|