Что с сообщениями об ошибках отладки, такими как 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
3 ответа
Ваш входящий
буфер недостаточно велик, чтобы обрабатывать данные, которые вы ему передаете. Отсечение комментариев от вашего кода:
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!
Я видел те же сообщения, используя VS2017 и Arduino Unu и Visual Micro. Сообщения начинаются с "DPV..." или "VMDPV...".
Решение состоит в том, чтобы загрузить скетч в Arduino с помощью режима Release. Затем скрытые отладочные серийные отпечатки, которые, кажется, вставляет Visual Micro, исчезают.
Это может скрыть нежелательный вывод, но это не решение вопроса., @the busybee
У меня была такая же проблема. Проблема, по-видимому, связана с последовательной отладкой AVR Studio. Если вы выключите последовательный отладчик, проблема исчезнет. Не забудьте также включить режим "Автоматическая отладка программного обеспечения (Release/Debug)", как показано ниже.
- Как распечатать трассировку стека и зарегистрировать дампы на последовательном мониторе Arduino?
- Код не запустится, если Serial Monitor не открыт
- DFPlayer Mini со своей стандартной библиотекой не инициализируется
- "ожидаемое первичное выражение перед '.' токен" в отладочном коде
- Микросхема Arduino Due (микроконтроллер Atmel) нагревается и светодиод гаснет.
- Нужно ли переключать Arduino Zero между использованием отладки порта USB EDBG и JTAG?
- Ардуино висит. Не уверен, что проблема с программным или аппаратным обеспечением
- Странная ошибка в моем Arduino ALU
Спасибо!Я понимаю, что вы имеете в виду насчет переполнения буфера.Прошлой ночью я загрузил оба своих ардуино, используя "start without debugging", и вывод изменился на что-то более похожее на цифры, немного также тарабарщину. Я действительно считаю, что "VMDPE_1|1_VMDPE"-это какая-то ошибка VisualMicro, связанная с отладкой.У меня есть большой скетч, и он печатается на серийном номере каждый раз, когда я прошиваю плату. Я читал об этом здесь: http://www.visualmicro.com/forums/YaBB.pl?num=1365950696/0 Я до сих пор понятия не имею, как он попал в мой скетч, не подключенный к компьютеру, или как он вторгся в мой Zigbee!, @LegitimateWorkUser
"Я до сих пор понятия не имею, как он попал в мой скетч, не подключенный к ПК", Потому что отладка Visual Micro работает, добавляя к вашему скетчу кучу скрытых серийных отпечатков. Как только вы загрузите скетч на свою плату, он будет отображаться во флэш-памяти независимо от того, подключен он к вашему компьютеру или нет., @per1234