CC3000 Wi-Fi: включить отладку

Как включить отладку с помощью Adafruit CC3000?

Я использую Adafruit_CC3000_Library. Я следовал наброску примера WebClient.ino. Я могу сделать от 300 до 400 HTTP-запросов, но в итоге соединение зависнет.

Я просмотрел исходный код CC3000 и utilities и обнаружил, что Adafruit_CC3000_Library имеет ссылку &Printer в локальной переменной с именем CC3KPrinter. Я не могу понять, как включить или активировать CC3KPrinter, так как он находится в блоке кода, зависящем от CHECK_PRINTER. Я подумал, что #define-определение некоторых переменных в моем скетче поможет:

// Ни один из этих флагов не включает отладку в коде CC3000.
#define _CC3000_DEBUG  1
#define DEBUG_MODE     1
#define ENABLE_CC3K_PRINTER 1

Пример фрагмента кода в библиотеке CC3000, который я пытаюсь включить, находится в строке 916. :

  CHECK_PRINTER {
    CC3KPrinter->println(F("Timed out waiting to connect"));
  }

, 👍3

Обсуждение

Вы проверили, что плата действительно подключается к вашему Wi-Fi с помощью более простого кода? Включили ли вы какую-либо отладку оператора печати в свой код, чтобы увидеть, где он зависает? Вы имеете в виду этот раздел «Принтер», но я чувствую, что это, вероятно, отвлекающий маневр, не зная больше о том, почему вы выбрали его. Другие варианты выглядят как отладка, но если они не дают результатов, я просто просматриваю библиотеку и добавляю операторы печати, чтобы увидеть, куда вы попадете. Они могут ничего не возвращать, если по какой-то причине это не заходит так далеко. Убедитесь, что ваши изменения верны., @bladepanthera

@bladepanthera: я отредактировал вопрос, чтобы показать, что соединение работает в течение 300-400 циклов; обычно около 40 минут. Я подтвердил через заявления печати, что зависание происходит в коде CC3000. Этот вопрос относится исключительно к включению блоков кода отладки CC3000., @JJ Zabkar

Из того, что я видел, CC3KPrinter будет печатать в последовательный порт, когда включена отладка, а это то, что вам нужно. Я не уверен, почему это не так, когда вы, кажется, включили его. Я могу думать только об очевидных вещах, таких как убедиться, что #include "utility/debug.h' не закомментирован, и используете ли вы библиотеку, которую, по вашему мнению, используете (у меня на ноутбуке две версии Arduino). Если все еще не повезло, то отладьте библиотеку самостоятельно с отпечатками, чтобы узнать, где именно зависание.Убедитесь, что буфер очищается правильно и т. д. Извините, больше ничем помочь не могу., @bladepanthera

@bladepanthera: я еще раз подтвердил, что у меня есть утилита/отладка. Я думаю, что "отлаживать библиотеку самостоятельно" - отличная идея, но я не уверен, с чего начать. В моей Arduino IDE (v1.6.5) я могу открывать только скетчи *.ino. Библиотеки написаны на C++. Вы предлагаете мне изменить файлы библиотеки *.cpp (например, [Adafruit_CC3000.cpp](https://github.com/adafruit/Adafruit_CC3000_Library/blob/master/Adafruit_CC3000.cpp))?, @JJ Zabkar

Ага. Буквально поместите операторы печати в файл cpp., @bladepanthera

@LookAlterno IIRC Я создавал новое TCP-соединение для каждого запроса., @JJ Zabkar


2 ответа


0

Плохой обходной путь: поскольку я пытался устранить зависание соединения, я решил использовать сторожевой таймер. timer, используя слегка документированную библиотеку <avr/wdt.h>.

,

1

Чтобы включить отладку, необходимо

  • раскомментируйте ENABLE_CC3K_PRINTER в Adafruit_CC3000.h
  • Если вы хотите передать какой-либо поток отладки, отличный от Serial по умолчанию, вы должны передать указатель на объект (который должен наследоваться от Print, например SD или Client) в качестве последнего аргумента конструктора в вашем скетче:

    Adafruit_CC3000(uint8_t csPin, uint8_t irqPin, uint8_t vbatPin, uint8_t spispeed = SPI_CLOCK_DIVIDER, Print* cc3kPrinter = CC3K_DEFAULT_PRINTER);
    
  • В utility/debug.h измените значение DEBUG_MODE на 1 (или любое ненулевое значение)

Я не знаю, что вызвало вашу проблему, но вы не должны включать это в свой код:

#define _CC3000_DEBUG  1

Поскольку большая часть utility/debug.h заключена в обычный:

#ifndef _CC3000_DEBUG
.
.
.
#endif

Ваш #define, в зависимости от того, где он размещен, может привести к тому, что компилятор пропустит большую часть файла, что приведет к ошибкам компиляции. На всякий случай избавьтесь от него и просто включите utility/debug.h по мере необходимости.

,