OpenEdv-开源电子网

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

请问原子哥,下面的switch语句会执行吗?怎么我仿真没数据?

[复制链接]

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-10-25
在线时间
3 小时
发表于 2015-12-16 10:06:50 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "key.h" #include "delay.h" #include "lcd.h" vu8 KEY_Num; //?¨??°??ü??????±??? vu8 FriNum; extern unsigned char KEY_Num; //???÷???????????¨??°??ü??????±??? KeyScanState_Typedef KeyScanState = KeyScanState_0; //?¨??°??ü?¨?è×???????±? //·?????IO????????IO??×é????°??ü??°??ü?????? /****************************************************************************** * ?????? : KeyScan * ?????è?? : °??ü?¨?è???ò * ???????? : ?? * ?????á?? : ?? * ·????? : °??ü?ü?? ******************************************************************************/ void KeyScan(void) { // KeyPortStatus = GPIO_ReadInputData(KeyPort) & KeyPortPin;//????°??ü????×??? switch(KeyScanState) //????×????ú?÷?? { case KeyScanState_0: //×???1????????·?°??ü°??? { if(KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0|| KEY5==0|| KEY6==0 || KEY7==0|| KEY8==0|| KEY9==0|| KEY0==0|| KEYPoint==0|| KEYStart==0) KeyScanState = KeyScanState_1;//??°??ü°??????ü??×???±ê?? break; } case KeyScanState_1: //×???2????????·????? { if(KEY0==0 ||KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0|| KEY5==0 || KEY6==0|| KEY7==0|| KEY8==0|| KEY9==0 || KEYPoint==0|| KEYStart==0 ) //·????????·??°??ü°??????????à????×÷ { if(KEY0==0) KEY_Num=0; if(KEY1==0) KEY_Num=1; if(KEY2==0) KEY_Num=2; if(KEY3==0) KEY_Num=3; if(KEY4==0) KEY_Num=4; if(KEY5==0) KEY_Num=5; if(KEY6==0) KEY_Num=6; if(KEY7==0) KEY_Num=7; if(KEY8==0) KEY_Num=8; if(KEY9==0) KEY_Num=9; if(KEYPoint==0)KEY_Num=10; if(KEYStart==0) KEY_Num=11; KeyScanState = KeyScanState_2;//?ü??×???±ê?? } else //???????·??°??ü??°??????ü??×???±ê?? KeyScanState = KeyScanState_0; break; } case KeyScanState_2: //×???3???????ì?? { if(KEY1==1 && KEY2==1 && KEY3==1 && KEY4==1&& KEY5==1&& KEY6==1 && KEY7==1 && KEY8==1 && KEY9==1 && KEY0==1 && KEYPoint==1&& KEYStart==1) { KeyScanState = KeyScanState_0; } break; } } } void keycontrol(void) { // if(time_20ms_ok) //{ // time_20ms_ok = 0; KeyScan(); //按键扫描 switch(KEY_Num) { case 0: FriNum=0;break; case 1: FriNum=1;break; case 2: FriNum=2;break; case 3: FriNum=3;break; case 4: FriNum=4;break; case 5: FriNum=5;break; case 6: FriNum=6;break; case 7: FriNum=7;break; case 8: FriNum=8;break; case 9: FriNum=9;break; case 10: FriNum=10;break; // case 11: FriNum=11;break; // case 12: FriNum=12;break; } //} }[/mw_shl_code]

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

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2015-12-16 10:25:26 | 显示全部楼层
KeyScanState是不是被编译器优化掉了?加个volatile看看。
业余程序玩家。
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-10-25
在线时间
3 小时
 楼主| 发表于 2015-12-16 11:56:13 | 显示全部楼层
回复【2楼】ofourme:
---------------------------------
在哪里加?
回复

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2015-12-16 12:07:23 | 显示全部楼层
回复【3楼】283804313:
---------------------------------
这个是基本的知识啊,百度一下或者看一下教科书就知道的。在定义变量的时候,在类型名前家加volatile。
业余程序玩家。
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-10-25
在线时间
3 小时
 楼主| 发表于 2015-12-16 12:12:47 | 显示全部楼层
回复【4楼】ofourme:
---------------------------------
加了还是不行
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12573
金钱
12573
注册时间
2015-11-5
在线时间
2151 小时
发表于 2015-12-16 12:16:36 | 显示全部楼层
把优化等级设为0,重新把工程编译一遍试试看
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-10-25
在线时间
3 小时
 楼主| 发表于 2015-12-16 12:36:30 | 显示全部楼层
回复【6楼】FreeRTOS:
---------------------------------
已经是0了,不行,是不是仿真不出来的?
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12573
金钱
12573
注册时间
2015-11-5
在线时间
2151 小时
发表于 2015-12-16 14:50:40 | 显示全部楼层
回复【7楼】283804313:
---------------------------------
我没太看得明白你的问题,你所说的没数据,是指在switch语句里加不了断点,还是说switch里面的变量查看不了数值?
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-10-25
在线时间
3 小时
 楼主| 发表于 2015-12-16 15:26:28 | 显示全部楼层
回复【8楼】FreeRTOS:
---------------------------------
就是我按下key0,那么frinum会对应的变为0吗?
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12573
金钱
12573
注册时间
2015-11-5
在线时间
2151 小时
发表于 2015-12-16 18:48:19 | 显示全部楼层
回复【9楼】283804313:
---------------------------------

你在 if(KEY0==0) KEY_Num=0; 这句加个断点,如果你按键没问题的话,按下KEY0后肯定会进入这句的使KEY_Num=0,不要按全速运行,你接下来再在switch(KEY_Num)设个断点,单步跟踪从KEY_Num=0到switch(KEY_Num)整个过程,直到跟踪有没有进入switch(KEY_Num)里面的case 0:  FriNum=0;break;

另外提个建议,你这代码写得不合理啊,按键扫描函数估计你是想模仿状态机的方式,但又没有延时消抖,建议你参考下这个帖子:
http://www.openedv.com/posts/list/26386.htm
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 09:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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