[STM32F1] 为什么要通过临时变量间接赋值?有何用意?

[复制链接]
 楼主| maxwellfairy 发表于 2020-5-8 18:47 | 显示全部楼层 |阅读模式
本帖最后由 maxwellfairy 于 2020-5-9 09:22 编辑

有一个全局变量:float general_f;
在一个函数中要把general_f的值赋给另一个全局变量:float general_other;
void give_value(void)
{
    float temp;
    temp = general_f;
    general_other = temp;
}
为什么要通过临时变量间接赋值?有何用意?
直接general_other = general_f;不好吗?
求各位大神解惑。。。。。。。。。。。

再补充一点:程序是别人写的,他很多函数里面都是这样处理的;
函数一进来就先把全局变量的值赋给临时变量,后面所有
赋值语句中,都用temp来赋值,不再使用全局变量,感觉像是在
保护这个全局变量一样,害怕后面再使用会改变其值。

PS:程序烧写到STM32F103芯片



lihuasoft 发表于 2020-5-8 21:57 来自手机 | 显示全部楼层
或许这句代码本来还有其他运算,后来改成了简单的赋值,懒得把局部变量temp去掉
 楼主| maxwellfairy 发表于 2020-5-9 09:10 | 显示全部楼层
lihuasoft 发表于 2020-5-8 21:57
或许这句代码本来还有其他运算,后来改成了简单的赋值,懒得把局部变量temp去掉 ...

程序是别人写的,他很多函数里面都是这样处理的,
所以排除懒得去掉temp这种情况。
john_lee 发表于 2020-5-9 09:18 | 显示全部楼层
maxwellfairy 发表于 2020-5-9 09:10
程序是别人写的,他很多函数里面都是这样处理的,
所以排除懒得去掉temp这种情况。
...

很多吗?那猜一下,嗯......你们公司的绩效是按代码行数来算的吗?
 楼主| maxwellfairy 发表于 2020-5-9 09:20 | 显示全部楼层
john_lee 发表于 2020-5-9 09:18
很多吗?那猜一下,嗯......你们公司的绩效是按代码行数来算的吗? ...

这倒不是,绩效按老板心情来的。。。。。。
zchong 发表于 2020-5-9 11:07 | 显示全部楼层
有时候是有必要的,比如某个全局变量在这个函数中多次用到(这个变量不一定要最新的值,但在该函数内要求每次使用的时候值不能改变),但是这个全局变量有可能在这个函数执行过程中被改变(比如发生某个中断,中断函数中会改变这个全局变量),于是在进入函数的时候就复制一份该全局变量的副本。

评论

对,应该是出于这种考虑, 所以他为了防止在执行函数过程中全局变量值改变, 索性所有函数中都用全局变量的副本,懒得去判断这个 全局变量是否会被改变。  发表于 2020-5-9 15:07
八层楼 发表于 2020-6-6 16:22 | 显示全部楼层
有可能有其他需求
观海 发表于 2020-6-6 16:23 | 显示全部楼层
只看这一小段可看不出来
观海 发表于 2020-6-6 16:23 | 显示全部楼层
只看这一小段可看不出来
guanjiaer 发表于 2020-6-6 16:24 | 显示全部楼层
是不是还有后续运算
heimaojingzhang 发表于 2020-6-6 16:24 | 显示全部楼层
这么看看不好  可以有很多的用意
keaibukelian 发表于 2020-6-6 16:24 | 显示全部楼层
全文档查找一下 看看有别的地方用吗
ipman 发表于 2020-6-6 18:08 | 显示全部楼层
不明白你的情况,在PC上,出于安全考虑,如果关键的验证代码,为了防止反编译,是有这个可能,可以增加反汇编难度。
kingkits 发表于 2020-6-7 10:35 | 显示全部楼层
有时候在排查缺陷时,必须要确认这个变量的赋值情况,程序里如果仅仅使用直接赋值(直接general_other = general_f;),那么可能会有很多的位置,如果改用这个函数,那么只需要在函数里设置断点就可以监视所有的赋值操作了,至于使用temp变量,可能是防止编译系统的优化处理。也可能有其他的需求,比如对需要按比例改变赋值内容(*1.x)之类的操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

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