ошибка преобразования uint8 в int32?
итак, я общаюсь с экраном 4d systems, и когда на экране запускается событие, я иду в свой обработчик У меня возникла проблема со следующей строкой:
int caughtScreen = int(Event.reportObject.index);
не знаю почему, но я уверен, что именно здесь все идет наперекосяк.
объект Event.reportObject.index
имеет тип uint8_t
и исходит из репо GitHub в arduino 4d Repo
Я вставил другие тестовые точки в код, и я уверен, что именно здесь все происходит
вот некоторые из оберточного кода, чтобы дать вам представление (и да, событие клавиатуры работает нормально):
void myDisplayEventHandler(void)
{
int caughtScreen =6;
genieFrame Event;
myDisplay.DequeueEvent(&Event); // Remove the next queued event from the buffer, and process it below
//If the cmd received is from a Reported Event (Events triggered from the Events tab of Workshop4 objects)
if (Event.reportObject.cmd == GENIE_REPORT_EVENT)
{
if (Event.reportObject.object == GENIE_OBJ_KEYBOARD) // If the Reported Message was from a Keyboard
{
if (Event.reportObject.index == 0) // If Keyboard (Index = 0)
{
CatchgKeyboard(myHMIValues.CurrentScreen, char(myDisplay.GetEventData(&Event))); // Receive the event data from the keyboard
}
if (Event.reportObject.index == 1) // If Keyboard (Index = 1)
{
PasswordCatcher.nextChar(char(myDisplay.GetEventData(&Event))); // Receive the event data from the keyboard
}
}
else if (Event.reportObject.object == GENIE_OBJ_WINBUTTON)
{
serial.print("got here");
caughtScreen = int(Event.reportObject.index);
serial.print("never gets here");
switch (caughtScreen)
{
case 3: // Logout
foo();
break;
default: //Most Screens
bar();
break;
}
}
}
//Event.reportObject.cmd is used to determine the command of that event, such as an reported event
//Event.reportObject.object is used to determine the object type, such as a Slider
//Event.reportObject.index is used to determine the index of the object, such as Slider0
//genie.GetEventData(&Event) us used to save the data from the Event, into a variable.
}
@levi Clouser, 👍0
Обсуждение0
Смотрите также:
- Как преобразовать строку в массив байтов
- Проблемы с преобразованием byte[] в String
- Как преобразовать строку в длинную?
- Как преобразовать время EPOCH во время и дату на Arduino?
- Преобразование строки в IP-адрес
- Подключите Arduino Uno RX/TX к GPS-модулю 3,3 В NEO-M8N.
- Преобразование 16 бит в число с плавающей запятой
- Как преобразовать char[12] в byte[6]
Ре “Я уверен, что именно здесь все идет наперекосяк”: Как вы можете быть уверены? Преобразование ' uint8_t
в
int` всегда работает., @Edgar Bonetпри отладке я добавил свои теги, ничего не выходит из строя, но, похоже, в этот момент он покидает функцию., @levi Clouser
Пожалуйста, приведите минимальный воспроизводимый пример и [отредактируйте] свой вопрос, чтобы прояснить проблему., @the busybee
Ваше "никогда не доберется сюда", вероятно, является отвлекающим маневром. Вероятно, он действительно попадает сюда, но серийный номер буферизован, так что если он выйдет из строя позже в программе, вы не увидите этот буферизованный текст. Для отладки такого рода вещей вы *должны* следовать за своими отладочными сообщениями с помощью
Serial.flush ()
, чтобы они имели какой-либо реальный смысл., @Majenkoя также использовал выходы и светодиоды в качестве точек останова и никогда не получал "to never gets here", @levi Clouser