A biblioteca Decabot trata a memória do seu robô de uma forma especial. Toda a memória é tratada como uma longa e única sequência de bytes a serem acessados e gravados, não importa se seja RAM, EEPROM ou mesmo ROM. Ou seja, seu Decabot é uma máquina de turing, trabalhando por cima de uma longa memória, indo para frente e para trás!

Ao fazer o dump da memória do Decabot (comando m no Monitor Serial do Arduino) podemos entender melhor essa estrutura:

A figura acima mostra o resultado do dump da memória. Cada linha é chamada de bloco de memória, e possui 64 bytes, divididos em 4 blocos de 16 bytes.

A memória RAM compreende os dois primeiros blocos (ou seja, possui 128 bytes de espaço). Ao ler programas via RFID ou digitar Code Dominó no terminal serial, os programas são gravados na RAM. Estes dois blocos de memória são apagados se o robô reiniciar ou for desligado.

A EEPROM tem várias divisões. A primeira delas são os 10 blocos de memória ROM, numerados de 0 a 9. Cada um conta com 64 bytes de espaço, e estão já preenchidos com caracteres ‘O‘ (fim de programa).

O bloco de memória 10 tem o nome especial setup, e seu conteúdo é executado assim que o Decabot faz seu boot (é iniciado). É similar à função void setup() do Arduino.

Os blocos 11 a 13 são os blocos de loop: Seu conteúdo é executado de tempos em tempos. Assim, se uma instrução de piscar os olhos do rosto do robô for gravada na memória 11, o robô Decabot vai naturalmente piscar os olhos de 5 em 5 segundos (tempo padrão de loop da memória 11). Os tempos padrões das memórias de loop são:

Os tempos de loop podem ser alterados na biblioteca Decabot, arquivo decabot.h, variáveis loopOneTime, loopTwoTime, e loopThreeTime.

Os dois últimos blocos de memória (14 e 15) tem o nome ROBOT, e não devem ser usados pelo usuário. São neles que são gravados dados sobre o robô, como nome, e-mail do dono, e dados de segurança e configuração.

Na imagem acima vemos dois programas carregados na memória do Decabot. O programa quadrado está gravado na memória RAM, ocupando os 16 primeiros caracteres. Este programa se apagará caso a placa Arduino seja reiniciada. Já o programa círculo está gravado no bloco de memória ROM5, ocupando 19 caracteres da memória. Ele não será apagado caso a placa Arduino seja reiniciada.