嵌入式学习小组
直播中

张杰

7年用户 255经验值
私信 关注

为什么ucosiii发送消息会显示错误码OS_ERR_INT_Q_FULL?

在DCMI中断里给一个任务发送消息,大致逻辑如下
char *p = NULL;
p = malloc(2);
if (p != NULL)
{
     if (flag)
    {
        P = "1";
        OSTaskQPost(&TASK, P, 2, OS_OPT_POST_FIFI, &ERR)
    }
    else
    {
        P = "2"
        OSTaskQPost(&TASK, P, 2, OS_OPT_POST_FIFO, &ERR);
    }
}
free(p);
第一个可以发送出去消息,第二个就有错误,错误码是OS_ERR_INT_Q_FULL;
malloc和free函数是原子的历程,简写了,我在UCOSIII的书上找,没看到这个错误码,不知道是什么意思啊?为什么 if 里的语句能发消息,else 里的就会出现错误啊?

回帖(5)

卢家辉

2019-10-8 09:26:41
一个的话就只能接收一个消息,如果你POST的消息没有其他地方PEND,那么计数就不会减少。这样再POST的就会失败。你可以打印你的消息队列在post和pend处理前后计数的值出来看看。
举报

徐振方

2019-10-8 09:38:31
我在UCOS官网下载了一个UCOSIII-API REFERENCE文档,上面写
OS_ERR_INT_Q_FULL
If OS_CFG_ISR_POST_DEFERRED_EN is to DEF_ENABLED in os_cfg.h: If the deferred
interrupt post queue is full.
没看懂是啥意思,但是我把OS_CFG_ISR_POST_DEFERRED_EN 这个宏设置成0就不会出现这个错误码了,不知道为什么
举报

刘慧

2019-10-8 09:57:28
你的消息队列设置是多少个?
这个应该是消息队列满了,如果你不能及时处理,消息队列可以设置大一点。
举报

苏笛笛

2019-10-8 10:05:18
消息队列设置的1,除了DCMI中断没别的任务发消息了,我改过消息队列大小,没有用,
举报

更多回帖

发帖
×
20
完善资料,
赚取积分