试验ThreadX Basepri功能

1.在C++和ASM中添加宏

TX_PORT_USE_BASEPRI

2.在tx_user.h文件添加宏

#define TX_PORT_BASEPRI (0x10)  //屏蔽中断优先级小于0的中断

3.在串口空闲中断中添加测试指令

#include "tx_api.h"

unsigned int num = 0;
//extern TX_THREAD AppTaskCOMTCB;
void HAL_UART_RxIDLECpltCallback(UART_HandleTypeDef *huart)
{
    if (USART_RX_BUF[USART_RX_CNT - 3] == 0x2A && USART_RX_BUF[USART_RX_CNT - 2] == 0x31 && USART_RX_BUF[USART_RX_CNT - 1] == 0x23) //*1#
    {
        TX_INTERRUPT_SAVE_AREA
        printf("\r\n##########\r\n");
        printf("\r\n收到指令1\r\n");
        cmd_num = 1;
        // tx_thread_terminate(&AppTaskCOMTCB);
        num = __get_interrupt_posture();
        printf("\r\nB: %#x!\r\n", num);
        num = 5;
        TX_DISABLE
        num = __get_interrupt_posture();
        printf("\r\nA1: %#x!\r\n", num);
        num = 6;
        TX_RESTORE
        num = __get_interrupt_posture();
        printf("\r\nA2: %#x!\r\n", num);
        num = 7;
    }
}

4.测试结果

其中均为0x10的情况,推测是ThreadX源码中其他地方此时调用basepri关闭了中断;0x0->0x10->0x0符合实验要求。

p.s.
如果使用primask会发现单独调用TX_DISABLE后,串口中断不会再被响应,与预期相符。

posted @ 2022-04-19 08:57  中庭之园  阅读(208)  评论(0编辑  收藏  举报