Серийный монитор висит так же, как и вся IDE вскоре после начала

Фоно
Пн 12 сентября 2016 г., 19:44
Привет,
Ардуино 1.6.9 IDE установлен в Windows 10.
Я вставил в эскиз несколько сериалов.Печать операторов для мониторинга прогресса обработки в функции настройки.
Вот выдержка кода:

#Define Serial Serial

void setup () {

// режим PIN и тому подобное....

#ifdef serial
Сериал.начало (115200);
Задержка (2000);
Сериал.println ("отладка отладки" Activee ");
#еще
CanSetup ();
#endif

Ethernet.начать (Mac, ip);
#ifdef serial
Сериал.println ("инициализация клиента Ethernet");
#endif

// Инициализация de l'i2c
Maitrei2c.начинать() ;
#ifdef serial
задержка (100);
Сериал.print ("инициализация i2c");
if (mpu6050_init ()) // Инициализация du gyroscope
Сериал.println ("Reussie");
еще
Сериал.println ("echouee");
#еще
Mpu6050_init (); // Инициализация дю -гироскопа
#endif

// и т. д.
}

Когда начинается эскиз, только первые два отпечатка показывают в окне монитора, затем IDE висит. Если я попытаюсь закрыть окно монитора, оно не так, и IDE больше не отвечает, пока я не нажму кнопку сброса на плате Olimexion STM32.

Любая идея?

Это не происходит, если я использую физический последовательный порт на доске Olimexino.

Martinayotte
Пн 12 сентября 2016 г., 8:05 вечера
Вы имеете в виду, что первые серийные отпечатки перед I2C.begin () работают, но не тот, который после ?
Ваш maitrei2c, вероятно, не работает и не висит. Это прозвище для библиотеки проводов STM32 ?
У вас есть подтягивания на вашем автобусе i2c ?

Фоно
Пн 12 сентября 2016 г., 21:09
На самом деле я пытаюсь использовать библиотеку Hardwire, с:

#включать <Хардвор.час>

// .........

Hardwire maitrei2c (1, i2c_fast_mode);

Но пока без успеха.

Я понимаю, что вы предлагаете: инициализация I2C приведет к тому, что система будет зависать. Чтобы проверить это, я изменил код:

Сериал.println ("инициализация i2c");
задержка (1000);
Maitrei2c.начинать() ;
if (mpu6050_init ()) // Инициализация du gyroscope
Сериал.println ("Reussie");
еще
Сериал.println ("echouee");

Так что, каким бы ни был результат инициализации I2C, первый отпечаток обычно работает. Но это не.

Фоно
Пн 12 сентября 2016 г., 21:14
Кроме того, если я изменю код выше, как это:

#ifdef serial
Сериал.начало (9600);
Задержка (2000);
Сериал.println ("отладка отладки" Activee ");
#еще
CanSetup ();
#endif

Ethernet.начать (Mac, ip);
#ifdef serial
Сериал.print ("инициализация клиента Ethernet");
Сериал.print ("инициализация клиента Ethernet 2,");
Сериал.println ("инициализация клиента Ethernet 3");
#endif


Только первый Println и первое печатное шоу на серийном мониторе, и он висит после запятой:

Отладка отладки активно
Инициализация клиента Ethernet,

Martinayotte
Пн 12 сентября 2016 г., 21:24
Я едва мог в это поверить ...
Несколько последовательных серий.print () и он висит после второго ?
Я никогда не видел этого ...
Ваша установка довольно странная !
Вы пробовали другое программное обеспечение для последовательной связи ?

Rogerclark
Пн 12 сентября 2016 г., 21:56
Интересно, является ли это бипродуктом буферизации NEE TX ?

Martinayotte
Пн 12 сентября 2016 г., 22:03
Это возможно, я еще не объединил его в среде.

Но согласно приведенному выше коду, он будет зависеть с 58 символами ...

@Phono, не могли бы вы попытаться распечатать один очень длинный отпечаток, например, чтобы увидеть, повесить, в определенной позиции ?
Serial.println("012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789")

Эдогальдо
Вторник 13 сентября 2016 г. 6:45
Привет, фоно, пара вопросов:
  • Вы используете сериал по USART1 (с использованием USB2Serial Plet) или Serialusb (прямое соединение с USB доски)
  • Какую доску вы используете?

Фоно
Вторник 13 сентября 2016 г. 6:51
Следуя вашему совету, я изменил код следующим образом:

#ifdef serial
Сериал.начало (9600);
Задержка (2000);
Сериал.Println ("012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
Сериал.println ("отладка отладки" Activee ");
#еще
CanSetup ();
#endif

Ethernet.начать (Mac, ip);
#ifdef serial
Сериал.print ("инициализация клиента Ethernet");
Сериал.print ("инициализация клиента Ethernet 2,");
Сериал.println ("инициализация клиента Ethernet 3");
#endif


Я получаю следующую распечатку:
012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
Отладка отладки активно
Инициализация клиента Ethernet,

Примечание: есть место после последней запятой.
Это делает то же самое, если я изменюсь

Сериал.print ("инициализация клиента Ethernet");

к печати.
Я проверил, связано ли это с серийным монитором. Для этого я запустил Teraterm и настроил его для порта, в котором находится плата Maple (COM4). Я получаю точно такую ​​же распечатку, что и выше.

Поэтому я полагаю, что проблема стоит в USB -части ядра STM32.

Эдогальдо
Вторник 13 сентября 2016 г., 7:12 утра
Привет, фоно, несколько вопросов:
  • Какую доску вы используете?
  • Вы используете сериал по USART1 (с использованием USB2Serial Plet) или Serialusb (прямое соединение с USB доски)?
  • Если вы сделаете очень простой эскиз, как: begin() { Serial.begin(9600); delay(2000); Serial.println("012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"); Serial.println("Impression debug activee") ; Serial.print("Initialisation Client Ethernet, ") ; Serial.print("Initialisation Client Ethernet 2, ") ; Serial.println("Initialisation Client Ethernet 3") ; }

Стивестронг
Вторник 13 сентября 2016 г. 8:50 утра
Я подозреваю, что Ethernet lib. Какой контроллер Ethernet используется? ENC28 или другой тип?

Фоно
Вторник 13 сентября 2016 г., 21:02
Я использую кленовую плату Olimex STM32.
Я подключаюсь на сериале, то есть встроенный USB-сериал канал.
Я добавил щит W5200 от Seeed.
Подозрение на Ethernet.Заявление begin () было правильным. Если я перемесчу его в другое место, проблема исчезает.
В настоящее время я тестирую библиотеку Ethernet, которую я изменил, чтобы быть Freertos Aware. К сожалению, это сработало довольно хорошо назад, но теперь я застрял с регрессией, которую я не могу найти до сих пор.
Я дам вам знать, когда я добьюсь успеха, потому что я предоставлю вам эту библиотеку для возможного включения в пакет STM32.
Спасибо за вашу помощь, часто задавая неправильные вопросы, понесите правильные ответы.

Фоно
Пт 16 сентября 2016 г., 7:05 утра
Я решил проблему. Тем не менее, я не знаю, что случилось и почему сейчас лучше.
Проблема возникла из двух инициализаций:
- Ethernet.начинать()
- TWOWIRE :: Begin ().
В обоих случаях, поместив эти утверждения в функцию Setup (), до создания задач и запуска планировщика, привести к неприятностям.
Я поставил их в начале двух разных задач, до того, как (правдивый) заявление, и сейчас нет проблем.
Что касается библиотеки Ethernet, это может иметь смысл, так как я изменил ее, чтобы задержка () была заменена vtaskdelay () при использовании в многозадачной среде, хотя я тщательно проверял, что begin () не вызывает задержку ().
Для TwoWire :: Begin () Я нахожусь в конце моего остроумия, так как эта функция делает очень мало:

void twowire :: begin (uint8 self_addr) {
tx_buf_idx = 0;
tx_buf_overflow = false;
rx_buf_idx = 0;
rx_buf_len = 0;
Pinmode (это->scl_pin, output_open_drain);
Pinmode (это->sda_pin, output_open_drain);
set_scl (High);
set_sda (High);
}

Конечно, проволочный объект был правильно определен:
TwoWire maitrei2c (i2c_scl, i2c_sda);
Я попытался вставить в настройку () последние четыре утверждения напрямую, и не возникли проблем:

pinmode (i2c_scl, output_open_drain);
pinmode (i2c_sda, output_open_drain);
Двойной.set_scl (High);
Двойной.set_sda (High);

Эффект размещения maitrei2c.Begin () в Setup () был тем, что одна из двух моих задач, которые обрабатывают щит Ethernet.
В частности, одна задача подключается к внешнему TCP -серверу, а другая задача - веб -сервер. Это был веб -сервер, который не отвечал бы на попытки подключения из моего браузера, хотя задача, которая выполняет его все еще выполняется.

Я рад, что сейчас работает, но все еще нервничает в том, в чем была проблема, и как управлять, чтобы она не показывалась позже позже?