本帖最后由 Jinsq 于 2022-9-19 18:43 编辑
ThreadX升级到6.1.12,BASEPRI使能, 然后1ms给thread 发event, 一开始的时候线程运行正常,但是过了20s到20min后,线程就调度不到了。debug模式下,看到event flag group或者semaphore的suspened_list不是想要的thread了。大家有遇到过这个问题不?
用的MDK 5.36, AC6编译器。
编译宏定义如下
USE_HAL_DRIVER,
STM32H750xx,
DATA_IN_D2_SRAM,
TX_ENABLE_FPU_SUPPORT,
TX_INCLUDE_USER_DEFINE_FILE,T
TX_PORT_USE_BASEPRI,
TX_PORT_BASEPRI=160
中断的代码如下
[C] 纯文本查看 复制代码 void data_ready_int_cb(uint16_t pin)
{
// tx_semaphore_put(&sem_read);
tx_event_flags_set(&dest->os_event,int_event,TX_OR);
}
thread 代码如下
[C] 纯文本查看 复制代码
static uint32_t dummy_data[10] = {0};
void drv_ads131_dev_data_read_thread(ULONG input)
{
uint32_t event;
drv_ads131m08_open(0,0);
drv_exti_cb_register(ADS_DRDY_Pin,data_ready_int_cb);
while(1)
{
// if(TX_SUCCESS == tx_semaphore_get(&sem_read,500))
if(TX_SUCCESS == tx_event_flags_get(&dest->os_event,int_event,TX_OR_CLEAR,(ULONG *)&event,500))
{
uint32_t data[10];
uint32_t index = ads131_resource.sw_resource.index;
ads131_resource.hw_resource.bus->Transfer(dummy_data,data,10);
memcpy(&ads131_resource.sw_resource.data[index],data,40);
ads131_resource.sw_resource.index = (index+1)%10;
}
else
{
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}
}
}
|