OpenEdv-开源电子网

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

求助,此项目如何减少变量个数

[复制链接]

54

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1044
金钱
1044
注册时间
2022-4-20
在线时间
373 小时
发表于 2022-6-29 16:18:51 | 显示全部楼层 |阅读模式
5金钱
我现在有十多个灯需要控制,目前我为每个灯都安排了一个变量来控制。在主程序中,会点亮某个灯,并把对应的变量赋值,定时中断每1ms进入一次,将灯的所有非0变量减一。变量归零后,灯熄灭。现在想请问一下如何将变量个数减少而不影响控制,有什么办法吗?

最佳答案

查看完整内容[请看2#楼]

没必要缩小这点ram的使用,又不是51单片机。
又菜又爱指点
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

452

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4295
金钱
4295
注册时间
2018-5-14
在线时间
930 小时
发表于 2022-6-29 16:18:52 | 显示全部楼层
驭剑的秘密 发表于 2022-6-29 18:01
我点灯已经做好了,所以不在于用什么位控制亮灯之类的,我的灯亮的时间是用变量控制的,变量每1ms在中断 ...

没必要缩小这点ram的使用,又不是51单片机。
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8464
金钱
8464
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-6-29 16:27:44 | 显示全部楼层
具体是几个灯?需要怎样的控制?
如果只需点亮其中一个灯,那么一个字节就可以了,char n,n为几就是几号灯亮。
如果每个灯独立控制,可以每个灯用一位表示,如16个灯就用16位数据表示,第几位为1就代表第几个灯亮。
专治疑难杂症
回复

使用道具 举报

54

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1044
金钱
1044
注册时间
2022-4-20
在线时间
373 小时
 楼主| 发表于 2022-6-29 16:39:03 | 显示全部楼层
LcwSwust 发表于 2022-6-29 16:27
具体是几个灯?需要怎样的控制?
如果只需点亮其中一个灯,那么一个字节就可以了,char n,n为几就是几号灯 ...

我题干应该描述得还算清楚吧,现在我要做的是缩减变量个数
又菜又爱指点
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8464
金钱
8464
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-6-29 17:01:09 | 显示全部楼层
驭剑的秘密 发表于 2022-6-29 16:39
我题干应该描述得还算清楚吧,现在我要做的是缩减变量个数

程序工程传上来
专治疑难杂症
回复

使用道具 举报

54

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1044
金钱
1044
注册时间
2022-4-20
在线时间
373 小时
 楼主| 发表于 2022-6-29 18:01:46 | 显示全部楼层

我点灯已经做好了,所以不在于用什么位控制亮灯之类的,我的灯亮的时间是用变量控制的,变量每1ms在中断里面减少一,减到0的时候,主程序会把灯熄灭,我有十几二十个灯,那么就用了十几二十个变量,我觉得这么多变量只用在一个小功能上有点浪费,占用了空间,现在想的是缩减变量个数,而且不会因为一个灯重新设定了亮的时间而导致另一个灯无法熄灭,现在想想应该是没有办法的,只能一个变量控制一个时间
又菜又爱指点
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
发表于 2022-6-29 20:18:11 | 显示全部楼层
驭剑的秘密 发表于 2022-6-29 18:01
我点灯已经做好了,所以不在于用什么位控制亮灯之类的,我的灯亮的时间是用变量控制的,变量每1ms在中断 ...

一个变量才多大……不至于紧张到这点儿空间都要节省吧
回复

使用道具 举报

3

主题

117

帖子

0

精华

高级会员

Rank: 4

积分
559
金钱
559
注册时间
2018-10-3
在线时间
107 小时
发表于 2022-6-30 08:34:09 | 显示全部楼层
10多个灯10个多个变量?。 完全可以用1个uint16_t来表示16个灯的状态。1个位表示1个灯。
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8464
金钱
8464
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-6-30 09:08:55 | 显示全部楼层
本帖最后由 LcwSwust 于 2022-6-30 09:42 编辑
驭剑的秘密 发表于 2022-6-29 18:01
我点灯已经做好了,所以不在于用什么位控制亮灯之类的,我的灯亮的时间是用变量控制的,变量每1ms在中断 ...

没程序的话我也不好说什么。
可以考虑减少变量位数,比如原来一个灯占用8位变量,现在将其改为4位变量。
还有就是,有一种思路叫“以时间换空间”。
专治疑难杂症
回复

使用道具 举报

8

主题

206

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-4-6
在线时间
234 小时
发表于 2022-6-30 09:54:12 | 显示全部楼层
我可能理解楼主的意思了,
int temp1,temp2,....temp12;

//定时器1ms中断
void irq_1ms(void)
{
     temp1--;
     temp2--;
     ....     temp12--;
}

//主程序
void main(void)
{
    while(1)
   {
       if(temp1==0)
      {
           LED1 = !LED;
           temp1 = 点亮时间(MS)
      }
      if(temp2==0)
      {
           LED2 = !LED2;
           temp2 = 点亮时间(MS)
      }
       ....
      if(temp12==0)
      {
           LED12 = !LED12;
           temp12 = 点亮时间(MS)
      }
   }
}


如果你想用一个变量控制时间的话,可以定义一个uint32_t 为类型。
然后通过取余数来确定不同的时间。。。
类似:
if(temp % 499)  
else if (temp % 599)
else if(temp % 699)
这种方式。。。


回复

使用道具 举报

3

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2021-12-22
在线时间
34 小时
发表于 2022-6-30 10:07:21 | 显示全部楼层
xiedonghui258 发表于 2022-6-30 09:54
我可能理解楼主的意思了,
int temp1,temp2,....temp12;

Good !!
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12991
金钱
12991
注册时间
2012-11-26
在线时间
3789 小时
发表于 2022-6-30 13:10:58 | 显示全部楼层
xiedonghui258 发表于 2022-6-30 09:54
我可能理解楼主的意思了,
int temp1,temp2,....temp12;

他又不一定同时开启   
学无止境
回复

使用道具 举报

2

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
679
金钱
679
注册时间
2020-11-21
在线时间
67 小时
发表于 2022-6-30 14:35:34 | 显示全部楼层
用数组实现
回复

使用道具 举报

8

主题

206

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-4-6
在线时间
234 小时
发表于 2022-6-30 15:11:44 | 显示全部楼层
jermy_z 发表于 2022-6-30 13:10
他又不一定同时开启

所以看他怎么用。。
回复

使用道具 举报

15

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
649
金钱
649
注册时间
2016-5-20
在线时间
171 小时
发表于 2022-6-30 17:05:15 | 显示全部楼层
要实现的功能是不是和电梯里的按键灯延时功能差不多吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 19:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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