OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4986|回复: 8

关于OSQPost函数的问题?

[复制链接]

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
652
金钱
652
注册时间
2013-11-22
在线时间
130 小时
发表于 2016-3-7 11:21:13 | 显示全部楼层 |阅读模式
大家好,想请问下下面的函数
INT8U OSQPost (OS_EVENT *pevent, void *msg);

给msg传递的是不是要是全局的内存地址?
而不能传局部的内存地址?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-7 12:16:26 | 显示全部楼层
只要保证OSQPost 函数在执行完毕之前该局部变量尚未被回收即可
回复 支持 反对

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
652
金钱
652
注册时间
2013-11-22
在线时间
130 小时
 楼主| 发表于 2016-3-7 12:31:16 | 显示全部楼层
xkwy 发表于 2016-3-7 12:16
只要保证OSQPost 函数在执行完毕之前该局部变量尚未被回收即可

这个不好保证吧,程序运行的时候状态无法把握,那么就是说要用全局变量了?
回复 支持 反对

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-7 12:53:19 | 显示全部楼层
zhp 发表于 2016-3-7 12:31
这个不好保证吧,程序运行的时候状态无法把握,那么就是说要用全局变量了?

比如说这样:
[mw_shl_code=c,true]
void test(void)
{
    OS_EVENT x;
    char s[80];
    /* other code */
    OSQPost(&x, (void*)s);
    /* other code */
}[/mw_shl_code]

完全可以,因为那两个变量是由test函数从栈里申请的,test函数还没有执行完毕,当然未被回收,所以可以传参数给OSQPost,
坚决不用寄存器,拒绝重复造轮子。
回复 支持 反对

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
652
金钱
652
注册时间
2013-11-22
在线时间
130 小时
 楼主| 发表于 2016-3-7 13:40:31 | 显示全部楼层
xkwy 发表于 2016-3-7 12:53
比如说这样:
[mw_shl_code=c,true]
void test(void)

要是因为某种原因,test已经执行完了,而OPQPend还没收到,那消息的源地址找不到了,接收方收到的不知道是啥了,有这种可能吧
回复 支持 反对

使用道具 举报

70

主题

6684

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12613
金钱
12613
注册时间
2012-11-26
在线时间
3701 小时
发表于 2016-3-7 13:50:01 | 显示全部楼层
zhp 发表于 2016-3-7 13:40
要是因为某种原因,test已经执行完了,而OPQPend还没收到,那消息的源地址找不到了,接收方收到的不知道 ...

包裹都寄出去了,寄件方消失,包裹就送不到了?
学无止境
回复 支持 反对

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
652
金钱
652
注册时间
2013-11-22
在线时间
130 小时
 楼主| 发表于 2016-3-7 14:03:19 | 显示全部楼层
jermy_z 发表于 2016-3-7 13:50
包裹都寄出去了,寄件方消失,包裹就送不到了?

接收方是能收到,但是发送方给的地址被系统收回了,那接收方找的那个地址就可能不对了吧
回复 支持 反对

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-7 14:09:40 | 显示全部楼层
zhp 发表于 2016-3-7 14:03
接收方是能收到,但是发送方给的地址被系统收回了,那接收方找的那个地址就可能不对了吧

你要是用C语言的话,
如上代码,OSQPost执行完毕后才会执行到第七行
坚决不用寄存器,拒绝重复造轮子。
回复 支持 反对

使用道具 举报

70

主题

6684

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12613
金钱
12613
注册时间
2012-11-26
在线时间
3701 小时
发表于 2016-3-7 14:50:04 | 显示全部楼层
zhp 发表于 2016-3-7 14:03
接收方是能收到,但是发送方给的地址被系统收回了,那接收方找的那个地址就可能不对了吧

呵呵,感觉你根本没有系统的概念,还在执着源地址
学无止境
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-1 18:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表