硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1580|回复: 4
收起左侧

[ThreadX全家桶] ThreadX 升级到6.1.12,并且使能BASEPRI后,event flag和semphore等待有问题。

[复制链接]

5

主题

11

回帖

26

积分

新手上路

积分
26
发表于 2022-9-19 18:36:08 | 显示全部楼层 |阅读模式
本帖最后由 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);
        }    
    }
}    


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2022-9-20 04:04:23 | 显示全部楼层
这个得我有时间了试试,我一直用的我自己做的basepri开关中断,暂没遇到过问题。
回复

使用道具 举报

5

主题

11

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2022-9-28 15:32:21 | 显示全部楼层
问题找到了,下面的宏定义需要再编译器配置的ASM标签里再写一次
TX_ENABLE_FPU_SUPPORT,
TX_PORT_USE_BASEPRI,
TX_PORT_BASEPRI=160
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2022-9-28 19:19:31 | 显示全部楼层
Jinsq 发表于 2022-9-28 15:32
问题找到了,下面的宏定义需要再编译器配置的ASM标签里再写一次
TX_ENABLE_FPU_SUPPORT,
TX_PORT_USE_BAS ...

好的,解决了就好,ThreadX有这么个问题,不管什么宏定义,只要涉及到底层的,都要汇编和C都配置一份。
回复

使用道具 举报

4

主题

1459

回帖

1471

积分

至尊会员

积分
1471
发表于 2022-9-29 15:37:14 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-15 02:21 , Processed in 0.037151 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表