A abordagem do
ESCoRT
para obter um
bom nível de portabilidade é manter ao máximo o software modularizado,
de forma
que os módulos que interagem com o hardware possuam interfaces
bem definidas, e
qualquer alteração na plataforma de hardware só necessita
modificar estes
módulos. Outro fato é que, no campo de software embarcado,
uma das grandes
barreiras para a portabilidade e reuso dos códigos são
os diversos compiladores
existentes frequentemente apresentarem divergência
em alguns pontos da sintaxe.
A fim de atacar este problema, a metodologia
do
ESCoRT
contempla uma
forma de abstrair qual o compilador utilizado no projeto por
meio de uma
interface padronizada. Isso não quer dizer que todos os componentes
implementados
com o
ESCoRT
sejam independentes do compilador. Entretanto,
o código é organizado de forma
a isolar toda implementação específica de um
determinado compilador, abstraindo
esta dependência dos outros componentes.
Além do uso de interfaces padronizadas, o seccionamento do código segundo a sua função dentro dos sistemas embarcados também tem uma participação fundamental na forma como o ESCoRT lida com os problemas de portabilidade e reuso, mencionados acima. Separar fluxo de controle do fluxo de dados mostrou-se essencial para alcançar um alto grau de reuso.
A arquitetura que apoia o ESCoRT utiliza o padrão de projetos Layered Pattern , organizando o software embarcado em camadas. O foco principal da arquitetura é promover a portabilidade, dividindo os componentes de acordo com sua função na plataforma embarcada.
Um
driver
também pode fazer uso de outro
driver
, como é o caso do componente
atmel.memory.serialflash.driver.AT45DB
que utiliza um componente do tipo
escort.driver.ISPI
para acessar a interface SPI do chip de memória. Além disso, alguns componentes
Driver
necessitam de serviços do
kernel
para controlar a sincronização de
acesso aos dados. Por exemplo, o componente
freertos.driver.UARTDriver
utiliza o serviço de fila do componente
freertos.kernel.FreeRTOSKernel
para armazenar os
bytes
que são
recebidos pela interface da UART.
Os componentes desta camada utilizam os componentes da
camada
Driver
ou acessam diretamente
componentes da camada HAL. Este último caso pode ser
ilustrado por um serviço
de piscagem de LED, que precisa apenas ligar
e desligar um pino do processador.
Essa funcionalidade não requer a complexidade
de um
driver
para manipular o
status
de um pino, um componente do tipo
escort.hal.IGPIOPin
é suficiente para implementar este componente
Service.
Alguns serviços
precisam executar uma tarefa para prover a funcionalidade
a que se destinam. Um
exemplo é o componente
service.GPS,
que precisa ler as informações de posicionamento periodicamente enviadas
pelo
dispositivo de GPS e atualizar as variáveis de latitude e longitude
correntes.
Neste caso a tarefa criada pelo componente deve ser escalonada
junto com as
tarefas da aplicação.
Além do uso de interfaces padronizadas, o seccionamento do código segundo a sua função dentro dos sistemas embarcados também tem uma participação fundamental na forma como o ESCoRT lida com os problemas de portabilidade e reuso, mencionados acima. Separar fluxo de controle do fluxo de dados mostrou-se essencial para alcançar um alto grau de reuso.
A arquitetura que apoia o ESCoRT utiliza o padrão de projetos Layered Pattern , organizando o software embarcado em camadas. O foco principal da arquitetura é promover a portabilidade, dividindo os componentes de acordo com sua função na plataforma embarcada.
Nenhum comentário:
Postar um comentário