What is core.a (main.cpp.o) error in Arduino?

纵饮孤独 提交于 2019-12-08 14:10:57

问题


I was compling my code in Arduino and suddenly I got this error:

 core.a(main.cpp.o): In function `main':
 D:\Personal\Arduino\arduino-1.0.4-windows\arduino-  1.0.4\hardware\arduino\cores\arduino/main.cpp:11: undefined reference to `setup'
 D:\Personal\Arduino\arduino-1.0.4-windows\arduino-1.0.4\hardware\arduino\cores\arduino/main.cpp:14: undefined reference to `loop'

I have no idea what that means. Here's my code:

#ifndef dht_h
#define dht_h

#if ARDUINO < 100
    #include <WProgram.h>
#else
    #include <Arduino.h>
#endif

#define DHT_LIB_VERSION "0.1.05"

#define DHTLIB_OK                0
#define DHTLIB_ERROR_CHECKSUM   -1
#define DHTLIB_ERROR_TIMEOUT    -2
#define DHTLIB_INVALID_VALUE  -999
#include <dht.h>

#define TIMEOUT 10000

class dht
{
    public:
        int read22(uint8_t pin);
            double humidity;
            double temperature;

    private:
        uint8_t bits[5];  // Buffer to receive data
        int read(uint8_t pin);
};
#endif


// return values:
// DHTLIB_OK
// DHTLIB_ERROR_CHECKSUM
// DHTLIB_ERROR_TIMEOUT
int dht::read22(uint8_t pin)
{
    // READ VALUES
    int rv = read(pin);
    if (rv != DHTLIB_OK)
    {
        humidity    = DHTLIB_INVALID_VALUE;  // Invalid value, or is NaN prefered?
        temperature = DHTLIB_INVALID_VALUE;  // Invalid value
        return rv;
    }

    // CONVERT AND STORE
    humidity    = word(bits[0], bits[1]) * 0.1;

    if (bits[2] & 0x80) // negative temperature
    {
        temperature = word(bits[2]&0x7F, bits[3]) * 0.1;
        temperature *= -1.0;
    }
    else
    {
        temperature = word(bits[2], bits[3]) * 0.1;
    }

    // TEST CHECKSUM
    uint8_t sum = bits[0] + bits[1] + bits[2] + bits[3];
    if (bits[4] != sum) return DHTLIB_ERROR_CHECKSUM;

    return DHTLIB_OK;
}

//Private
// return values:
// DHTLIB_OK
// DHTLIB_ERROR_TIMEOUT
int dht::read(uint8_t pin)
{
    // INIT BUFFERVAR TO RECEIVE DATA
    uint8_t cnt = 7;
    uint8_t idx = 0;

    // EMPTY BUFFER
    for (int i=0; i< 5; i++) bits[i] = 0;

    // REQUEST SAMPLE
    pinMode(pin, OUTPUT);
    digitalWrite(pin, LOW);
    delay(20);
    digitalWrite(pin, HIGH);
    delayMicroseconds(40);
    pinMode(pin, INPUT);

    // GET ACKNOWLEDGE or TIMEOUT
    unsigned int loopCnt = TIMEOUT;
    while(digitalRead(pin) == LOW)
            if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

    loopCnt = TIMEOUT;
    while(digitalRead(pin) == HIGH)
            if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

    // READ THE OUTPUT - 40 BITS => 5 BYTES
    for (int i=0; i<40; i++)
    {
        loopCnt = TIMEOUT;
        while(digitalRead(pin) == LOW)
            if (loopCnt-- == 0)
                return DHTLIB_ERROR_TIMEOUT;

        unsigned long t = micros();

        loopCnt = TIMEOUT;
        while(digitalRead(pin) == HIGH)
            if (loopCnt-- == 0)
                return DHTLIB_ERROR_TIMEOUT;

        if ((micros() - t) > 40)
            bits[idx] |= (1 << cnt);
        if (cnt == 0) // Next byte?
        {
            cnt = 7;
            idx++;
        }
        else
            cnt--;
    }
    return DHTLIB_OK;
}

What do I need to do to fix this code?


回答1:


Every Arduino Programm needs the functions setup() and loop(), you have neither of them.

You should probably check this out.

You should add them to your main file(usually the first you created in the IDE).



来源:https://stackoverflow.com/questions/17488039/what-is-core-a-main-cpp-o-error-in-arduino

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!