世界足球俱乐部杯

登录 免费注册 世界足球俱乐部杯 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

RTOS相关:谁能解决这个指针问题?

作者:treul 栏目:嵌入式系统
RTOS相关:谁能解决这个指针问题?
typedef struct t_msg {
int a;
CHAR b;
} T_MSG;

typedef struct _mess {
SHORT c;
unsigned int d;
BOOL e;
} NET_MSG;


ER prcv_mbx(ID, T_MSG**);


void func(int x)
{
NET_MSG *rmess;
.
.
if(prcv_mbx((ID)mbxid, (T_MSG**)&rmess)==OK)
rmess->e = TRUE; //请问高手们,收到消息后,rmess仍旧是NET_MSG*类型吗?我认为rmess指向的实际上应该已经是T_MSG类型的东东了,对吗?
.
.
}

2楼: >>参与讨论
treul
help
没人能回答吗?

3楼: >>参与讨论
computer00
怎么会变呢?它依然是NET_MSG*类型
    强制类型转化,只是临时的。

4楼: >>参与讨论
treul
但是,
消息实体是T_MSG结构的啊。收到消息后,rmess的值(也就是一个地址),已经是指向这个消息实体了啊。这时候再引用NET_MSG的成员还有意义吗?

5楼: >>参与讨论
highend
看一看 函数的调用,参数的传递.......
这属于C语言的基本问题



6楼: >>参与讨论
computer00
rmess的值,什么时候被改变了?不是一直没有变么?
 
7楼: >>参与讨论
treul
我知道,类型转化是临时的,但是:
prcv_mbx((ID)mbxid, (T_MSG**)&rmess)
中把rmess的地址作为参数传递给函数,那么调用以后,rmess的地址上实际已经存放了一个指向T_MSG结构的指针了,对吧?那继续把rmess当作NET_MSG的指针来引用还有什么意义?rmess->e = ...

8楼: >>参与讨论
computer00

你在函数prcv_mbx((ID)mbxid, (T_MSG**)&rmess) 里改变了rmess的值么?
即使你改变它的值,它的类型也是改变不了的。
rmess的类型始终是NET_MSG,不管它指向了那里。
所以必须要用rmess->e 来访问。
如果你认为rmess指向了T_MSG,
而用rmess指向T_MSG的成员,则编译通不过。

rmess的类型是改不了的。如果要改,只能在用的时候,
加强制类型转换,象prcv_mbx((ID)mbxid, (T_MSG**)&rmess)里的
那个强制类型转换。

9楼: >>参与讨论
treul
computer00:
谢先!

我说了,我知道rmess的类型没有变。我是想说,在函数调用以后,虽然rmess的类型没有变(仍然是NET_MSG*),但是它实际上指向的地址处是一个T_MSG结构的数据结构。你说是吗??因为prcv_mbx函数的功能就是把一个T_MSG*型的指针(也就是消息指针)存放到T_MSG**处。我觉得这时候再用rmess引用NET_MSG的成员有点不解~

10楼: >>参与讨论
computer00
你怎么不把prcv_mbx函数贴上来?
    你不贴出来,我们怎么知道prcv_mbx是否改变了rmess的值?

11楼: >>参与讨论
treul
呵呵
谢谢了computer00!

交个朋友?

那个函数是内核了,你也知道。uITRON4的。

我大致也整明白了。Thank u!

12楼: >>参与讨论
computer00
客气
 
13楼: >>参与讨论
ruanhsh
treul:你的理解是正确的
treul:你的理解是正确的,实际上,你记住一个关键点,
在prcv_mbx内部实现,一定是将一个NET_MSG*赋值给rmess的,
只是这种赋值过程它会先通过强制为T_MSG*,就像你接口的类型转换一样。
不然,rmess->e的就非预测的值了。
这种方法是为统一接口,其实做的并不是很好。


参与讨论
昵称:
讨论内容:
 
 
相关帖子
奇怪的问题,请教大家,在线等!!!
有谁知道在bc++4.5版集成开发环境里如何建立工程调试ucos吗?
求助:这段代码是什么意思?
请教-- 自己做HUB用什么芯片?
网口滤波电容问题


Copyright © 1998-2006 domainnameq.cn 浙ICP证030469号