Что с сообщениями об ошибках отладки, такими как VMDPE_1|1_VMDPE?

Я использую visual micro для Visual Studio, и я понимаю, что такого рода вещи вызваны конфликтом последовательных данных, когда я пытаюсь одновременно читать и печатать на основной последовательный файл, верно?

Ну, мне нужно прочитать серийные данные с основного серийного устройства на Mega 2560, а затем увидеть их на своем ЖК-экране, который управляется платой через SPI. Я знаю, что могу использовать эти два одновременно, потому что я делаю это с помощью своего передающего arduino и вижу, что он передает правильно.

Когда я пытаюсь просмотреть свои последовательные данные в последовательном порту, я не получаю ничего, кроме потока этих кодов ошибок, или что бы это ни было. Обычно они выглядят так: VMDPE_1|1_VMDPE. Обычно там тоже есть какие-то цифры, например: MDPE_1|2571143_VMDPE. Я как бы ожидал этого, так как вы не можете читать и писать одновременно на одном сериале. Но это было бы прекрасно, потому что мой проект все равно не будет подключен к компьютеру.

Поэтому, конечно, я стараюсь передавать свои данные непосредственно на ЖК-экран, чтобы подключить получающий arduino к внешнему источнику питания и не видеть сообщений об ошибках, которые, как я думал, исходили от отладчика моего компилятора. Вот мой код:

//on the receiver side

#include <stdint.h>
#include <TFTv2.h>
#include <SPI.h>

char incoming[3];

void setup() {
    Serial.begin(9600);
    //TFT_BL_ON;      // turn on the background light
    //Tft.TFTinit();  // init TFT library
    //Tft.setDisplayDirect(DOWN2UP);
    //TFT_BL_ON;      // turn on the background light
    //Tft.drawString("INCOMING:", 20, 301, 3, RED);
    Serial.println(incoming);

}



void loop() {

    if (Serial.available()) {

        Serial.readBytesUntil(',', incoming, 3 ) ;

        //Tft.fillRectangle(64, 236, 45, 165, BLACK);

        //Tft.drawString(incoming, 65, 235, 4, WHITE);
        Serial.println(incoming);

    }
}

Но нет! Я получаю те же коды ошибок на своем ЖК-экране! Хуже того, теперь они, похоже, испортили мой модуль zigbee! Я снял его с платы, подключил к компьютеру, и теперь утилита XCTU считывает всевозможные перепутанные значения, которые являются полной чепухой. Каким-то образом это, кажется, перезаписало фактические СЕРИЙНЫЕ НОМЕРА zigbee!!! Кто они сейчас? Попробуй угадать!

Serial высокий: E_1|2571092_VMDPE

Serial низкий: MDPE_1|2571143_VMDPE

, 👍0


3 ответа


2

Ваш входящий буфер недостаточно велик, чтобы обрабатывать данные, которые вы ему передаете. Отсечение комментариев от вашего кода:

char incoming[3];

При этом объявляется буфер для двух символов, допускающий (обязательный) 0 в конце. println() должен знать, когда остановить печать символов: он делает это, когда видит символ NUL (0).

Serial.readBytesUntil(',', incoming, 3 ) ;

Вы передаете, что хотите прочитать 3 символа, но это полностью заполняет входящие, не оставляя места для конечного NUL (0).

Serial.println(incoming);

Затем выводится первый символ, второй символ, третий символ... затем 4-й, 5-й, 6-й, 7-й и т. Д. В памяти, пока он, наконец, не достигнет НУЛЯ, а затем не завершится.

То, что вы называете "отладочными сообщениями", на самом деле является печатной тарабарщиной в памяти... Чтобы исправить это, вам нужно сделать входящий больше.

Кроме того, при использовании буферов, подобных этому, рекомендуется использовать функцию sizeof() следующим образом:

Serial.readBytesUntil(',', incoming, sizeof(incoming)-1 ) ; // Обратите внимание на -1!
,

Спасибо!Я понимаю, что вы имеете в виду насчет переполнения буфера.Прошлой ночью я загрузил оба своих ардуино, используя "start without debugging", и вывод изменился на что-то более похожее на цифры, немного также тарабарщину. Я действительно считаю, что "VMDPE_1|1_VMDPE"-это какая-то ошибка VisualMicro, связанная с отладкой.У меня есть большой скетч, и он печатается на серийном номере каждый раз, когда я прошиваю плату. Я читал об этом здесь: http://www.visualmicro.com/forums/YaBB.pl?num=1365950696/0 Я до сих пор понятия не имею, как он попал в мой скетч, не подключенный к компьютеру, или как он вторгся в мой Zigbee!, @LegitimateWorkUser

"Я до сих пор понятия не имею, как он попал в мой скетч, не подключенный к ПК", Потому что отладка Visual Micro работает, добавляя к вашему скетчу кучу скрытых серийных отпечатков. Как только вы загрузите скетч на свою плату, он будет отображаться во флэш-памяти независимо от того, подключен он к вашему компьютеру или нет., @per1234


0

Я видел те же сообщения, используя VS2017 и Arduino Unu и Visual Micro. Сообщения начинаются с "DPV..." или "VMDPV...".

Решение состоит в том, чтобы загрузить скетч в Arduino с помощью режима Release. Затем скрытые отладочные серийные отпечатки, которые, кажется, вставляет Visual Micro, исчезают.

,

Это может скрыть нежелательный вывод, но это не решение вопроса., @the busybee


0

У меня была такая же проблема. Проблема, по-видимому, связана с последовательной отладкой AVR Studio. Если вы выключите последовательный отладчик, проблема исчезнет. Не забудьте также включить режим "Автоматическая отладка программного обеспечения (Release/Debug)", как показано ниже.

,