完善资料让更多小伙伴认识你,还能领取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上过飞机 去过火星 有各种各样的认证
|
|
|
|
只有小组成员才能发言,加入小组>>
710 浏览 0 评论
1120 浏览 1 评论
2497 浏览 5 评论
2836 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2677 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
662浏览 9评论
673浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
791浏览 6评论
638浏览 5评论
681浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 09:08 , Processed in 1.030621 second(s), Total 83, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号