OpenEdv-开源电子网

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

当switch情况非常多的时候应该如何解决?

[复制链接]

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
发表于 2020-10-4 10:46:50 | 显示全部楼层 |阅读模式
1金钱
目前我们手头有一个七个检测点的红外。考虑其亮灭情况将有7的阶乘,即5040种case,用switch-case显然是不现实的。后面我们根据具体场地考虑,灯亮的时候必然是相邻的应有1+7+6+5+4+3+2+1=29种情况(都不亮,1-7个灯亮)。想请教C语言针对case非常多的情况有哪些优化方案?

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

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2020-10-3
在线时间
8 小时
发表于 2020-10-4 12:34:04 | 显示全部楼层
29种不多啦! 老老实实同switch,这个结构不错
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-10-4 14:09:57 | 显示全部楼层
本帖最后由 ufbycd 于 2020-10-4 14:11 编辑

没有描述得太清楚。用二进制位来对应每一个灯,一个字节即可,位值为1和0分别对应灯的亮灭状态。
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2020-10-4 15:01:03 | 显示全部楼层
用“表驱动”方法。用一个数组存放信息,一种情况对应一个处理回调函数,即是做成一个表;通过一个循环比对或者二分法查表方式,找到对应的处理命令,然后执行回调函数
  1. array[] =
  2. {
  3. {0x01, fun1}
  4. {0x02, fun2}
  5. {0x03, fun3}
  6. ...
  7. }
复制代码
回复

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
 楼主| 发表于 2020-10-5 08:35:10 | 显示全部楼层
ufbycd 发表于 2020-10-4 14:09
没有描述得太清楚。用二进制位来对应每一个灯,一个字节即可,位值为1和0分别对应灯的亮灭状态。

就是您说的这个原理。问题就是有七个灯,然后如果用01表示case就会特别多。因此考虑对应的优化方案
回复

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
 楼主| 发表于 2020-10-5 08:37:39 | 显示全部楼层
Acuity 发表于 2020-10-4 15:01
用“表驱动”方法。用一个数组存放信息,一种情况对应一个处理回调函数,即是做成一个表;通过一个循环比对 ...

感谢     
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-17 04:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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