我有几个关于 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” 数值会变得非常大;这些数值看起来像是代码地址指针。
|
|