ошибка преобразования 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.
}  

, 👍0

Обсуждение

Ре “Я уверен, что именно здесь все идет наперекосяк”: Как вы можете быть уверены? Преобразование ' uint8_t в int` всегда работает., @Edgar Bonet

при отладке я добавил свои теги, ничего не выходит из строя, но, похоже, в этот момент он покидает функцию., @levi Clouser

Пожалуйста, приведите минимальный воспроизводимый пример и [отредактируйте] свой вопрос, чтобы прояснить проблему., @the busybee

Ваше "никогда не доберется сюда", вероятно, является отвлекающим маневром. Вероятно, он действительно попадает сюда, но серийный номер буферизован, так что если он выйдет из строя позже в программе, вы не увидите этот буферизованный текст. Для отладки такого рода вещей вы *должны* следовать за своими отладочными сообщениями с помощью Serial.flush (), чтобы они имели какой-либо реальный смысл., @Majenko

я также использовал выходы и светодиоды в качестве точек останова и никогда не получал "to never gets here", @levi Clouser