完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛扫一扫,分享给好友
|
最近在测试UCOSII的消息队列的时候发现一个bug。
我定义一个消息指针数据和一个消息队列控制块 #define size 1 消息队列长度为1 void *MsgGrp[size];//定义消息指针数组,长度为1 OS_EVENT *Str_p;//消息队列控制块 在一个任务中创建一个消息队列: Str_p = OSQCreate (&MsgGrp[0],size);//创建一个消息队列 按照上面的逻辑我创建的消息队列长度应该是1,但是在实际测试过程中发现,实际的消息队列长度是2。 进入OSQCreate ()函数里面查看发现了问题如下图; 虽然这样用不会出现问题,但是我比较担心的是,我定义的void *MsgGrp[size],size长度是1,那么他能够使用的数组元素的应该是MsgGrp[0],而MsgGrp[1]应该是非法的吧? |
|
相关推荐
3个回答
|
|
|
[C] 纯文本查看 复制代码
OS_EVENT *OSQCreate (void **start, INT16U size){ OS_EVENT *pevent; OS_Q *pq;#if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr = 0u;#endif#ifdef OS_SAFETY_CRITICAL_IEC61508 if (OSSafetyCriticalStartFlag == OS_TRUE) { OS_SAFETY_CRITICAL_EXCEPTION(); }#endif if (OSIntNesting > 0u) { /* See if called from ISR ... */ return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */ } OS_ENTER_CRITICAL(); pevent = OSEventFreeList; /* Get next free event control block */ if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */ OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr; } OS_EXIT_CRITICAL(); if (pevent != (OS_EVENT *)0) { /* See if we have an event control block */ OS_ENTER_CRITICAL(); pq = OSQFreeList; /* Get a free queue control block */ if (pq != (OS_Q *)0) { /* Were we able to get a queue control block ? */ OSQFreeList = OSQFreeList->OSQPtr; /* Yes, Adjust free list pointer to next free*/ OS_EXIT_CRITICAL(); pq->OSQStart = start; /* Initialize the queue */ pq->OSQEnd = &start[size]; pq->OSQIn = start; pq->OSQOut = start; pq->OSQSize = size; pq->OSQEntries = 0u; pevent->OSEventType = OS_EVENT_TYPE_Q; pevent->OSEventCnt = 0u; pevent->OSEventPtr = pq;#if OS_EVENT_NAME_EN > 0u pevent->OSEventName = (INT8U *)(void *)"?";#endif OS_EventWaitListInit(pevent); /* Initalize the wait list */ } else { pevent->OSEventPtr = (void *)OSEventFreeList; /* No, Return event control block on error */ OSEventFreeList = pevent; OS_EXIT_CRITICAL(); pevent = (OS_EVENT *)0; } } return (pevent);} |
|
|
|
|
|
图挂了把OSQCreate 的函数代码贴在下面了,注意第36行是直接使用了size!
|
|
|
|
|
|
这是不可能的,ucos上过飞机 去过火星 有各种各样的认证
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1018 浏览 1 评论
1849 浏览 0 评论
1830 浏览 1 评论
3254 浏览 5 评论
3581 浏览 9 评论
1022浏览 1评论
1850浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1360浏览 1评论
1852浏览 0评论
1178浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 06:22 , Processed in 0.614968 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1219