【问题标题】:how to rectify the error "exit status 1 exponent has no digits" in arduino programming?如何纠正arduino编程中的错误“退出状态1指数没有数字”?
【发布时间】:2016-02-21 15:57:35
【问题描述】:

我需要帮助来调试我刚刚键入的 arduino 程序。显示的错误是: - 1.exit status 1 指数没有数字(在 "char INT_ENABLE = 0*2E" 行找到)。 该程序的目的是在通过 adxl345 检测到不活动时触发蜂鸣器并关闭继电器开关,当检测到活动时执行相反的操作。 我在下面提供我的程序代码。检查并帮助我纠正这个问题以及您在我的程序中可能发现的任何其他问题。

#include <SPI.h>
int cs = 10;
int intr = 2;
int buzzer = 4;
int relay = 5;
int su = 1;
int intr1
pinmode (buzzer,OUTPUT);
pinmode (relay,OUTPUT);
char POWER_CLT = 0*2D
char DATA_FORMAT = 0*31
char DATAX0 = 0*32
char DATAX1 = 0*33
char DATAY0 = 0*34
char DATAY1 = 0*35
char DATAZ0 = 0*36
char DATAZ1 = 0*37
char THRESH_ACT = 0*24
char THRESH_INACT = 0*38
char TIME_INACT = 0*26
char INT_ENABLE = 0*2E
char INT_MAP = 0*2F
char ACT_INACT_CTL = 0*27
char INT_SOURCE = 0*30

char values[10];
char output[20];
int x, y, z;
char inactivityevent = 0;
void setup()
{
  SPI.begin();
  SPI.setDataMode(SPI_MODE3);
  Serial.begin(9600);
  pinMode(cs,OUTPUT);
  digitalWrite(cs, HIGH);
  attachInterrupt(digitalpintointerrupt(intr),interruptHandler,RISING); 
  writeRegister(DATA_FORMAT,0*01);
  writeRegister(POWER_CTL,0*08);
  writeRegister(INT_MAP,0*F7 && 0*EF);
  writeRegister(THRESH_INACT,1);
  writeRegister(TIME_INACT,0);
  writeRegister(ACT_INACT_CTL,0*0F);
  writeRegister(INT_ENABLE,0*08);
  readRegister(INT_SOURCE,1,VALUES);
} 

void interrupHandler()
{
  read register (INT_SOURCE,1,values);
}

void loop() 
{
 intr1=digitalread(intr);  
 if ( intr1==high)
  { 
   read register(DATAX0,6,values);
   x = ((int)values[1]<<8|(int)values[0]);
   y = ((int)values[3]<<8|(int)values[2]);
   z = ((int)values[5]<<8|(int)values[4]);
   if ( x<=15 && x>=-15 && y<=10 && y>=-10 && z>=75 && z<=90)
    {
     digitalwrite(buzzer,HIGH);
     digitalwrite(relay,LOW);
    }
   else
    {
     for (int i=0;i<=90;i++)
      {
       delay (2000);
       if (intr == LOW)
        { break(); }
       if (i==90)
        digitalwrite(relay,LOW);       
      }
    }
  while (su=1)
   {  
    if (intr==LOW)
     {
      digitalwrite(buzzer,LOW);
      digitalwrite(relay,HIGH);
      break(); 
     }
   }       
 }
}

【问题讨论】:

  • 十六进制常量的语法不正确 - 它应该是 0x,而不是 0*(X 不是乘号!)。你还有很多其他的语法错误。 C(和大多数其他编程语言)对语法非常挑剔,你不能偏离语言规范(不像英语)。
  • 感谢一百万的更正。我自己研究了这个,显然我弄错了。我使用在这个站点上找到的一个程序作为基础程序,并尝试从那里构建一个。下面提供了链接。如果您能帮我纠正大部分语法错误,那将非常有帮助。 stackoverflow.com/questions/22701400/…
  • 您在那里输入了代码,但有很多错误。我建议再次输入,但要非常精确地输入大小写、符号和“标点”字符。
  • 谢谢你的关心。我会记住这一点的。

标签: arduino accelerometer


【解决方案1】:

对于程序中的所有0*nn 值,将它们替换为0xnn。确保每行都以分号结尾(例如,第 7、10-24 行)。在第 40 行,检查包含 &amp;&amp; 的表达式,因为这是一个“逻辑”运算符,并且您看起来想要一个“按位”运算符,因此将 &amp;&amp; 更改为 &amp;。在第 45 行,我认为您需要将 VALUES 小写,因为您尝试填写的变量的名称是小写的。
有几个地方你说read register,但我认为你需要使用readRegister。 检查第 78 行,其中的 while 循环检查 su 的值。我认为你应该在这里有while (su == 1) 而不是只有一个=。单个= 正在设置值,但我认为您想检查该值,因此您需要==。我确实注意到程序中没有任何内容可以将 su1 更改,因此它将永远持续下去,直到 intr 发生。

【讨论】:

  • 关于逻辑运算符“&&”,正如我在之前的评论中所说,我从这个站点获取了一个程序作为基础程序来开发我的,他们已经使用了这个。我相信这个想法是将数据发送到两个地址。感谢您的大力帮助。我提供了我之前谈到的基本程序的链接。也许你能比我理解更多,并帮助我更好地理解程序的那一部分。 stackoverflow.com/questions/22701400/…
  • 我查看了该程序,它与您引用的格式相同。但是我认为那个人没有正确,因为0xF7 &amp;&amp; 0xEF 与说1 是一样的。但是,我认为我上面建议的更正也行不通。我不太了解具体的设备,但您可能会得到一些关于 INT_MAP here 的好信息。
  • 感谢您的参考和帮助。我能够纠正程序中的所有错误。目前我正在等待我的组件测试我的程序。
【解决方案2】:

我发现了这个问题,因为它是错误消息的最高 Google 结果,所以万一有人在这里结束,这就是实际发生的情况。这行是问题所在:

char INT_ENABLE = 0*2E

应该是这样的

char INT_ENABLE = 0x2E;

其中0x 表示2E 是一个十六进制数。然而,编译器将原始代码读取为zero times 2E,并将2E 解释为尝试写入缺少指数的浮点数。

对于没有见过这个的人,你可以写一个像 200 万这样的数字为2e6,这意味着2 followed by 6 zeros2 times 10 to the power of 6。第一个数字称为尾数,第二个是指数。因此出现错误消息exponent has no digits

就我而言,问题在于数字 1 看起来与小写 L 相同,而我的侄子将变量输入/误读为 1ed 而不是 led

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2020-01-16
    • 2017-05-07
    • 1970-01-01
    • 2013-07-17
    • 2021-10-05
    相关资源
    最近更新 更多