[嵌入式linux] linux下应用程序的函数调用问题..极度郁闷!

[复制链接]
 楼主| sassos 发表于 2008-7-4 16:49 | 显示全部楼层 |阅读模式
c写的应用程序,遇到很郁闷的问题:
函数a{}和函数b{}都需要调用函数c{};在c{}中定义变量int cnt=0xaa;
函数a{}先调用c{,修改cnt=0x55;
接着函数b{}调用c{},取到的cnt的值却一直是0xaa;
极度郁闷,各位指点..........
 楼主| sassos 发表于 2008-7-4 16:51 | 显示全部楼层

sorry补充下..

cnt是定义的全局变量,初始值为0xaa
dragon_hn 发表于 2008-7-6 03:48 | 显示全部楼层

楼主还是把程序贴出来吧

zbo210 发表于 2008-7-6 11:31 | 显示全部楼层

楼主又说在c{}中定义变量int cnt

楼主又说在c{}中定义变量int cnt,又说cnt是定义的全局变量,呵呵.自己先说明白了,据我理解,你其实定义的是俩个变量,一个是局部变量,一个是全局变量,只是名字相同儿已.
你可以这样做,在c{}中定义变量static int cnt=0xaa;
去掉全局变量定义应该就是了

主要还是楼主的c没过关,呵呵
harlemjia 发表于 2008-7-6 13:03 | 显示全部楼层

volitale

davidtina 发表于 2008-7-22 18:01 | 显示全部楼层

全局变量和局部变量混用了

楼主把c{}中定的int cnt=0xaa; int 删掉就可以了.因为外部已经定义了cnt.
davidtina 发表于 2008-7-22 18:06 | 显示全部楼层

但是

在c{}中,如果没有别的地方改动cnt的话,你返回时还是0xaa, 所以, 如果楼主要想得到想要的值, 最好是把int cnt=0xaa; 这一句全部删掉.

而把int cnt=0xaa;  初始化放在外部去定义.
WOAILYMD 发表于 2008-7-24 10:28 | 显示全部楼层

7楼的回答直接解决问题,顶!

所有问题,如能认真考虑并最好亲自实验后再做回答,那21IC就更上一层楼了。读者也节省了时间,同时也避免误人子弟和混淆视听。还有,提问者最好能对回答者做出是否解决问题的答复,这样才算一个问题圆圆满满,使得读者能学到完整的一个知识点!拙见,请拍砖,哈哈!
db10 发表于 2008-7-25 16:05 | 显示全部楼层

你两次调用C是在一个线程里吗?

 调用是要保持互斥,还要保证顺序。
lionstone 发表于 2008-8-1 10:22 | 显示全部楼层

函数局部变量赋值了,当然是这个结果了

我同意4楼的说法;
我想你的函数c应该是类似这样的吧?
int c(参数)
{
    int cnt=0xaa;
    xxx
    xxx
    ...
    xxx
}

这样的话,是一个局部变量,每次都被附了初值0xaa;如果不赋初值,那么理论上每次得到的cnt值都是随机的,但实际上多数情况都是0;

如果要实现你说的,按4楼的方法,改成int cnt=0xaa就行;

不过我觉得这样写的函数将有局限性,多个线程操作(需要多个cnt)时会有问题(没有多个cnt变量的副本);
sodwell 发表于 2008-8-11 10:07 | 显示全部楼层

re

写linux还是不要用单片机的方法,最好还是加些同步 互斥.... 机制
不然多线程操作 出现让你莫名其妙的错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

69

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部