Nuttx 7.5 Realtime Operating System na STM32VLDiscovery, Tiva C, FRDM-KL25Z
O Nuttx (http://www.nuttx.org/) é um sistema operacional de tempo real que tem praticamente tudo que tem no Linux.
A grande vantagem é que cabe em microcontroladores de 8-bits até 32-bits, consumo de energia ultra-low-power.
Com o Nuttx instalado é possível usar a biblioteca pthread do praticamente do mesmo jeito do Linux, também dá para fazer scripts e gravar na própria flash do microcontrolador, tem Ramdisk, sistema de arquivos em rede (NFS), e drivers para zilhões de sensores, rádios e adaptadores de rede, ... é praticamente um PC com Linux só que ultra-low-power.
UPDATE: +Jeronimo Avelar Filho me reportou bugs no build pelo MacOSX. Faltou colocar neste post uma coisa em relação ao processo de compilação. Quando o Nuttx é configurado para uma placa cria vários links dentro do sistema de build, se mudar de configuração e tentar buildar denovo vai dar vários erros, antes de reconfigurar para outra placa é preciso fazer um "make distclean" para limpar completamente os resíduos da configuração anterior. Outra opção é fazer um git checkout para cada placa em diretórios diferentes.
Instalando na stm32vldiscovery
#baixar os fontes
git clone http://git.code.sf.net/p/nuttx/git
#entrar na pasta
cd git
#mudar para o código da tag 7.5
git checkout nuttx-7.5
#ir para pasta de ferramentas
cd nuttx/tools
#configurar para stm32vldiscovery
./configure.sh stm32f100rc_generic/nsh
# voltar para raiz do nuttx
cd ..
#para compilar o projeto da shell nsh para stm32vldiscovery
make
#para gravar o projeto na stm32vldiscovery (instale antes https://github.com/texane/stlink)
st-flash write nuttx.bin 0x8000000
#conecte um cabo usb-ttl (pl2303, ftdi, cp2301, ...) nos pinos PA2 e PA3
para ter acesso a console ao prompt do NSH, comandos de Linux como free, ps, df e vários outros estão disponíveis.
Foi necessário mudar algumas coisas no código para ajustar o tamanho da RAM.
Também dá para usar a STM32VLDiscovery para gravar outras placas STM32 por SWD, que faz o mesmo serviço de uma JTAG usando apenas 2 fios.
Instalando na FRDM-KL25Z
#baixar os fontes
git clone http://git.code.sf.net/p/nuttx/git
#entrar na pasta
cd git
#mudar para o código da tag 7.5
git checkout nuttx-7.5
#ir para pasta de ferramentas
cd nuttx/tools
#configurar para FRDM-KL25Z
./configure.sh freedom-kl25z/nsh
# voltar para raiz do nuttx
cd ..
#para compilar o projeto da shell nsh para FRDM-KL25Z
make
#instalar o firmware da OpenSDA da MBED
http://developer.mbed.org/handbook/Firmware-FRDM-KL25Z
Agora que a FRDM-KL25Z virou um pendrive MBED gravador de firmware basta arrastar o nuttx.bin para dentro.
Um outra vantagem do OpenSDA da MBED é que dá para acessar o NSH do Nuttx pela porta serial USB virtual da MBED, no caso do Linux é só abrir o minicom na /dev/ttyACM0
Não foi necessário modificar nada no código para funcionar de primeira.
Instalando na Tiva EK-TM4C123GXL e Stellaris EK-LM4F120XL
#baixar os fontes
git clone http://git.code.sf.net/p/nuttx/git
#entrar na pasta
cd git
#mudar para o código da tag 7.5
git checkout nuttx-7.5
#ir para pasta de ferramentas
cd nuttx/tools
#configurar para Tiva/Stellaris
./configure.sh tm4c123g-launchpad/nsh
# voltar para raiz do nuttx
cd ..
#para compilar o projeto da shell nsh para Tiva/Stellaris
make
#instale o lm4flash (https://github.com/utzig/lm4tools)
#programe a Tiva/Stellaris com o nuttx.bin
Foi necessários modificar o toolchain para compilar com o GNU Tools for ARM Embedded Processors (https://launchpad.net/gcc-arm-embedded), o STM32 e o FRDM-KL25 também usam esse mesmo toolchain. Também dá para usar outros toolchains ou criar o seu próprio.
Como considerações finais deste post, pode se dizer que instalando o Nuttx, não importa mais qual o microcontrolador usado, sempre haverá uma interface de programação praticamente igual ao Linux, e dezenas de drivers e bibliotecas prontas para uso.
A grande vantagem é que cabe em microcontroladores de 8-bits até 32-bits, consumo de energia ultra-low-power.
Com o Nuttx instalado é possível usar a biblioteca pthread do praticamente do mesmo jeito do Linux, também dá para fazer scripts e gravar na própria flash do microcontrolador, tem Ramdisk, sistema de arquivos em rede (NFS), e drivers para zilhões de sensores, rádios e adaptadores de rede, ... é praticamente um PC com Linux só que ultra-low-power.
UPDATE: +Jeronimo Avelar Filho me reportou bugs no build pelo MacOSX. Faltou colocar neste post uma coisa em relação ao processo de compilação. Quando o Nuttx é configurado para uma placa cria vários links dentro do sistema de build, se mudar de configuração e tentar buildar denovo vai dar vários erros, antes de reconfigurar para outra placa é preciso fazer um "make distclean" para limpar completamente os resíduos da configuração anterior. Outra opção é fazer um git checkout para cada placa em diretórios diferentes.
Instalando na stm32vldiscovery
#baixar os fontes
git clone http://git.code.sf.net/p/nuttx/git
#entrar na pasta
cd git
#mudar para o código da tag 7.5
git checkout nuttx-7.5
#ir para pasta de ferramentas
cd nuttx/tools
#configurar para stm32vldiscovery
./configure.sh stm32f100rc_generic/nsh
# voltar para raiz do nuttx
cd ..
#para compilar o projeto da shell nsh para stm32vldiscovery
make
#para gravar o projeto na stm32vldiscovery (instale antes https://github.com/texane/stlink)
st-flash write nuttx.bin 0x8000000
#conecte um cabo usb-ttl (pl2303, ftdi, cp2301, ...) nos pinos PA2 e PA3
para ter acesso a console ao prompt do NSH, comandos de Linux como free, ps, df e vários outros estão disponíveis.
Foi necessário mudar algumas coisas no código para ajustar o tamanho da RAM.
Também dá para usar a STM32VLDiscovery para gravar outras placas STM32 por SWD, que faz o mesmo serviço de uma JTAG usando apenas 2 fios.
Para ativar o SWD para um STM32 externo basta abrir os jumpers do CN3. E conectar o SWCLK e SWDIO no STM32 externo, o GND é mandatório sempre ligar, o VCC liga se precisa alimentar a placa externa. |
Instalando na FRDM-KL25Z
#baixar os fontes
git clone http://git.code.sf.net/p/nuttx/git
#entrar na pasta
cd git
#mudar para o código da tag 7.5
git checkout nuttx-7.5
#ir para pasta de ferramentas
cd nuttx/tools
#configurar para FRDM-KL25Z
./configure.sh freedom-kl25z/nsh
# voltar para raiz do nuttx
cd ..
#para compilar o projeto da shell nsh para FRDM-KL25Z
make
#instalar o firmware da OpenSDA da MBED
http://developer.mbed.org/handbook/Firmware-FRDM-KL25Z
Agora que a FRDM-KL25Z virou um pendrive MBED gravador de firmware basta arrastar o nuttx.bin para dentro.
Freescale FRDM KL25Z com ARM Cortex-M0 16KBytes RAM 128KBytes Usado de RAM pelo Nuttx.bin 6 KB e livre 10 KB para apps Usado de Flash pelo Nuttx.bin 38KB e livre 90KB para apps |
Não foi necessário modificar nada no código para funcionar de primeira.
Instalando na Tiva EK-TM4C123GXL e Stellaris EK-LM4F120XL
#baixar os fontes
git clone http://git.code.sf.net/p/nuttx/git
#entrar na pasta
cd git
#mudar para o código da tag 7.5
git checkout nuttx-7.5
#ir para pasta de ferramentas
cd nuttx/tools
#configurar para Tiva/Stellaris
./configure.sh tm4c123g-launchpad/nsh
# voltar para raiz do nuttx
cd ..
#para compilar o projeto da shell nsh para Tiva/Stellaris
make
#instale o lm4flash (https://github.com/utzig/lm4tools)
#programe a Tiva/Stellaris com o nuttx.bin
lm4flash nuttx.bin
Tiva C com ARM Cortex-M4F 32KB RAM 256KB Flash Usado de RAM pelo Nuttx.bin 10 KB e livre 22 KB para apps Usado de Flash pelo Nuttx.bin 52KB e livre 204 KB para apps |
No caso da Tiva/Stellaris já existe um conversor serial usb na placa, basta abrir o minicom na /dev/ttyACM0
Foi necessários modificar o toolchain para compilar com o GNU Tools for ARM Embedded Processors (https://launchpad.net/gcc-arm-embedded), o STM32 e o FRDM-KL25 também usam esse mesmo toolchain. Também dá para usar outros toolchains ou criar o seu próprio.
Como considerações finais deste post, pode se dizer que instalando o Nuttx, não importa mais qual o microcontrolador usado, sempre haverá uma interface de programação praticamente igual ao Linux, e dezenas de drivers e bibliotecas prontas para uso.