OpenEdv-开源电子网

 找回密码
 立即注册
查看: 3401|回复: 7

lv_style_t 前面为什么要加static呢

[复制链接]

14

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2016-5-19
在线时间
86 小时
发表于 2020-6-14 16:15:46 | 显示全部楼层 |阅读模式
5金钱
lv_style_t 前面为什么要加static的作用是什么,
不加static设置的变量就没作用,这是为什么呢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2016-5-19
在线时间
86 小时
 楼主| 发表于 2020-6-14 16:37:13 | 显示全部楼层
应该跟函数void lv_obj_set_style(lv_obj_t * obj, const lv_style_t * style)有关,调用此函数时第二个参数是const类型的,加static变量就存在了常量区,应该是这样
回复

使用道具 举报

7

主题

61

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
2130
金钱
2130
注册时间
2018-8-13
在线时间
263 小时
发表于 2020-6-15 08:18:15 | 显示全部楼层
在函数内部定义的变量前加static,表示为局部静态变量,好处就是即使函数返回了,此静态变量不会被释放,跟全局变量的作用差不多,但是作用域不同,如果你lv_style_t样式前不加static,函数一返回,此lv_style_t资源将会在栈上被释放
回复

使用道具 举报

7

主题

61

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
2130
金钱
2130
注册时间
2018-8-13
在线时间
263 小时
发表于 2020-6-15 08:18:42 | 显示全部楼层
在函数内部定义的变量前加static,表示为局部静态变量,好处就是即使函数返回了,此静态变量不会被释放,跟全局变量的作用差不多,但是作用域不同,如果你lv_style_t样式前不加static,函数一返回,此lv_style_t资源将会在栈上被释放
鱼哥与你分享技术干货
回复

使用道具 举报

0

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2017-11-9
在线时间
9 小时
发表于 2020-6-22 11:34:25 | 显示全部楼层
在lvgl里面lv_style_t是一个比较大的结构体,它可以设置各种控件的样式,占用内存比较多:




所以在obj里面,只是引用style,而不在obj里面分配内存存储obj



所以style的内存需要额外分配,典型的方式就是定义全局变量,静态变量,动态内存申请等等。


回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2016-3-29
在线时间
5 小时
发表于 2020-6-23 11:13:44 | 显示全部楼层
这个看作用域吧
如果当前定义位置在函数内部,而style作用的控件在函数结束已释放,就不需要修饰,因为调用者不存在,style也不会被调用,就不存在异常访问
其他情况,要么是全局,要么是加static
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2020-8-9
在线时间
0 小时
发表于 2020-8-9 17:26:52 | 显示全部楼层
这个与littleVGL的运作机制有关,因为littleVGL只使用一个写区域函数来操作液晶屏,littleVGL程序并不是执行一条画图程序就马上去写液晶屏,它根据缓存大小来决定怎么样写液晶屏,可能会有多次写,不用static修饰的话,下次写这样式的数据就不见了,导致出问题
回复

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-7-3
在线时间
7 小时
发表于 2020-9-25 10:09:40 | 显示全部楼层
加了就是静态局部变量分配在堆中常驻不会释放,是一个指针,不加的话每次调用完就释放了 你哪里去找得到这个地址呢?
回复

使用道具 举报

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

本版积分规则

关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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