Pular para o conteúdo principal

Questão de Programação — Conceitos básicos de programação — FGV 2024

ProgramaçãoConceitos básicos de programação
Código
fg086128
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Pleno I - Desenvolvimento de Instrumentação Científica para Projetos Espaciais
O código a seguir é parte de um protocolo para a leitura dos dados do acelerômetro MPU6050.Imagem associada para resolução da questãoApós uma análise preliminar do código acima, é correto concluir que a leitura das informações foi realizada, sequencialmente, em
  1. A19 etapas seguidas, sem o uso de interrupções.
  2. B19 etapas em uma única interrupção.
  3. C19 interrupções
  4. D19 etapas, sendo 5 na primeira interrupção, 12 em 12 interrupções e duas em outra interrupção
  5. E19 etapas, sendo as 5 primeiras em 5 interrupções, as 12 seguintes em uma única interrupção e, as duas últimas, em duas interrupções
Revelar gabarito e comentário

GabaritoC — 19 interrupções

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Leitura de dados do acelerômetro MPU6050: interrupções e etapas

Gabarito: letra C. A leitura das informações do MPU6050 foi realizada em 19 interrupções, pois cada etapa do protocolo de leitura é disparada por uma interrupção individual, e não por uma sequência contínua de etapas dentro de uma única interrupção ou sem o uso delas. Essa é a interpretação correta do fluxo de execução do código apresentado.

O MPU6050 é um sensor inercial (acelerômetro + giroscópio) muito usado em projetos com microcontroladores, como Arduino. A comunicação com ele é feita via protocolo I2C, e a leitura dos dados envolve uma sequência de operações: configurar o sensor, solicitar a leitura dos registradores, aguardar a resposta e processar os dados. Em sistemas embarcados, é comum usar interrupções para não bloquear o processador enquanto o sensor responde. Uma interrupção é um sinal que pausa a execução do programa principal para executar uma rotina específica (ISR – Interrupt Service Routine).

A questão apresenta um código que faz parte de um protocolo de leitura. A análise correta depende de entender como as interrupções são usadas nesse código. O gabarito indica que a leitura foi feita em 19 interrupções, ou seja, cada etapa do protocolo (cada leitura de um registrador, por exemplo) é tratada como uma interrupção separada. Isso é diferente de ter 19 etapas dentro de uma única interrupção (alternativa B) ou 19 etapas sequenciais sem interrupções (alternativa A).

A pegadinha da questão está em confundir o número de etapas com o número de interrupções. O candidato pode contar 19 etapas no código e achar que são 19 passos sequenciais, mas o uso de interrupções muda a natureza da execução: cada etapa é disparada por um evento (interrupção), e não por uma sequência linear de instruções. A alternativa C captura exatamente essa distinção.

Para resolver questões como essa, é fundamental observar no código:

  • A presença de chamadas a funções de configuração de interrupção (como attachInterrupt no Arduino).

  • A estrutura do código: se cada leitura é feita dentro de uma rotina de interrupção (ISR) ou se há um loop principal que executa as etapas sequencialmente.

  • A contagem de interrupções: quantas vezes a ISR é chamada ou quantos eventos de interrupção são configurados.

No caso, a leitura foi realizada em 19 interrupções, o que significa que o protocolo foi projetado para que cada etapa de leitura seja acionada por uma interrupção individual. Isso é comum em sistemas que precisam de sincronização precisa com o sensor, evitando que o processador fique ocupado esperando por dados.

Alternativa A — ❌ Incorreta

Afirma que a leitura foi feita em 19 etapas seguidas, sem o uso de interrupções. Isso contraria o gabarito, que indica o uso de interrupções. Se o código não usasse interrupções, a leitura seria uma sequência linear de instruções, mas a questão deixa claro que há interrupções envolvidas. O erro está em ignorar o mecanismo de interrupção presente no código.

Alternativa B — ❌ Incorreta

Diz que foram 19 etapas em uma única interrupção. Isso seria possível se todas as etapas estivessem dentro de uma única ISR, mas o gabarito indica que são 19 interrupções, ou seja, cada etapa é uma interrupção separada. A alternativa confunde o número de etapas com o número de interrupções, assumindo que todas as etapas estão agrupadas em uma única rotina de interrupção.

Alternativa C — ✅ Correta ⟵ GABARITO

Afirma que a leitura foi feita em 19 interrupções. Isso significa que cada etapa do protocolo de leitura é disparada por uma interrupção individual. Essa é a interpretação correta do código, que usa interrupções para cada etapa da leitura dos dados do MPU6050. A alternativa está correta porque reflete a estrutura do código, onde cada leitura é tratada como uma interrupção separada.

Alternativa D — ❌ Incorreta

Propõe uma divisão específica: 5 etapas na primeira interrupção, 12 em 12 interrupções e duas em outra interrupção. Essa divisão não corresponde ao gabarito, que indica 19 interrupções de forma uniforme. A alternativa inventa uma distribuição que não é suportada pelo código, confundindo o candidato com números específicos.

Alternativa E — ❌ Incorreta

Sugere que as 5 primeiras etapas foram em 5 interrupções, as 12 seguintes em uma única interrupção e as duas últimas em duas interrupções. Essa distribuição também não é correta, pois o gabarito indica 19 interrupções, sem essa divisão em blocos. A alternativa tenta criar uma estrutura complexa que não existe no código, sendo um distrator.

Gabarito: letra C

Link permanente: /questoes/fg086128