OpenEdv-开源电子网

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

mdk变量无法赋值!!!!想赋值给Symbol

[复制链接]

5

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2020-5-11
在线时间
42 小时
发表于 2020-8-12 20:55:41 | 显示全部楼层 |阅读模式
30金钱
本帖最后由 ruiii 于 2020-8-13 11:02 编辑

mdk无法赋值!!!!这是HC-05模块
  1. #include "set.h"
  2. #include "led.h"
  3. #include "delay.h"
  4. #include "ds18b20.h"
  5. #include "lcd.h"
  6. #include "beep.h"
  7. #include "Temperature.h"
  8. #include "usart2.h"
  9. #include "string.h"
  10. #include "led.h"
  11. #include "sys.h"
  12. #include "stdio.h"
  13.                           
  14. void Set(){

  15.         float Temper;
  16.         u16 t=0,symbol1=0,a,b,c,d;
  17.         u8 len=0;
  18.   u16 Symbol=0;

  19.   DS18B20_Init();
  20.   BEEP_Init();
  21.         LCD_Init();
  22.   if(USART2_RX_STA&0x8000)
  23.                 {        
  24.                   len=USART2_RX_STA&0X7FFF;//得到此次接收到的数据长度
  25.                         if(len>1) Symbol=6;
  26.       else {
  27.         if(USART2_RX_BUF[0]=='1')        
  28.                     {
  29.                                   //u2_printf("The command you sent is:\r\n 1 \r\n");
  30.           u2_printf("  So turn on the alarm system\r\n");
  31.                             Symbol=1;
  32.                           }
  33.                           if(USART2_RX_BUF[0]=='2')
  34.                           {
  35.                                   //u2_printf("The command you sent is:\r\n 2 \r\n");
  36.           u2_printf("  So close the alarm system\r\n");
  37.                             Symbol=2;
  38.                           }
  39.                           if(USART2_RX_BUF[0]=='3')
  40.                           {
  41.                                   //u2_printf("The command you sent is:\r\n 3 \r\n");
  42.           u2_printf("  So reset the alarm system\r\n");
  43.                             Symbol=0;
  44.                           }
  45.         if(USART2_RX_BUF[0]=='4')
  46.                           {
  47.                                 //u2_printf("The command you sent is:\r\n 4 \r\n");
  48.         u2_printf("  So check whether the alarm system is normal?\r\n");
  49.         if(DS18B20_Init()!=1)Symbol=4;
  50.         else Symbol=5;
  51.                           }
  52.                           if(USART2_RX_BUF[0]!='1'&&USART2_RX_BUF[0]!='2'&&USART2_RX_BUF[0]!='3'&&USART2_RX_BUF[0]!='4')
  53.                           {                        
  54.         Symbol=6;
  55.                           u2_printf("\r\n");
  56.                           }
  57.                              }
  58.                         USART2_RX_STA=0;
  59.                 }
  60.     else{
  61.                 switch(Symbol){
  62.         case 0:u2_printf("  Please set the system (1 to open, 2 to close, 3 to reset, and 4 to check the hardware system)\r\n");LCD_ShowString(20,130,200,24,24,"Set up the system");break;
  63.         case 1:u2_printf("  Please enter the alarm system start temperature(accurate to 0.1, the range is between -55 to 125)\r\n");LCD_ShowString(20,130,200,16,16,"Input warning temperature");break;
  64.         case 2:u2_printf("  The alarm system is turned off\r\n");LCD_ShowString(40,130,200,24,24,"System is down");break;
  65.         case 3:u2_printf("  The alarm system has been set up(if you need to change the temperature, please enter command 3 to reset)\r\n");LCD_ShowString(40,130,200,24,24,"System is set");break;
  66.         case 4:u2_printf("  After the system is tested, it can run normally\r\nPlease enter the alarm system start temperature(accurate to 0.1, the range is between -55 to 125)\r\n");Symbol=1;break;
  67.         case 5:u2_printf("  System hardware error, please turn off switch detection\r\n");LCD_ShowString(60,130,200,24,24,"Hardware Error!!!");LCD_ShowString(60,130,200,24,24,"Switch Off Check!");break;
  68.         case 6:u2_printf("  Command input error, please input command 3 to reset\r\n");LCD_Init();LCD_ShowString(60,130,200,24,24,"System reset");break;
  69.         }               
  70.                 delay_ms(500);
  71.                 if(Symbol==0)LED0=!LED0;
  72.                 else if(Symbol==1)LED0=!LED0;
  73.                 else if(Symbol==2)LED0=1;
  74.                 else if(Symbol==3)LED0=!LED0;
  75.                 else if(Symbol==4)LED0=!LED0;
  76.                 else if(Symbol==5)LED0=0;
  77.                 else if(Symbol==6)LED0=0;
  78.                 while(Symbol==1)
  79.    {
  80.       symbol1=0;
  81.       if(USART2_RX_STA&0x8000)
  82.         {   
  83.           len=USART2_RX_STA&0X7FFF;//得到此次接收到的数据长度
  84.           for(t=1;t<len-2;t++){
  85.             if(USART2_RX_BUF[t]<'0'||USART2_RX_BUF[t]>'9')
  86.               {
  87.                 symbol1=1;break;
  88.               }
  89.         }
  90.         if(USART2_RX_BUF[len-1]<'0'||USART2_RX_BUF[len-1]>'9')symbol1=1;
  91.         else if(len<=2)symbol1=1;
  92.         else if((USART2_RX_BUF[0]<'0'||USART2_RX_BUF[0]>'9')&&USART2_RX_BUF[0]!='-')symbol1=1;
  93.         else if(USART2_RX_BUF[len-2]!='.')symbol1=1;
  94.           u2_printf("\r\n");
  95.             if(symbol1==1)
  96.                                                 {
  97.                                                   u2_printf("\r\n  The temperature input is wrong, please re-enter\r\n");
  98.                                                         LCD_ShowString(40,130,200,16,16,"Re-enter temperature");
  99.                                                 }
  100.             if(symbol1==0)Symbol=3;
  101.           USART2_RX_STA=0;
  102.            if(symbol1==0&&len==5&&USART2_RX_BUF[len-2]=='.')
  103.                {
  104.                 if(USART2_RX_BUF[0]=='-')
  105.                   {
  106.                     b=USART2_RX_BUF[1]-'0';
  107.                     c=USART2_RX_BUF[2]-'0';
  108.                     d=USART2_RX_BUF[4]-'0';
  109.                     Temper=b*10+c*1+d*0.1;
  110.                     Temper=-Temper;
  111.                                                                                 Temperature();
  112.                   }
  113.                 else{
  114.                     a=USART2_RX_BUF[0]-'0';
  115.                     b=USART2_RX_BUF[1]-'0';
  116.                     c=USART2_RX_BUF[2]-'0';
  117.                     d=USART2_RX_BUF[4]-'0';
  118.                     Temper=a*100+b*10+c*1+d*0.1;
  119.                                                                                 Temperature();
  120.                   }
  121.                     if(Temper<-55.0||Temper>125.0)
  122.                     {
  123.                       u2_printf("\r\n  The temperature input range is wrong, please re-enter\r\n");
  124.                       Symbol=1;
  125.                       symbol1=1;
  126.                                                                                         LCD_ShowString(40,130,200,16,16,"Re-enter temperature");
  127.                     }
  128.                 }
  129.       else if(symbol1==0&&len==4&&USART2_RX_BUF[len-2]=='.')
  130.             {
  131.               if(USART2_RX_BUF[0]=='-')
  132.                 {
  133.                   b=USART2_RX_BUF[1]-'0';
  134.                   c=USART2_RX_BUF[3]-'0';
  135.                   Temper=b*1+c*0.1;
  136.                   Temper=-Temper;
  137.                                                                         Temperature();
  138.                 }
  139.               else{
  140.                   a=USART2_RX_BUF[0]-'0';
  141.                   b=USART2_RX_BUF[1]-'0';
  142.                   c=USART2_RX_BUF[3]-'0';
  143.                   Temper=a*10+b*1+c*0.1;
  144.                                                                         Temperature();
  145.                   }
  146.              }
  147.       else if(symbol1==0&&len==3&&USART2_RX_BUF[len-2]=='.')
  148.               {
  149.                 if(USART2_RX_BUF[0]=='-')
  150.                     {
  151.                       u2_printf("\r\n  The temperature input is wrong, please re-enter\r\n");
  152.                       Symbol=1;
  153.                       symbol1=1;
  154.                                                                                         LCD_ShowString(40,130,200,16,16,"Re-enter temperature");
  155.                     }
  156.                 else{
  157.                       a=USART2_RX_BUF[0]-'0';
  158.                       b=USART2_RX_BUF[2]-'0';
  159.                       Temper=a*1+b*0.1;
  160.                                                                                         Temperature();
  161.                     }
  162.               }
  163.                                                         if(DS18B20_Get_Temp()/10>=Temper&&Symbol!=1){
  164.                                                         while(1){
  165.                                                         u2_printf("  Warning temperature exceeded\r\n");
  166.                                                         POINT_COLOR=RED;//设置字体为红色                                                              
  167.                                                         LCD_ShowString(10,130,200,16,16,"Warning temperature exceeded");
  168.                                                         LED0=0;
  169.                                                         LED1=0;         
  170.                                                         BEEP=0;                  
  171.                                                         delay_ms(1000);//延时1000ms
  172.                                                         POINT_COLOR=RED;//设置字体为红色
  173.                                                         LCD_ShowString(10,130,200,16,16,"Warning temperature exceeded");
  174.                                                         LED0=1;
  175.                                                         LED1=1;         
  176.                                                         BEEP=1;  
  177.                                                         delay_ms(1000);//延时1000ms
  178.                                                         }
  179.                                                         }
  180.       }
  181.      }                        
  182.         }
  183. }
复制代码
无法赋值symbol!!!!
想问问大家怎么回事啊!!!! Screenshot_20200812_205333_mobi.dzs.android.Bluet.jpg

最佳答案

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

这样代码看到头疼,逻辑出错了。你先看看最大一个if (收到数据)赋值symbol1[/backcolor]。没收到数据,对symbol1[/backcolor]进行判断。不知道你set是怎么调用的。若是调用一次,将第一个else的处理放在 上面嵌套的else里面,即收到一个数据。如果是循环调用,用静态局部变量,即static u16 symbol1。[/backcolor]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1433
金钱
1433
注册时间
2020-5-12
在线时间
394 小时
发表于 2020-8-12 20:55:42 | 显示全部楼层
本帖最后由 叶子君 于 2020-8-13 10:40 编辑

这样代码看到头疼,逻辑出错了。你先看看最大一个if (收到数据)赋值symbol1。没收到数据,对symbol1进行判断。不知道你set是怎么调用的。若是调用一次,将第一个else的处理放在 上面嵌套的else里面,即收到一个数据。如果是循环调用,用静态局部变量,即static u16 symbol1。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-8-13 01:51:03 | 显示全部楼层
帮顶
回复

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2020-8-13 08:53:58 | 显示全部楼层
靠自己
回复

使用道具 举报

5

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2020-5-11
在线时间
42 小时
 楼主| 发表于 2020-8-13 09:52:40 | 显示全部楼层
帮帮忙啊!!!大家
回复

使用道具 举报

5

主题

152

帖子

0

精华

高级会员

Rank: 4

积分
777
金钱
777
注册时间
2016-7-15
在线时间
119 小时
发表于 2020-8-13 10:56:29 | 显示全部楼层
格式太乱了,头疼
好好学习,天天向上。
回复

使用道具 举报

5

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2020-5-11
在线时间
42 小时
 楼主| 发表于 2020-8-13 10:59:56 | 显示全部楼层
叶子君 发表于 2020-8-13 10:32
这样代码看到头疼,逻辑出错了。你先看看最大一个if (收到数据)赋值symbol1。没收到数据,对 ...

谢谢大佬,加了static就可以了,能问一下原理吗??
回复

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1433
金钱
1433
注册时间
2020-5-12
在线时间
394 小时
发表于 2020-8-13 14:14:00 | 显示全部楼层
本帖最后由 叶子君 于 2020-8-13 14:15 编辑
ruiii 发表于 2020-8-13 10:59
谢谢大佬,加了static就可以了,能问一下原理吗??

局部变量,生存周期只存在与函数执行期间,也就说你函数进来它就创建了,函数出去它就释放掉了。很明显你现在的Symbol 量第一次进来是进来赋值的,第二次进来是进行判断的。所以不能释放掉。在局部变量前面加个static 变成静态局部变量,函数出去它就不会释放掉。因为它已经不存在在栈里面,放在堆里面了。建议百度搜索下static的三个作用。这只是其中一个用法。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 21:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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