Início > ports > Release candidate Port do BRTOS para PIC18 (considerações sobre a instalação de tarefas)

Release candidate Port do BRTOS para PIC18 (considerações sobre a instalação de tarefas)

Nos últimos dias testamos o port do BRTOS para PIC18 com o kit PICgenios da Microgenios (PIC18F4520). Notamos que nas tarefas que utilizavam as bibliotecas matemáticas ocorria perda de contexto. Fomos atrás do motivo e descobrimos que o compilador MCC18 (integrado ao MPLAB) alocava algumas variáveis globais para cálculos matemáticos e um espaço para variáveis temporárias, como apresentado abaixo:

MATH_DATA      udata   0x000000       data   0x000014
.tmpdata       udata   0x000014       data   0x000010

Salvamos estas variáveis no contexto e os problemas de perda de contexto acabaram. Agora estamos com o port para PIC18 em release candidate. Note que o port só é válido para o compilador MCC18 da Microchip.

Durante os testes notamos também que a organização da memória do PIC em bancos de 256 bytes demanda um cuidado adicional na instalação das tarefas. O stack virtual de nenhuma tarefa pode ficar entre 2 ou mais bancos. Portanto, a instalação das tarefas deve seguir uma ordem bem definida a fim de evitar tal situação. Vamos a um exemplo. No demo disponível para download o stack virtual do BRTOS foi alocado em:

DATABANK   NAME=stackram   START=0x200          END=0x47F

Ou seja, dois bancos de 256 bytes e outro meio banco de 128 bytes:

(0x200 a 0x2FF)    (0x300 a 0x3FF)    (0x400 a 0x47F)

Para instalar as tarefas seguimos a seguinte ordem:

InstallTask(&System_Time,(const CHAR8 *)"System Time",90,6) 
InstallTask(&Task_2,(const CHAR8 *)"Tarefa Teste 1",83,4)
InstallTask(&Task_3,(const CHAR8 *)"Tarefa Teste 2",83,5)
InstallTask(&Task_Serial,(const CHAR8 *)"Tarefa Serial",128,2)
InstallTask(&Task_LCD,(const CHAR8 *)"Tarefa LCD",128,1)

Note que as primeiras 3 tarefas foram instaladas no primeiro banco de memória (90 + 83 + 83 = 256 bytes). As tarefas da serial e LCD compartilharam o segundo banco (128 + 128) e, a Idle Task (instalada pelo sistema com definição de tamanho no arquivo BRTOSConfig.h) foi definida para 128 bytes complementando a utilização do último banco. O tamanho do contexto do PIC18 ficou em 56 bytes. Desta forma, não recomendamos a utilização de stack de tarefas menores do que 64 bytes.

OBS.: O mesmo cuidado deve ser tomado durante a criação de filas do sistema, alocada no arquivo de linker como queueram.

 

Faça o download da versão Release Candidate no site oficial do projeto no Google Code:

http://code.google.com/p/brtos

 

Era isso pessoal. Até um próxima vez !!!!

 

Anúncios
Tags:, ,
  1. Rafael Dias
    25/02/2011 às 15:31

    Talvez essa informação seja completamente inútil, mas dependendo de como for a alocação de variáveis você pode usar um banco maior do que 256 bytes.

    O único cuidado é que o acesso à essa área de memória deve ser realizada por ponteiros.

    No capítilo 5.2 do manual [1] há um belo exemplo de uma rotina que utiliza um buffer de 384 bytes, o mesmo lança mãos de alterações no arquivo de link e em diretivas #pragma na declaração de variáveis.

    Ainda não olhei o Release Candidate, mas em um dos projetos em que utilizei o PIC18 acabei tendo que criar um buffer de 784 bytes. Depois que vi esse tópico em [1] os meus problemas acabaram.

    O fato da memória RAM na plataforma PIC ser segmentada dessa forma me trouxe alguns problemas no passado, e confesso, ainda traz alguns.

    —————-

    [1] MPLAB® C18 C Compiler User’s Guide
    http://ww1.microchip.com/downloads/en/DeviceDoc/C18_User_Guide_51288j.pdf

  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: