[开发工具] 在 CubeIDE调试RTOS 的一些问题

[复制链接]
7|0
jerry尧 发表于 2026-9-20 15:22 | 显示全部楼层 |阅读模式
我有几个关于 FreeRTOS 信号量与队列调试问题:

1. 我的应用程序创建了大量互斥锁和队列,但是每种类型只能看到前 63 个。请问这属于功能限制还是软件 Bug?如果我希望查看剩下的对象,有什么可行的处理办法?
2. 下面是信号量调试视图的截图

2A:`MutexSPI2`是由 CubeMX 通过 CMSIS‑OS 封装层动态创建的互斥锁。

2B:`PS‑Global Lock`是通过下面函数创建的:

mutex_init(&lock,"PS-Global Lock");
其中实现:
int mutex_init(mutex_t *_m, const char* mutex_name) {
        SemaphoreHandle_t *m = (SemaphoreHandle_t *) _m;
        *m = xSemaphoreCreateMutex();
        vQueueAddToRegistry((QueueHandle_t) m,mutex_name);
        return 0;
}

我的猜测:正是因为该互斥锁被当作信号量对象处理,所以它没有在调试视图里归类显示为 MUTEX;但我不理解视图里面 “Size” 与 “Free” 这两个数值含义。

2C:其余的信号量是按如下方式创建:
ps_queue_t *q = calloc(1, sizeof(ps_queue_t));
mutex_init(&q->mux, mutex_name);
semaphore_init(&q->not_empty, 0, sem_name);
对应的初始化函数:
int semaphore_init(semaphore_t *_s, unsigned int value, const char* sem_name) {
        SemaphoreHandle_t *s = (SemaphoreHandle_t *) _s;
        *s = xSemaphoreCreateCounting(INT32_MAX, value);
        vQueueAddToRegistry((QueueHandle_t) s,sem_name);
        return 0;
}

为什么 “Free” 和 “# Blocked Tasks” 数值会变得非常大;这些数值看起来像是代码地址指针。


408586aaf84378aed3.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

219

主题

243

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0