完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、如何保证消息不被覆盖
OSPost函数直接将消息的地址发布,OSPend将这个地址读取并返回。 [C] 纯文本查看 复制代码 Task1(){uint16_t TouchState[2];TouchState[0]=Touch_State.touchX[0];TouchState[1]=Touch_State.touchY[0];OSQPost((OS_Q*)&TS_Msg,(void*)TouchState,(OS_MSG_SIZE)sizeof(TouchState),(OS_OPT)OS_OPT_POST_FIFO,(OS_ERR*&err); } Task1中声明了一个局部的数组用来打包数据,OSPost函数直接将这个数组的地址发布 在Task2中调用OSPend函数可以得到那个数组的地址。通过在Keil中的单步运行设置断点查看两个函数中的TouchState跟Touchstate的地址可以印证这一点。 [C] 纯文本查看 复制代码 Task2(){uint16_t* Touchstate;Touchstate=OSQPend((OS_Q*)&TS_Msg, (OS_tiCK )0, (OS_OPT )OS_OPT_PEND_BLOCKING, (OS_MSG_SIZE* )&size, (CPU_TS* )0, (OS_ERR* )&err);} 那么问题就出现了,数组是一个局部变量,函数调用完内存就被释放了。这段程序其实是能实现消息的发送的,但是有2个地方没想明白 首先,OS是如何保证函数执行完那个数组里面的内容不被擦除呢? 其次,每次发布时候都是将当前的数组地址发布,连续Post但是没有Pend就是不断存入在消息队列当中,根据实验现象发现先存入的被后存入的顶掉,这个现象跟前面的现象是能对上的:因为每次发布消息最终发布的地址是不变的。那如何才能实现一下子Post多个数据然后一个一个Pend? |
|
相关推荐
2个回答
|
|
楼主解决这个问题了吗? 我现在也很困惑
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
807 浏览 0 评论
1159 浏览 1 评论
2534 浏览 5 评论
2867 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2717 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1100浏览 3评论
198浏览 2评论
464浏览 2评论
378浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
459浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 01:40 , Processed in 1.031121 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号