Buscar

Microcontroladores e Microprocessadores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Os microprocessadores são mais antigos que os microcontroladores, e é difícil destacar quais as são suas diferenças, pois dentro de todo microcontrolador há um microprocessador, e eles operam em aplicações muito semelhantes. Os microcontroladores são na verdade uma evolução dos microprocessadores, uma vez que os mesmos se originaram devido a demanda da criação de SOCs (System On Chip) para acelerar o desenvolvimento de soluções para controle eletrônico na indústria.
Por que que há uma tendência na escolha de microcontroladores em detrimento aos microprocessadores para o projeto de dispositivos de automação industrial?
Escolha uma:
a. Porque foram desenvolvidos anteriormente e já estão consolidados no mercado. 
b. Porque são menores e mais fáceis de miniaturizar. 
c. Porque são baratos, mais práticos de serem implantados em placas eletrônicas, e possuem periféricos internos essenciais 
d. Porque a legislação da maioria dos países exige o uso de microcontroladores no setor industrial. 
e. Porque possuem um número maior de periféricos externos. 
Apesar de haver armazenamento de informação em quase todos os periféricos internos dos microcontroladores, alguns são responsáveis por armazenar grandes volumes de dados, ou instruções de um programa, que são as memórias digitais.
O principal papel da memória EEPROM é:
Escolha uma:
a. Armazenar dados por tempo indeterminado que podem ser necessários no futuro, mesmo se for desligada, como a senha de um usuário. 
b. Guardar os dados que serão compartilhados temporariamente com os outros periféricos, principalmente os de comunicação. 
c. Armazenar as instruções referente as rotinas de interrupção, permitindo a separação do programa principal e paralelismo. 
d. Reter os dados que foram resultado do processamento atual, permitindo o acesso imediato caso necessário. 
e. Guardar os dados que são utilizados pela unidade lógica e aritmética, e depois transferi-los para o programa principal. 
O computador é geralmente muito mais caro que um sistema embarcado, tem finalidades variadas e grande capacidade de processamento e armazenamento. As calculadoras, por exemplo, foram projetadas a partir de um processador para apenas calcular e exibir os valores, e com o mínimo de recursos possível para isto. Já um computador, além de também calcular, pode realizar milhares de outras tarefas. Desta forma, apesar de ser um sistema computacional, classificamos uma calculadora como um sistema embarcado, e não um computador.
Qual dos aparelhos abaixo exige uma capacidade de processamento superior a que um microcontrolador pode oferecer, necessitando de uma placa mãe com um processador, memórias e periféricos?
Escolha uma:
a. Carrinho de controle remoto 
b. Videogame moderno com gráfico de alta resolução 
c. Máquina de lavar 
d. Impressora 
e. Mouse sem fio
Apesar de algumas arquiteturas computacionais diferentes terem sido apresentadas e implementadas com sucesso, apenas duas delas se tornaram um padrão e ditaram os rumos da computação: As arquiteturas Harvard e Von Neumann.
A arquitetura de computadores Harvard contornou o limitante do modelo de Von Neumann, permitindo uma geração de processadores muito mais poderosa. É correto afirmar que isto ocorreu na arquitetura Harvard devido a:
Escolha uma:
a. o processador possuir mais de um núcleo, possibilitando processamento paralelo. 
b. Ter sido implantado o uso da memória RAM, acelerando o acesso aos dados. 
c. as memórias volátil e não-volátil serem unificadas em um único espaço de memória, simplificando o acesso. 
d. os programas e instruções usarem espaços de memória e barramentos distintos, permitindo paralelismo na buscas destes. 
e. os processadores trabalharem em rede, otimizando o processamento geral. 
 
Diferentemente do microprocessador, dentro de um microcontrolador, considerado um sistema mais completo e autossuficiente, estão inclusos algumas memórias e periféricos de entrada/saída, os quais armazenam e transmitem informações constantemente durante o funcionamento.
Os programas que são executados em um microcontrolador ficam armazenados:
Escolha uma:
a. Na memória FLASH 
b. Nos barramentos 
c. Na CPU 
d. Nos periféricos de E/S 
e. Na memória RAM 
Com a evolução da tecnologia, a ciência e a indústria trabalharam na integração de alguns circuitos dedicados em um único chip, gerando o microcontrolador, capaz de controlar periféricos externos de forma autônoma.
Qual dos seguintes componentes pode ser considerado um periférico interno?
Escolha uma:
a. Portas Digitais 
b. Botão 
c. Led 
d. Sensor fim-de-curso 
e. Display 
A arquitetura do ATmega328 é constituída por alguns elementos conectados ao núcleo, através de barramentos de endereços, instruções e dados. Esses elementos são basicamente memórias, periféricos internos e sistema de geração de sinais de relógio.
Qual dos grupos abaixo possui apenas elementos que estão no interior do núcleo, ou seja, na CPU?
Escolha uma:
a. Registrador de Status, Registradores gerais, ULA, ponteiro de programa e Unidade Central de Controle. 
b. Registradores gerais, ponteiro de pilha, temporizador, memória FLASH e Registrador de entradas digitais. 
c. Memória FLASH, Portas Digitais, Registradores Gerais e conversor A/D. 
d. Ponteiro de programa, memória EEPROM, Unidade central de controle, Portas Digitais e pilha de dados. 
e. Sensor interno de temperatura, memória de programa, ULA, temporizador e ponteiro de pilha. 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
O microcontrolador ATmega328 possui a capacidade de ter seu programa principal desviado para uma rotina de tratamento de interrupção, ou seja, sofrer interrupções.
A respeito do sistema de interrupção do ATmega328, qual das afirmativas abaixo é verdadeira?
Escolha uma:
a. 
As interrupções são definidas como funções, que são invocadas pelo programa principal, o qual tem a responsabilidade de gerenciar o fluxo de interrupções. 
b. 
Existem várias fontes de interrupção, onde todas as interrupções são ativadas através de bits individuais, nos devidos registradores, além do bit habilitador global de interrupções, encontrado no registrador de status. 
c. 
Existem várias fontes de interrupção, mas somente algumas podem estar em execução simultaneamente, sendo processadas pelo núcleo ao mesmo tempo, paralelamente. 
d. 
Existem apenas duas classes de interrupções: as principais, que possuem maior prioridade, e as secundárias, que precisam aguardar todas as principais serem atendidas. 
e. 
Existem múltiplas fontes de interrupção, mas apenas três podem estar ativas por vez, sendo que as demais ficam aguardando pelas únicas três vagas. Tudo isto é controlado pelo bit (ou flag) I, que fica dentro da ULA. 
A arquitetura de qualquer microcontrolador é caracterizada, entre outas coisas, pelas dimensões ou larguras dos barramentos internos, como são as conexões entre o núcleo, memórias e periféricos internos, e o tamanho das memórias. No microcontrolador Atmega328, esses parâmetros foram escolhidos para prover uma estrutura eficiente para o conjunto de recursos disponíveis.
A respeito da arquitetura e barramento do ATmega328 considere as seguintes afirmações.
I – Os endereços das memórias são de 8 bits, e armazenam dados de 16 ou 32 bits, o que define o número de bits do processador.
II – O contador de programa (PC) só pode assumir valores pares, pois as memórias armazenam dados de 8 bits em cada endereço e as instruções são todas de 16 ou 32 bits.
III – As memórias de dados e de programa possuem barramentos diferentes, tanto para seus conteúdos quanto endereços, pois a arquitetura adotada por esse chip é do tipo Harvard.
IV – As instruções são de 8 bits e manipulam dados que podem ser de 8, 16 ou 32 bits, dependendo da necessidade de processamento.
Considerando a sequência, qual das alternativas abaixo retrata corretamente quais afirmações são falsas e quais são verdadeiras?
Escolha uma:
a. F, V, V, V 
b. F, V, F, V 
c. F, F, V, F 
d.V, V, F, F 
e. F, V, V, F 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Apesar do núcleo do microcontrolador não possuir o papel de armazenar massas de dados, algumas informações importantes ficam temporariamente retidas, ou nos registradores de propósito geral, ou em alguns registradores especiais, como os ponteiros de programa e de pilha, e o registrador de status.
As informações contidas no Registrador de Status são importantes para o programa porque:
Escolha uma:
a. 
refletem como foi o resultado da última operação, decidindo e desviando o fluxo do programa através de operações condicionais. 
b. 
informa se o resultado das operações está matematicamente incoerente com os valores esperados pelo algoritmo. 
c. 
representam os dados mais importantes e que devem ficar armazenados para processamentos futuros. 
d. 
são os valores das constantes usadas pelo programa atual, que devem ficar no núcleo para rápido acesso. 
e. 
auxilia o programa a decidir se as variáveis serão guardadas na memória RAM ou na memória EEPROM. 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
O núcleo possui um pequeno espaço de memória volátil, onde se encontram os 32 registradores de propósito geral, ou registradores de trabalho, muito utilizados durante a execução do programa embarcado.
Os registradores de propósito geral são usados para:
Escolha uma:
a. 
Armazenar os resultados dos processamentos por tempo indefinido para futuras decisões. 
b. 
Guardar instruções do programa que podem ser utilizadas em qualquer momento. 
c. 
Receber as instruções das rotinas de interrupção para paralelizar o tratamento. 
d. 
Calcular operações lógicas e aritméticas e transferir os resultados para a ULA. 
e. 
Armazenar os valores que serão processados pela ULA, pois têm acesso direto e exclusivo. 
Parte inferior do formulário
O processo de criação de um programa computacional, em qualquer linguagem que seja, conta com o uso de algumas diretivas para auxiliar na construção do código.
Na linguagem assembly, qual é a finalidade das diretivas de programação?
Escolha uma:
a. 
São comandos que são executados antes de compilação (também chamadas de diretivas de pré-compilação). Estes comandos não se tornam instruções que serão executadas. 
b. 
Servem para definir como será o andamento do programa, selecionando quais instruções de salto serão executadas. 
c. 
Atuam na definição dos formatos dos dados que serão manipulados pelo programa, onde cada um deles terá uma forma de ser processado individualmente. 
d. 
Garantir que as variáveis serão alocadas no núcleo para processamento de maneira adequada. 
e. 
São usados para o compilador listar todas as sub-rotinas ou funções que serão executadas pelo programa principal, bem como o momento em que estas devem ser invocadas. 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Apesar de todos os dados serem armazenados no sistema na forma de bits (ou sequência de bits) existem outras formas de representar valores na escrita do programa. Isto serve para auxiliar os programadores, permitindo que um mesmo valor possa ser representado por várias maneiras diferentes, de acordo com o formato de dados que se deseja usar no contexto em questão.
Considerando os formatos de dados suportados pelos microcontroladores AVR em linguagem Assembly, analise as seguintes afirmações:
I – A representação numérica hexadecimal é considerada a forma padrão e é identificada pelo prefixo HEX.
II – Os números representados na forma binária estão na sua forma mais bruta, onde é possível ver, de maneira direta, os valores dos bits que estarão na memória, e são identificados pelo prefixo 0b.
III – Os valores representados na forma decimal são os únicos que não possuem prefixo ou acentuação, sendo escritos da maneira que utilizamos os números naturalmente.
IV – Também é possível representar valores diretamente como caracteres, seguindo as normas da tabela ASCII, e estes são determinados pelo uso de aspas simples.
A respeito das afirmações, assinale a alternativa que apresenta a sequência correta:
Escolha uma:
a. F, F, V, F 
b. F, V, F, V 
c. F, V, V, V 
d. F, F, V, V 
e. V, F, V, V 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
O microcontrolador ATmega328 atua sobre o conjunto de instruções do núcleo AVR, as quais estão classificadas basicamente em quatro grandes grupos: instruções aritméticas/lógicas, instruções de transferência de dados, instruções de desvio de programa, e instruções de controle interno do microcontrolador. As instruções de transferência de dados são sempre grande parte do corpo do código, uma vez que todos os dados, antes de serem processados, devem ser transferidos para o núcleo, e grande parte dos resultados deve ser devolvida para a memória.
A respeito das instruções de transferência de dados para a programação de microcontroladores AVR em assembly, podemos afirmar que:
Escolha uma:
a. 
a instrução MOV serve para mover dados entre quaisquer endereços de memória, e para ambas as memórias de dados e de programa. 
b. 
a instrução LDI significa carregamento indireto, e deve ser usada para transferir dados para a memória de maneira indireta, por meio de registradores usados como ponteiros. 
c. 
a instrução IN serve para trazer dados que estão na memória de entrada e saída, mapeada sobre a memória de dados, para dentro do processador, nos registradores de propósito geral. 
d. 
as instruções LDS e STS servem apenas para trocar informação entre os registradores de trabalho e a ULA, muito úteis em processamento paralelizado. 
e. 
a instrução OUT é usada para armazenar valores de constantes ou variáveis na memória de programa, para que estes possam ser posteriormente encontrados pelo programa para processamento. 
O microcontrolador ATmega328 atua sobre o conjunto de instruções da AVR. Essas instruções estão classificadas basicamente em quatro grandes grupos: instruções aritméticas/lógicas, instruções de transferência de dados, instruções de desvio de programa, e instruções de controle interno do microcontrolador. Os caminhos percorridos pelo programa em seu fluxograma são feitos pelas instruções de desvio, que podem ser incondicionais, ou condicionadas à algum resultado usado como critério de decisão. Cada uma delas tem um propósito específico e deve ser usada no contexto apropriado para surtir o efeito desejado.
Em relação a instrução em assembly para o AVR de mnemônico BREQ, está correto afirmar que:
Escolha uma:
a. 
invocar a sub-rotina que é indicada pelo seu rótulo, independentemente de qualquer resultado anterior. 
b. 
desviar o programa para onde seu rótulo indica, independentemente de qualquer resultado anterior. 
c. 
desviar o programa para onde o seu rótulo aponta, caso o resultado da última operação seja zero. 
d. 
processar o último dado que foi transferido para o núcleo, indicado pelo rótulo junto à instrução. 
e. 
transferir o dado que está onde o seu rótulo aponta, para que este possa ser processado no núcleo. 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Existem muitas formas de se criar um programa computacional, o que pode ser feito através de várias linguagens de programação. Algumas delas foram criadas para fins específicos, como desenvolvimento de jogos, e outras serviram apenas de base para a construção de linguagens mais avançadas. Apesar de que algumas dessas linguagens não terem prosperado como se imaginava, muitas delas, modernas ou não, se tornaram um padrão mundial e são usadas atualmente pelos desenvolvedores de tecnologia da informação, como o Java, por exemplo.
Em relação a construção de programas embarcados em linguagens de máquinas, é correto afirmar que:
Escolha uma:
a. 
era usada nos primeiros códigos e está em desuso, uma vez que linguagens de mais alto nível permitem um desenvolvimento muito mais rápido e eficiente. 
b. 
é usada na criação de sistemas emrede, que devem usar essa linguagem nas mensagens trocadas. 
c. 
se deve para a construção de máquinas de calcular que usam esta linguagem para a construção de suas memórias internas. 
d. 
é aplicada exclusivamente para protocolos de troca de informações entre computadores. 
e. 
se perpetuou no mercado e é usada até hoje com linguagem predominante na construção de sistemas embarcados modernos. 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Todos os programas de computador escritos carregam consigo um algoritmo correspondente, que pode ser representado em um fluxograma. O que acontece na prática é que alguns programadores constroem o fluxograma antes do código, já outros programadores preferem programar diretamente. Esse fluxograma determina o comportamento do processo, de acordo com a ocorrência dos eventos tratados. Existem vários padrões de fluxogramas e modelos de algoritmos já estabelecidos, que se aplicam para as mais diversas situações e finalidades.
Pensando exclusivamente em programação para sistemas embarcados, considere as seguintes afirmações sobre o fluxo do código:
I – O sistema inicia-se em um loop infinito, onde permanece até que hardware seja todo ajustado, e em seguida entra em uma fase de “finalização”, onde executa os comandos necessários, encerrando assim o seu trabalho.
II – O programa principal se mantém sempre atualizando os valores das saídas, independente dos estados das entradas, que são usadas apenas para processamentos internos. 
III – Antes do sistema entrar no seu ciclo de trabalho, em um loop infinito, este deve ser inicializado, o que ocorre apenas uma vez, e serve para configurar o conjunto para operar propriamente.
III – Os desvios condicionais do fluxo do programa não podem ser usados em processos que controlam apenas uma saída, pois esta deve ser tratada na função principal do código.
Considerando as afirmativas, assinale a alternativa que apresenta a sequência correta:
Escolha uma:
a. V, F, F, F 
b. F, F, V, F 
c. F, V, V, V 
d. F, V, V, F 
e. F, F, V, V 
Os programas embarcados podem ser construídos a partir de inúmeros fluxogramas ou algoritmos diferentes, no entanto todos eles seguem um padrão básico. O sistema pode ser sequencial, ou combinacional, dependendo da natureza do problema.
O algoritmo apresentado na figura a seguir corresponde ao controle de um semáforo de veículos a partir de apenas um botão de pedestre, o qual tem sempre prioridade. 
Figura: Algoritmo para controle de semáforo
Fonte: Elaborada pelo autor
A partir do fluxograma da figura, considere as seguintes afirmações:
I- O processo em questão é considerado um sistema sequencial, e não combinacional.
II- Não é típico de um sistema embarcado, uma vez que não há encerramento do programa, ou seja, este nunca termina o seu trabalho.
III- É integralmente combinacional, pois o fluxo é ditado por decisões binárias, do tipo sim ou não.
IV- É um tipo de modelo que só permite a análise teórica, pois não pode ser implementado na prática, em um programa embarcado. 
Considerando a sequência, assinale a alternativa que apresenta a sequência correta:
Escolha uma:
a. V, F, F, F 
b. V, F, V, F 
c. V, F, F, V 
d. F, F, V, F 
e. V, V, F, F 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Independentemente do tipo ou porte do sistema computacional, todos eles possuem um núcleo de processamento, a CPU. Em seu interior ficam os registradores de trabalho, a ULA (responsável pelas operações lógicas e aritméticas), apontadores de programa e dados, e o indispensável registrador de status, que armazena informações importantes para o funcionamento conjunto.
Considerando o microcontrolador ATmega328, qual registrador é responsável em armazenar informações sobre o resultado da última operação lógica ou aritmética, que podem ser uteis para a tomada de decisões do programa, além do bit I, que controla a ativação global das interrupções?
Escolha uma:
a. Registrador de status 
b. Registrador de ponteiro de programa 
c. Registrador de ponteiro de pilha. 
d. Registrador de programa. 
e. Registrador de controle de memória 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
No microcontrolador ATmega328, o barramento de dados é de 8 bits, mesma largura da memória de dados. Esse espaço de memória, onde fica a região de RAM para o programa usuário, é usado para a manipulação de dados voláteis, úteis por apenas pouco tempo, e que são perdidos quando a energia de alimentação acaba. O acesso a esses dados é paralelo ao das instruções, uma vez que esse microcontrolador incorpora a arquitetura Harvard.
A respeito do espaço de memória de dados do ATmega328, qual das seguintes afirmações é verdadeira?
Escolha uma:
a. Não comporta outros registradores, é exclusiva e integralmente reservada para SRAM, armazenamento de dados voláteis. 
b. Contempla, além da memória RAM, apenas os 32 registradores de trabalho, que apesar de estarem no núcleo, são mapeados nesse espaço. 
c. Engloba o endereçamento da RAM, dos 32 registadores gerais e dos registradores de E/S, os quais são as interfaces entre os periféricos internos e o processador, tanto para controle quanto dados. 
d. Possui na parte final, além da RAM, uma parte reservada para o boot programa, ou seja, o programa de inicialização do sistema. 
e. Possui uma área reservada para armazenar previamente as próximas rotinas que serão executadas, gerando paralelismo e maior eficiência. 
Questão 4
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Os microprocessadores são mais antigos que os microcontroladores e, de fato, é difícil falar em diferença entre eles, pois dentro de todo microcontrolador há um microprocessador, além de outros componentes. O conceito sobre a diferença é basicamente: O microprocessador não possui periféricos e memória interna, ao contrário do seu sucessor. O processador é composto apenas pelo núcleo a as conexões (barramentos), através de seus pinos. Ele não é capaz de armazenar massas de dados, acionar periféricos, nem mesmo de tomar decisões sozinho, sem um programa para conduzi-lo. Seus componentes internos são os registradores de trabalho, unidade de controle central, a unidade lógica e aritmética, ponteiros e registrador de controle e status. O microcontrolador é uma evolução na construção do microprocessador, pois possui em seu interior alguns circuitos importantes para o funcionamento do sistema, como memórias, circuitos osciladores, temporizadores, periféricos de E/S, entre outros. No entanto, alguns aparelhos computacionais modernos utilizam um microprocessador em seu controle central, ao invés de um microcontrolador.
Em quais casos um microprocessador deve ser usado para gerenciar um sistema computacional, ao invés de um microcontrolador?
Escolha uma:
a. Quando um microprocessador se mostra mais lento, consumindo menos energia. 
b. Quando o dispositivo for de baixo custo. 
c. Quando houver demanda de mais processamento dos que são disponíveis nos microcontroladores. 
d. Quando o sistema deve ser produzido em larga escala. 
e. Quando o programa a ser embarcado precisa ser desenvolvido em assembly. 
Questão 5
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
No conjunto de instruções dos microcontroladores AVR, como em todos os outros, existem tipos bem definidos de instruções, como as instruções de transferência de dados e as de operações lógicas e aritméticas. As instruções de controle já são especificas para cada arquitetura, ou família de microcontroladores, e as funções de desvio podem ser incondicionais ou condicionadas ao resultado de algum evento.
Qual é a finalidade da instrução em Assembly BRNE, para os microcontroladores AVR?
Escolha uma:
a. Transferir o dado que está na posição de memória de dados apontado pelo rótulo que vem junto a instrução. 
b. Desviar o fluxo do programa para onde aponta o rótulo da instrução, mas apenas se o resultado da última operação não tenha sidonulo (zero). 
c. Funciona como uma diretiva de compilação, definindo um rótulo a ser substituído por ser valor associado na hora da compilação. 
d. Invocar a sub-rotina que está indicada no rótulo da instrução, independentemente de qualquer condição lógica. 
e. Transferir o dado que está em um dos registradores de trabalho para o endereço de memória de dados indicado no rótulo da instrução. 
UNIDADE DE ENSINO 2.
Todos os programas embarcados escritos em linguagens de mais alto nível, como C ou C++, podem ser convertidos em um programa em linguagem Assembly ou até linguagem de máquina equivalente. Essa tarefa é exatamente o que os compiladores fazem, de uma maneira mais completa. E isso significa também que, qualquer programador de sistemas embarcados que sabe programar em C, pode converter manualmente seus programas de C para Assembly, mesmo que isso não seja necessário. Pois cada comando em C, principalmente os de controle, podem ser convertidos em estruturas padrões em Assembly, que são poucas.
A respeito da programação de sistemas embarcados, e comparando as linguagens Assembly e C em termos de estruturas de controle, analise os três exemplos de programa na figura seguinte, responsáveis por realizar a operação de somatório de 1 até 5 = 15, e armazenar o resultado na variável Somatorio1a5:
 
Figura – Três exemplos de programas embarcados para o ATmega328.
 
 
Fonte: Elaborada pelo autor.
 
 
Observe agora as seguintes afirmações sobre a comparação dos programas apresentados:
I – As dois programas em C estão corretos, pois vão apresentar o comportamento esperado se executados, porém, o mesmo não ocorre para o programa em Assembly.
II – Os dois programas em C não podem ser considerados equivalentes, pois se compilados e executados vão apresentar comportamentos e códigos compilados distintos. No entanto, o primeiro programa em Assembly está totalmente coerente com os requisitos do problema, e apresentará o resultado correto se executado.
III – Os três programas são totalmente equivalentes, e se compilados e executados vão apresentar o mesmo comportamento, com exceção dos dois erros de sintaxe apresentados no código em Assembly, que não permitirá que este possa ser compilado.  
IV – Os três programas são quase equivalentes e seriam se apenas o primeiro, em Assembly fosse ajustado. Diferente dos outros dois, este programa fará o somatório de 1 até 4, pois as iterações são contabilizadas de CNT = 2 até 5, apesar de parecer que a primeira iteração corresponde a CNT = 1. Se a instrução INC fosse removida e inserida depois da instrução SUB, esse problema seria corrigido.
 
Considerando a ordem das as afirmativas, qual das alternativas representa corretamente quais são verdadeiras ou falsas? 
Escolha uma:
a. V, V, V, F. 
b. V, F, F, V. 
c. F, V, F, F. 
d. V, F, V, F. 
e. F, F, V, V.    
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Algumas instruções em Assembly são responsáveis por realizar saltos na execução do programa, a transferindo para outro ponto do programa, que deve ser feito de forma estratégica, visando um controle apropriado para a situação.
Considerando o microcontrolador ATmega328, a respeito do controle do fluxo do programa, as instruções de salto condicionadas em linguagem Assembly, são correspondidas em linguagem C por:
Escolha uma:
a. Os comandos de controle, que apesar de não serem mapeados diretamente nas instruções de salto condicionados em Assembly, permitem decidir o fluxo do programa de acordo com algumas condições pré-estabelecidas. 
b. Comandos de saltos condicionados, onde existe um comando de salto condicionado equivalente em C para cada instrução de salto condicionado em Assembly. 
c. Nenhum comando, uma vez que a linguagem C não permite a manipulação do fluxo do programa, apenas a manipulação dos dados em camadas de mais alto nível de abstração. 
d. Os tipos dos dados manipulados pelo programa principal, pois o fluxo do programa é ditado unicamente pelo tamanho das variáveis que estão sendo manipuladas a cada iteração. 
e. As mesmas instruções em Assembly, pois apenas para o caso de saltos condicionados as instruções são idênticas para Assembly e C. 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
A linguagem de programação C é considerada de mais alto nível do que a linguagem Assembly, pois permite a abstração de alguns detalhes de processamento, permitindo a construção muito mais eficiente de códigos. Uma das facilidades do C são os comandos de controle, que ditam o fluxo do programa, e são escritos de uma maneira mais compacta do que as instruções em Assembly correspondentes.
Para que serve o comando de controle FOR na linguagem C?
Escolha uma:
a. Para criar pequenos trechos de programa que devem ter seu uso evitado, sendo necessário apenas em situações extremas ou de emergência, como a queda de energia do sistema. 
b. Para realizar um mesmo trabalho múltiplas vezes, tirando a necessidade de escrever um trecho de programa para cada uma vez. Geralmente usado quando o número de vezes que o trecho será executado é fixo. 
c. Para desviar o programa para a devida rotina de tratamento de todas as saídas do sistema, que deve ser executada apenas uma vez na inicialização. 
d. Para ajustar os tipos das variáveis para serem processadas juntamente. Sem o seu uso, os resultados podem assumi valores inesperados, permitindo um comportamento anormal do sistema. 
e. Para indicar onde o programa deve começar, sempre quer for ligado ou reiniciado. Serve para orientar o núcleo de onde o contador de programa, ou ponteiro de programa deve apontar na inicialização. 
A linguagem de programação C permite que trechos de códigos mais longos, complexos e trabalhosos de se construir em linguagem Assembly sejam feitos de forma mais sintética, simples e abstrata, tornando o processo de programação muito mais eficiente.
Considere os dois trechos de programa para o microcontrolador ATmega328, um em linguagem Assembly, e o outro em linguagem C, na figura 2.6
Figura 2.6: Dois trechos de programa embarcado.
Fonte: Elaborada pelo autor
A respeito da comparação entre eles, qual das alternativas abaixo é correta?
Escolha uma:
a. Não são equivalentes, mas seriam se a variável VARI1 fosse testada com o valor zero ao invés de um, no trecho em C (à direita), e se a operação lógica fosse XOR “^” (OU exclusivo), ao invés de OR “||”(OU). 
b. São perfeitamente equivalentes, ou seja, vão produzir o mesmo efeito se forem processados pelo ATmega328. 
c. Não são correspondentes, mas seriam se a primeira instrução de salto condicionado em assembly fosse “BREQ” ao invés de “BRNE”, e se a variável VARI1 fosse testada com o valor zero ao invés de um no trecho em linguagem C. 
d. Não são equivalentes, mas seriam se as duas variáveis fossem testadas com o valor zero ao invés de um, no trecho em C (à direita), e a operação lógica fosse AND “&&” (E), ao invés de OR “||”(OU), no mesmo trecho. 
e. Não se correspondem, e teriam que ser reescritos de outra maneira, pois não há nenhuma alteração que possa ser feita para torna-los equivalentes, devido às suas estruturas não permitirem isso. 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Um mesmo programa em linguagem C pode apresentar comportamentos diferentes em cada vez que for executado. Isso se deve ao fato do programa não seguir sempre um mesmo caminho no seu fluxograma, que não pode ser previsto durante a programação, pois depende das condições que serão encontradas pelo sistema no momento em que este for executado.
Todos os programas em linguagem C que capazes de tomar decisões possuem comandos de controle em seu corpo. A respeito desses comandos, considere as seguintes afirmações:
I – O comando IF só pode ser usado em conjunto com o ELSE e faz o programa percorrer o menor caminho, que irá exigir menos processamento.
II – O comando BREAK deve estar sempre dentro de um laço (incluindo o SWITCH), e serve para interromper aexecução desse laço, fazendo o programa continuar seu fluxo com os comandos seguintes ao laço.
III – O comando SWITCH serve para criar laços quando não é possível prever quantas vezes o laço será executado, e permite que o programa se comporte de maneira diferente em cada vez que o laço for processado.
IV – O comando CONTINUE serve para fazer o programa continuar pelo seu fluxo normal, sem alteração ou salto. Deve ser inserido sempre ao fim do loop infinito para o programa não cessar sua execução, continuando com um ciclo seguinte.
Quais das afirmações podem ser consideradas verdadeiras ou falsas, respeitando a ordem?
Escolha uma:
a. V, F, V, F 
b. F, F, F, V 
c. F, V, V, F 
d. F, V, F, F 
e. F, F, V, V 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
As diretivas de compilação são comandos usados pelo compilador, mas não comandos que se tornarão instruções de um programa compilado, e ajudam o programador aumentando a legibilidade do código.
A respeito das diretivas de compilação da linguagem C, voltada para o microcontrolador ATmega328, qual das alternativas abaixo pode ser considerada verdadeira?
Escolha uma:
a. A diretiva “.EQU” é responsável por registrar um valor em uma variável, mas que pode ser alterada posteriormente pelo código através de outra “.EQU”, diferentemente da diretiva “#define”, que associa uma variável a um valor definitivamente. 
b. A diretiva “#include” é equivalente a diretiva de Assembly “.INCLUDE”, que é utilizada para incluir algum arquivo para o seu programa. Apesar de não ser obrigatório, é muito útil na construção de programas embarcados, principalmente na primeira linha: #include<avr/io.h>, incluindo os nomes registradores para a utilização no programa usuário. 
c. A diretiva “main(){“ é utilizada para definir onde é o começo da memória de dados, ou seja, onde as variáveis do programa estarão para serem manipuladas. Todos os programas em linguagem C devem possuir pelo menos uma diretiva dessa, indicando a passagem para o loop infinito. 
d. A diretiva “#define” é obrigatória para todos os programas embarcados e deve ser usada para definir todas as variáveis do programa. 
e. A diretiva “while(TRUE)” serve para indicar onde estará no código o loop infinito, que pode ser unitário, mas pode ser múltiplo, se o programa demandar muitos processamentos. Essa diretiva não existe em Assembly, nem alguma correspondente. 
Os programas de computador podem ser fragmentados em diferentes partes, através do uso de funções, o que é altamente recomendado para programas mais extensos ou complexos. A modularização contribui muito para elaborar uma solução para um problema grande, pois cada parte é construída por vez, e apenas os detalhes daquela tarefa são considerados, os demais são abstraídos.
Considere que o fluxograma abaixo corresponde a um programa em C embarcado no microcontrolador ATmega328, apresentado na figura seguinte:
Figura – Fluxograma exemplo em camadas para um programa embarcado.
Fonte: Elaborada pelo autor.
Qual das alternativas abaixo representa os arquivos para um possível programa embarcado modularizado, equivalente ao fluxograma descrito, respeitando as regras da linguagem C.
Escolha uma:
a. Figura – solução proposta alternativa a).
Fonte: Elaborada pelo autor. 
b. Figura – solução proposta alternativa b).
Fonte: Elaborada pelo autor. 
c. Figura – solução proposta alternativa c).
Fonte: Elaborada pelo autor. 
d. Figura – solução proposta alternativa e).
Fonte: Elaborada pelo autor. 
e. Figura – solução proposta alternativa d).
Fonte: Elaborada pelo autor. 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Os dados a serem manipulados em um programa em linguagem C devem ser declarados a partir de algum tipo, de acordo com a natureza do valor a ser armazenado. Para registrar o número de ocorrências de um evento por exemplo, a variável deve ser do tipo unsigned int, uma vez que irá assumi apenas valores inteiros e positivos.
Considerando a programação em linguagem C, para que servem as structs, ou estruturas de dados?
Escolha uma:
a. As structs, ou, estruturas, são criadas para gerar as bifurcações nos caminhos do programa embarcado, ou seja, compor a estrutura do código, daí vem seu nome. Elas definem onde o programa deve sofrer desvios para o devido processamento dos dados, de acordo com as condições encontradas durante a execução. 
b. As structs da linguagem C são responsáveis pela redefinição de novos tipos de dados, a partir dos tipos mais primários, nativos da linguagem C, além de outras subestruturas previamente criadas. 
c. Esses comandos são usados para se criar a estrutura do programa em termos das funções que o compõem. Assim, depois de elaborar todas as funções em separado, estas podem ser conectadas através das structs, gerando assim o programa completo, com todas as camadas. 
d. Servem para declarar as variáveis do programa, que serão usadas durante o processamento dos dados. As estruturas devem ser compostas por elementos do mesmo tipo, mas isso não é obrigatório, pois é permitido a criação de estruturas com tipos diferentes, desde que seja usado em conjunto o comando typedef. 
e. Servem exclusivamente para a criação de novos tipos de dados, que podem ser usadas para a declaração de variáveis apenas no escopo da declaração. Diferente dos tipos básicos ou primários que podem ser usados para declara variáveis em qualquer programa, de maneira nativa. Uma variável declarada a partir de estruturas pode ser composta por elementos de tipos diferentes, diferente das matrizes. 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Todos os dados, ou variáveis que são descritos nos programas embarcados foram criadas a partir de algum tipo de dado. Os tipos são as formas em que os valores podem ser representados, como inteiro, caractere, ponto flutuante, entre outros.
A programação em linguagem C permite manipulação de dados com tipos diferentes, a respeito das matrizes, considere as seguintes afirmações:
I – A matriz é um conjunto de elementos do mesmo tipo, mas que podem assumir valores individuais, e são indexados pela posição na matriz, correspondente a um valor para cada dimensão da matriz
II – Quando as matrizes são criadas deve-se definir quantas serão as dimensões, e, qual é a ordem de cada uma delas. E esses valores podem e devem ser alterados pelo programa usuário durante a execução do código.
III – Os elementos das matrizes podem ser acessados pelo programa através dos índices, como na sintaxe “Mat[2][5][1]”. Além disso, as matrizes também podem ser manipuladas através de ponteiros. Isso é muito usado quando se deseja passar matrizes como parâmetros de uma função invocada, que devem ser alteradas pela função. Se não for passado o ponteiro apontando para a original, e sim os elementos da matriz, a função chamada receberá uma cópia da matriz original, e os valores que ela alterar não terão efeito depois do retorno.
IV – Os elementos usados para representar matrizes de caracteres, ou seja, as strings, podem ser representados de uma maneira mais compacta do que os elementos de outro tipo de matriz. Quando usada para constantes, a ordem de cada dimensão da matriz pode ser ocultada. Dessa forma, a declaração para qualquer tipo de matriz const unsigned char letras[4]={‘a’, ‘b’, ‘c’, ‘\0’}; pode ser reescrita para o caso de strings como const unsigned char letras[]=”abc”;.
Considerando a ordem, qual das alternativas representa corretamente as afirmativas verdadeiras e falsas?
Escolha uma:
a. V, F, V, V 
b. V, V, F, V 
c. V, F, V, F 
d. F, V, V, V 
e. V, V, V, V 
A linguagem de programação C, assim como outras, é composta por um conjunto de regras de sintaxe e semântica, também como as linguagens humanas. Dessa forma, quando um programador desenvolve um código em linguagem C, ele deve conhecer e respeitar essas regras para que o programa possa ser compilado e funcione corretamente.
Sobre a programação de microcontroladores emlinguagem C, observe as seguintes afirmações:
I – Quando a função main() invoca uma outra função, por exemplo, void Func1(int a, intb);, não há a necessidade usar valores para os parâmetros de entrada “a” e “b”, pois existe o indicador “void”, que significa “ausência”.
II – A função principal de qualquer programa embarcado pode possuir qualquer nome, e é considerada, para a abstração de programa em camadas, a função raiz, ou seja, a primeira camada. Todas as outras funções que forem invocadas pela principal também estarão na mesma camada que a raiz, mas não podem retornar valores, apenas recebe-los para processamento.
III – Todas as funções em C podem receber inúmeros parâmetros de entrada, porém todos esses dados devem ser do mesmo tipo. A única exceção é quando se usa matrizes como sinais de entrada de uma função.
IV – Apesar de na matemática as funções possuírem apenas um retorno, para a programação foi estabelecido a possibilidade de retornar até dois valores ao invés de um.. Não existem nenhuma outra maneira da função invocada retornar mais valores de saída para a função que a chamou, para este caso deve ser criada outra função distinta, mesmo que o seu “corpo” (interior) seja o mesmo.
Considerando a veracidade das afirmações, qual das alternativas representa a sequência correta?
Escolha uma:
a. V, V, F, F 
b. V, F, V, F 
c. F, F, V, F 
d. F, F, F, V 
e. F, F, F, F 
Questão 2
Incorreto
Atingiu 0,00 de 1,00
Marcar questão
Texto da questão
Uma das facilidades da programação em linguagem C é possibilidade de manuseio dos endereços das variáveis, através dos ponteiros.
Considere a construção de um programa embarcado em linguagem C para o ATmega328, onde a variável tipo ponteiro, unsigned int *PontVet1;, deve ser usada para acessar o terceiro elemento do vetor unsigned int Vet1[10];. Utilizando a variável unsigned int Var1;, qual das alternativas abaixo representa a sintaxe e comandos corretos para esta ação?
Escolha uma:
a. PontVet1 = Vet1; PontVet1+=2; Var1 = *PontVet1;. O primeiro comando serve para fazer o ponteiro apontar para o primeiro elemento do vetor. O segundo comando incrementa o ponteiro em dois endereços, fazendo ele apontar para o terceiro elemento do vetor. O último transfere o conteúdo do endereço apontado por PontVet1 para a variável Var1. 
b. Var1 = Vet1[*PontVet1+3];, o que significa que o conteúdo do elemento do vetor Vet1 indicado pelo índice PontVet1 será transferido para a Var1. 
c. PontVet1 = *Vet1[2]; Var1 = &PontVet1;. O primeiro comando serve para fazer o ponteiro apontar para o terceiro elemento do vetor. O seguinte busca o conteúdo do endereço apontado por PontVet1 e carrega para a variável Var1. ???
d. PontVet1 = &Vet1[3]; PontVet1++; Var1 = PontVet1;. O primeiro comando serve para fazer o ponteiro apontar para o terceiro elemento do vetor. O segundo comando incrementa o ponteiro para ele apontar para o próximo elemento do vetor. O seguinte busca o conteúdo do endereço apontado por PontVet1 e carrega para a variável Var1. 
e. PontVet1 = Vet1[3]; Var1 = &PontVet1;. O primeiro comando serve para fazer o ponteiro apontar para o terceiro elemento do vetor. O último comando transfere o conteúdo do endereço apontado por PontVet1 para a variável Var1. 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Na linguagem de programação C, além das definições que podem ser feitas com a diretiva #define, existem outras formas de se criar amarrações de valores ou tipos de variáveis.
Que utilidade o comando “typedef” apresenta na programação em linguagem C?
Escolha uma:
a. O typedef é usado exclusivamente para estruturas de dados, pois é responsável por associar os ponteiros e as estruturas que serão apontadas. 
b. Esse comando especial tem como finalidade criar tipos de dados universais, que podem ser utilizados na criação de outros programas, através de atualizações distribuídas pela internet . 
c. Este comando serve para redefinir novos tipos de dados. Pode ser usado para encurtar/abreviar nomes compostos de variáveis. Por exemplo, depois do comando: typedef const unsigned char cteUchar;, você pode declarar variáveis do tipo citado como: cteUchar Letra = ‘a’;. 
d. O typedef serve para a manipulação de matrizes, quando estas possuem mais de duas dimensões. A partir daí é necessário que esse tipo composto de dados seja representado através de estruturas, definidas pelo typedef. 
e. O uso do typedef é obrigatório para todos os programas embarcados, assim como o loop infinito, uma vez que é responsável por definir todos os tipos básicos das variáveis que serão manipuladas pelo programa. 
Há algumas décadas atrás a computação estava em surgimento e era acessível a poucas pessoas. Atualmente possuímos acesso ao desenvolvimento de sistemas embarcados em cursos e faculdades de qualquer lugar. Dentre estes, atualmente, o Arduino é o sistema que se tornou mais popular.
A respeito da programação de programas embarcados, mais precisamente da placa Arduino UNO, considere as seguintes afirmações:
I – A empresa Arduino é a fabricante do Atmega328, e também a criadora do aplicativo de ambiente de desenvolvimento AtmelStudio.
II – O AVRDude é um programa responsável por transferir o programa compilado no PC para o microcontrolador da Arduino UNO, o ATmega328P. Este programa é instalado junto ao aplicativo Arduino IDE, e pode ser usado em conjunto com o AtmelStudio, que não possui de forma nativa (dentro do pacote padrão).
III – O programa é transferido do computador para a placa Arduino por meio de uma porta serial virtual, que é criada na primeira vez que a placa é conectada ao computador, e recebe um número de identificação, que deve ser usado na configuração do AVRDude.
IV – Para configurar o AVRDude no AtmelStudio, é necessário adicionar uma nova ferramenta interna, através da aba de opção Tools, e, no campo Title, que é o primeiro, deve estar escrito "Gravador Arduino", exclusivamente, para que este funciona propriamente.
Qual das alternativas abaixo representam as afirmações que são verdadeiras e falsas, considerando a ordem que foram apresentadas?
Escolha uma:
a. V, V, V, V. 
b. F, F, V, F. 
c. F, V, V, F. 
d. F, F, V, V. 
e. V, F, V, F. 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Antes de fazer qualquer projeto embarcado, ou até mesmo produtos, é importante uma análise previa sobre como modelar o comportamento do sistema. Para isso, é interessante usar ferramentas de simulação, o que ajuda a prever possíveis falhas que seriam apresentadas nos protótipos reais.
Qual dos programas abaixo pode ser utilizado para simular sistemas eletrônicos digitais, com execução de programas embarcados em microcontroladores AVR?
Escolha uma:
a. AVRDude. 
b. ATmegaStudio IDE. 
c. AtmelStudio. 
d. Proteus ISIS. 
e. Arduino IDE. 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Os programas embarcados precisam de alguma referência de tempo para sincronizar suas tarefas propriamente. Os casos mais complexos demandam o uso de timers, ou temporizadores, para elaborar um sincronismo mais preciso. Para os casos mais simples se pode utilizar as rotinas de delay. Deve-se levar em conta que o programa fica “travado” nessas funções, sem atender a nenhum tratamento, mesmo se for externamente necessário.
Considerando programas em linguagem C feitos do AtmelStudio para o microcontroladores AVR, como se define a frequência de relógio para utilizar as funções de delay que estão no arquivo #include "util/delay.h"?
Escolha uma:
a. #define CLK_CPU 16000000UL 
b. #define FCY 16000000UL 
c. #define CPUCLK 16000000UL 
d. #define F_CPU 16000000UL 
e. #define Freq_Clk 16000000UL 
As memórias usadas internamente nos microcontroladores, e conectadas aos microprocessadores são diferentes e apresentam utilidades específicas. Existem as memórias de dados, que podem ser voláteis ou não, e a memória de programa.
O Programa descarregado no microcontrolador Atmega328 vai para qual de suasmemórias internas?
Escolha uma:
a. Registradores de propósito geral. 
b. Memória FLASH. 
c. Memória EEPROM. 
d. Memória RAM. 
e. Memória Cache. 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
A linguagem de programação C é muito utilizada para desenvolvimento de programas embarcados, e conta com uma coleção de regras de sintaxe e de semântica, que devem ser conhecidas e utilizadas pelo programador para construir seus programas.
Considere um programa embarcado em linguagem C, desenvolvido para o microcontrolador ATmega328, onde um Led é acionado a cada iteração de acordo com o valor da variável unsigned char PortLed;. Por que o comando PortLed ^= 0xFF; pode ser usado para isso, invertendo o estado da variável, e consequentemente do Led?
Escolha uma:
a. Porque esse comando representa uma operação lógica AND, e a cada vez que ela é executada, o estado da variável/saída do Led é invertido. 
b. Esse comando é uma abreviação do comando de operação lógica de um único operador, onde o seu próximo valor será o resultado do valor atual com a operação XOR (ou exclusivo) com os bits 0b11111111. Essa operação lógica faz com que todos os bits da variável PortLed (e saída) sejam invertidos, independente dos seus estados. 
c. Na verdade, esse comando não é responsável por inverter o estado das variáveis, mas sim por acionar os seus bits, apenas. Dessa forma, esse comando está sempre acionando as saídas, ao invés de ligar uma vez, e desligar na próxima, assim sucessivamente. 
d. Porque esse é um comando especial para os microcontroladores da família AVR, e, Apesar de não ter nenhuma ligação com operações lógicas, é um comando responsável por inverter os estados da saída, também conhecido em inglês como toggle. 
e. Porque todas as vezes que uma porta configurada como saída digital recebe algum comando com o operador “^” os seus estados são automaticamente alternados para o outro valor binário, o que se mostra muito útil em alguns casos especiais. 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Todas as funções escritas na linguagem C devem sempre mostrar os tipos e nomes dos parâmetros de entrada e de saída, no momento da declaração e descrição, e os nomes na invocação. Exceto pelo último caso, mesmo quando não existe nenhum parâmetro de entrada ou de saída, este deve ser indicado pelo termo void.
Analisando os microcontroladores AVR programados em linguagem C, por que a função main nos programas feitos no AtmelStudio utiliza o retorno int ou invés de void, apesar de não retornar nada, e para nenhuma outra função ou sistema operacional?
Escolha uma:
a. Porque esse programa em específico retorna um valor inteiro para o compilador, no momento da compilação, indicado que o programa foi escrito corretamente e está pronto para ser descarregado no microcontrolador. 
b. Na verdade, esse retorno não é necessário, funciona apenas para aumentar a legibilidade do programa, mas pode ser omitido sem nenhum problema. 
c. Porque a Atmel, para o AtmelStudio, escolheu utilizar o padrão universal para a linguagem C, onde a main retorna um valor para o sistema operacional. Como feitos nos computadores, a empresa resolveu manter esse padrão, mesmo sem utilizar o comando de retorno return XX; ao final da função main, o que não seria nunca executado por causa do loop infinito. 
d. O termo int mostra que o tipo de variável mais complexo que será usado pelo programa será o inteiro. Assim, o programa pode manipular dados char sem problemas. No entanto, se o programa manipular dados do tipo flutuante, o termo int deve ser substituído por float. 
e. Porque todos os programas embarcados são obrigados a manipular pelo menos uma variável do tipo inteiro, primordial para os processos. 
U2 - Avaliação da Unidade
Existe uma discussão clássica entre os programadores que é qual é o melhor microcontrolador para se fazer projetos (dentro de uma mesma classe: 8-bit, 16-bit, etc.). A resposta para essa questão é muito subjetiva, pois cada modelo carrega as características da sua família, e do fabricante, compilador, etc. Podemos afirmar que, atualmente, existem algumas poucas empresas que fabricam microcontroladores no mundo (apesar de bem mais que alguns séculos atrás), e todo o desenvolvedor deve escolher um modelo para o seu projeto, e consequentemente toda a estrutura necessária para desenvolver (compilador, ambiente de desenvolvimento, gravador, placa, etc.). Além disso, existe um modelo em específico que se tornou o mais popular mundialmente, presente na grande maioria dos cursos de microcontroladores.
A empresa chamada _____ é a desenvolvedora do aplicativo _______ para programação de microcontroladores _____ , além de ser a própria fabricante do ________. No Windows, o aplicativo utiliza o programa _____, produzido por terceiros, e utilizado no pacote original de instalação do programa/ambiente de trabalho _____ para transferir o código compilado para o chip, através de um(a) ____. Esse microcontrolador está presente na placa de desenvolvimento mais popular do mundo atualmente, o(a) ______
Escolha uma:
a. Atmel / AtmelStudio / AVR / ATmega328 / AVRDude / Arduino IDE / Porta serial virtual via USB / Arduino UNO. 
b. Arduino / Arduino IDE / AVR / ATmega328 / PortCOM / AtmelStudio / Porta Ethernet / Arduino UNO. 
c. Atmega / Arduino IDE / avançados / AVR / AVRDude / Arduino IDE / Porta serial virtual via USB / Arduino UNO. 
d. Atmel / AtmelStudio / AVR / Arduino / Arduino IDE / AVRDude / Porta serial virtual via USB / Arduino DUE. 
e. Atmel / AtmelStudio / Arduino / Arduino UNO / AVRDude / AtmelStudio / Interface HDMI / Raspberry Pi . 
Questão 2
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Na programação em linguagem C, é muito importante que o desenvolvedor tenha atenção quando utilizar ponteiro para acessar a memória, pois esse ponto é a fonte de muitos erros de projeto. No entanto, a maioria não são erros de compilação, mas que aparecem durante a execução do sistema, quando áreas impróprias da memória são invadidas e escritas de maneira indevida e não premeditada. Isso pode se mostrar perigoso, principalmente em situações de controle crítico, como um aparelho hospitalar, por exemplo. Por isso, é importante também saber como os ponteiros se comportam e como podem ser usados pelo programador para trazer seus devidos benefícios, apenas.
Observe o programa na imagem seguinte, escrito para ser compilado, transferido e executado pelo ATmega328. Podemos observar que o programa não possui um propósito de aplicação, é apenas demonstrativo. Considerando que os valores que aparecem na memória de dados se referem ao instante em que a execução do programa atinge o fim da última instrução da função 1, qual das alternativas pode ser considerada falsa?
Figura – Programa exemplo com ponteiros e valores na memória RAM
Fonte: Elaborada pelo autor
Escolha uma:
a. O último comando da função auxiliar é basicamente o inverso do comando anterior (Var2 = Var1;), pois o comando *PontDatF1 = Var2; pode ser substituído pelo comando Var1 = Var2;, que o efeito será o mesmo. Isso ocorre devido ao ponteiro local PontDatF1 receber o valor &Var1 (variável global) quando a função foi invocada, ou seja, apontar para esta variável a partir disso. 
b. Quando a função Funcao1 é invocada, o argumento/parâmetro de entrada usado é um unsigned int, apesar do seu tipo esperado ser um ponteiro para unsigned int. No entanto, na forma em que está escrito, não há nada de errado, uma vez que o valor transferido é o endereço da variável, e não seu conteúdo, o que é compatível. Basicamente, Funcao1(&Var1); gera o mesmo resultado que PontMain = &Var1; Funcao1(PontMain);. 
c. Na forma com que aparece não irá ter problema ao compilar (em parte dos compiladores), pois o compilador realizará um typecasting, ou conversão de tipos, automaticamente, e o valor a ser transferido para o ponteiro não será o endereço de Var1, mas seu conteúdo, diferente do que aparece na memória parao PontMain. 
d. A atribuição da variável Var1 para o ponteiro PontMain não está com a sintaxe correta, pois são tipos diferentes. A primeira é do tipo unsigned int e a segunda é do tipo ponteiro para unsigned int. Pelo contexto, o esperado era o comando PontMain = &Var1;, e em seguida Funcao1(PontMain);, para justificar a existência do ponteiro. 
e. Apesar do programa não ter nenhum objetivo de controle, e de algumas variáveis se mostrarem desnecessárias, pois apenas recebem um valor para em seguida repassa-lo adiante sem nenhuma alteração, o programa se mostra isente de qualquer incoerência de sintaxe; e os valores na memória estão corretos, de acordo com o esperado. 
Questão 3
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Com a modernização e disseminação dos sistemas embarcados, podemos observar que muitos aparelhos que não possuíam “inteligência” (processamento), passaram a adotar essa qualidade, e foi possível a criação de inúmeros outros aparelhos, para as mais diversas aplicações. Até mesmos crianças e adolescentes já são apresentados para a parte de criação de sistemas computacionais nos grupos e torneios de robótica, além dos brinquedos e cursos educativos. No entanto, para cada tipo de abordagem no desenvolvimento, é necessário utilizar um conjunto de padrões, (linguagem, ambiente de desenvolvimento, acesso ao hardware, registradores do modelo, etc.) específico àquela forma de desenvolvimento. Isso envolve a utilização de plataformas de hardware e software já pronas e disponíveis, que podem ser associadas para prover uma solução.
A respeito do programa/aplicativo para desenvolvimento de códigos para sistemas embarcados AtmelStudio, considere as seguintes afirmações:
I – Não é possível transferir o código compilado direto para a placa Arduino, pois essa não é uma funcionalidade do Atmelstudio, mesmo com a adição de plugins, que são programas auxiliares anexados ao aplicativo. No Windows, é necessário que se abra um outro aplicativo, como o Arduino IDE, para então fazer o download do código para a placa.
II - Devido ao fato do loop infinito estar presente em todos os códigos embarcados, não é necessária a sua escrita no programa (while(TRUE){), nem a definição #define TRUE 1 (se for utilizado), pois tudo isso é feito automaticamente pelo compilador.
III – É possível usar funções de delay já prontas, sendo necessário apenas incluir o arquivo #include <util/delay.h> , depois de definir a constante que expressa a frequência do relógio que será usada pela CPU para executar o programa #define F_CPU 16000000UL. 
IV – Apesar de usar como base as linguagens Assembly, C e C++, o AtmelStudio criou e usa suas linguagens próprias, com regras particulares, não encontradas nas linguagens origens. Isso pode ser verificado com a incorporação e a utilização dos termos presentes em #include <avr/io.h>.
V – Todos as funções que compõe o programa de um projeto devem estar em um único arquivo no AtmelStudio, que não admite separação em arquivos na sua forma padrão de instalação.
Considerando a veracidade das afirmativas, quais das alternativas representa a sequência correta?
Escolha uma:
a. F, V, F, F, V 
b. F, F, V, F, F 
c. V, V, F, V, F 
d. F, V, F, V, F 
e. V, F, V, V, F 
Questão 4
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Apesar da linguagem de programação para Assembly não ser amplamente utilizada nos desenvolvimentos de programas embarcados nos dias atuais, é muito importante que programadores dessa área a conheçam minimamente. Mesmo que utilizem linguagens de mais alto nível, o conhecimento básico sobre como são as instruções e o funcionamento interno do núcleo e memórias se mostra relevante quando se constrói projetos mais complexos, e erros complicados aparecem, como sempre ocorre. Nessas ocasiões, é necessário depurar (ou “debugar”, como também se diz) o sistema em camadas mais baixas para encontrar as anomalias que causam as falhas de comportamento.
A respeito da programação de microcontroladores, mais precisamente o ATmega328 nas linguagens C e Assembly, analise na imagem seguinte os dois trechos de programa:
Figura – Trechos de programa em linguagens Assembly e C.
Fonte: Elaborada pelo autor
A partir dessa análise, considere as seguintes frases:
I – Os dois trechos de programa são equivalentes, mas ambos precisam de algumas alterações de sintaxe para se tornarem compiláveis, considerando a parte mostrada.
II – No programa em Assembly, a diretiva do arquivo include está escrito na forma correta. No programa em C, o include não deveria estar escrito como aparece, mas sim na forma #include <avr/io.h>.
III – No programa em Assembly, as instruções para carregar os registradores de uso geral a partir de constantes estão trocadas com as instruções de carregá-los a partir de variáveis na memória. Uma deveria ter sido usada no lugar da outra
IV – As variáveis declaradas no programa em Assembly estão reservadas em uma área impropria da memória de dados, pois a região reservada para os dados voláteis do usuário começa a partir do endereço de memória 0x0100.
V – No programa em C não está faltando o indicador de separação de comandos “;”, na declaração das variáveis e nos 3 comandos que aparecem, pois o seu uso não é obrigatório para a compilação. Os comentários no programa em C estão escritos indevidamente, uma vez que a única forma correta é /* comentário */.
VI – As atribuições em linguagem C são feitas somente com o símbolo de igual, a forma em que aparece está errada e deve ser usada somente para construir condições lógicas nos comandos de controle.
Algumas dessas afirmativas são verdadeiras e outras não. Qual das alternativas seguintes representa a ordem correta?
Escolha uma:
a. V, V, V, V, F, V 
b. V, V, F, F, V, F 
c. V, F, V, F, F, V 
d. V, V, F, V, V, F 
e. F, V, V, F, V, V 
Questão 5
Correto
Atingiu 1,00 de 1,00
Marcar questão
Texto da questão
Apesar de não ser em todos os casos, em muito deles os sistemas embarcados devem controlar saídas em tempo real. Esse tipo de aplicação abrange um outro conceito e padrões para se criar algoritmos, não utilizados/necessários para outros tipos de projetos, como programar o perfil de uma página da internet, por exemplo. Os temporizadores são periféricos internos aos microcontroladores ideais para prover referência precisa de tempo, no entanto estes podem ser associadas a técnicas clássicas de sincronismo de tarefas, como o uso de contadores. Muitos programadores já utilizaram contadores para sincronizar seus sistemas embarcados, e, apesar de aparentemente simples, essa técnica antiga se mostra poderosa e eficiente.
Considere o seguinte problema para sistemas embarcados: Deseja-se construir um projeto eletrônico com um botão e dois leds, onde o led1 deve permanecer piscando em 2 Hz e o led2 que fica apagado, deve acender durante 2 segundos, somente se o botão for pressionado. Como o algoritmo pode ser construído para controlar o sistema de forma efetiva, considerando apenas o uso de rotinas de delay, sem temporizadores, e que o acionamento do botão dura no mínimo 30 ms?
Escolha uma:
a. Deve ser usado um loop infinito com um único comando de delay, de 50 ms, um valor logo acima dos 30 ms do acionamento do botão, para garantir que o botão não seja interpretado duplamente. Os tratamentos dos leds podem ser feitos através de um contador, usado para contar para o led1 quando o botão não for pressionado, e depois para contar o tempo do led2 quando o botão for acionado. 
b. Deve ser usado uma máquina de estados binária, através de uma variável booleana. Quando o programa atua no primeiro estado, o led1 é acionado/invertido entre intervalos de 250 ms, sempre checando o botão. Quando este é acionado, o sistema entra no segundo estado acionando o led2 com um delay de 2 segundos. 
c. Usa-se uma função auxiliar para acionar o led2 por 2 segundos (_delay_ms(2000);) quando o botão for acionado, e a função principal deve manter o led1 piscando em 2Hz (_delay_ms(250);) 
d. Pode-se afirmarque não há nenhuma forma de se criar um sincronismo que cumpra, mesmo que de uma forma aproximada, as exigências impostas pelo problema, usando apenas rotinas de delay. Para sincronismo múltiplo, como é o caso, deve-se usar temporizadores, exclusivamente. 
e. O loop infinito pode ter apenas um único comando de delay, de menos de 30 ms, como 25 ms, para não haver a chance de um pressionamento não ser percebido. Os leds devem ser controlados a partir então de contadores, um para cada led. O contador CNT1 pode ser decrementado a cada loop, enquanto não atinge o zero. Quando ocorre, o programa deve inverter o led1 e carregar o CNT1 com o valor 10, mantendo-se assim. Paralelamente, o botão deve ser verificado a cada iteração, caso o CNT2 esteja nulo. Caso o botão seja acionado, o led2 é ligado e o CNT2 deve ser carregado com 80, e decrementado a cada próxima iteração. Quando o CNT2 zerar, o led2 deve ser desligado, e está pronto para um novo acionamento.

Outros materiais