试验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.测试结果
![](https://img2022.cnblogs.com/blog/1515886/202204/1515886-20220419084743899-300924554.png)
其中均为0x10的情况,推测是ThreadX源码中其他地方此时调用basepri关闭了中断;0x0->0x10->0x0符合实验要求。
p.s.
如果使用primask会发现单独调用TX_DISABLE后,串口中断不会再被响应,与预期相符。