Dando sequência à série de artigos que visa auxiliar no desenvolvimento de produtos que façam uso de multicores assimétricos, baseado no computador em módulo Colibri VF61 (Freescale® Vybrid), este capítulo apresenta o processo de geração do firmware para gravação do seu core ARM Cortex-M4.
Baixando a ToolChain
Para compilar o firmware para o M4, usamos outra toolchain. Baixe a toolchain na pasta indicada executando os comandos:
mkdir /home/usuario/curso/ecos_toolchain cd /home/usuario/curso/ecos_toolchain wget ftp://ftp.gwdg.de/pub/misc/sources.redhat.com/ecos/gnutools/i386linux/test/ecos-gnutools-arm-eabi-20120623.i386linux.tar.bz2 tar xjvf ecos-gnutools-arm-eabi-20120623.i386linux.tar.bz2
Criando o Projeto
O projeto para o Cortex-M4, será baseado em um “makefile” próprio. Para criar o projeto, na aba Project Explorer, aperte botão direito e selecione:
New > C Project
Em seguida uma janela com os tipos de projetos irá abrir. Selecione “Makefile Project” > “Other Toolchain”.
Com o projeto criado, clique com o botão direito no projeto e crie 3 arquivos“HelloWorld_M4.c”, “HelloWorld_M4.h” e “makefile”.
New > File
Acrescente o conteúdo de cada arquivo:
HelloWorld_M4.c
/*
* HelloWorld_M4.c
*
* (c) 2015 Toradex AG
*/
#include <stdlib.h>
#include <cyg/hal/hal_intr.h>
#include <cyg/hal/hal_if.h>
#include <math.h>
#include "HelloWorld_M4.h"
#define CYGHWR_HAL_VYBRID_PORT_ALT_GPIO 0
#define CYGHWR_HAL_VYBRID_PORT_INPUT 0x21
#define CYGHWR_HAL_VYBRID_PORT_OUTPUT 0x22
// PTB19 => GPIO 41 => SO-DIMM 45 => Viola X9, Pin 16
// SODIMM GPIO PORT IRIS X16
// BOTAO1 98 46 PORTC_1 13
// BOTAO2 133 88 PORTD_9 14
// BOTAP3 103 48 PORTC_3 15
// LED1 101 47 PORTC_2 16
// LED2 97 50 PORTC_5 17
// LED3 85 53 PORTC_8 18
#define BOTAO1 CYGHWR_HAL_VYBRID_PIN(C, 1, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_INPUT)
#define BOTAO2 CYGHWR_HAL_VYBRID_PIN(D, 9, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_INPUT)
#define BOTAO3 CYGHWR_HAL_VYBRID_PIN(C, 3, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_INPUT)
#define LED1 CYGHWR_HAL_VYBRID_PIN(C, 2, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_OUTPUT)
#define LED2 CYGHWR_HAL_VYBRID_PIN(C, 5, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_OUTPUT)
#define LED3 CYGHWR_HAL_VYBRID_PIN(C, 8, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_OUTPUT)
// PTB19 => GPIO 41 => SO-DIMM 45 => Viola X9, Pin 16
#define PUL_PWM CYGHWR_HAL_VYBRID_PIN(B, 19, CYGHWR_HAL_VYBRID_PORT_ALT_GPIO, CYGHWR_HAL_VYBRID_PORT_OUTPUT)
//Control variables
//Main Thread
int main(int argc, char **argv)
{
diag_printf("----------------------\n");
diag_printf(" eCos servo drive demo\n");
diag_printf("----------------------\n");
// Initialize GPIO
hal_set_pin_function(LED2);
while (true)
{
hal_gpio_set_pin(LED2);
cyg_thread_delay(500);
hal_gpio_clear_pin(LED2);
cyg_thread_delay(500);
}
}
HelloWorld_M4.h
/* * HelloWorld_M4.h * * (c) 2015 Toradex AG */ #include <stdio.h> #include <unistd.h> #include <cyg/infra/cyg_type.h> #include <cyg/infra/diag.h> #include <cyg/hal/hal_io.h> #include <cyg/hal/var_io.h> #include <cyg/hal/var_io_gpio.h> #include <cyg/io/io.h> #include <cyg/io/serialio.h> #include <cyg/hal/hal_intr.h> #include <cyg/hal/hal_if.h> #include <cyg/kernel/kapi.h> #ifndef HELLOWORLD_H_ #define HELLOWORLD_H_ #define MCC_NODE_A5 (0) #define MCC_NODE_M4 (0) #define MCC_SENDER_PORT (1) #define MCC_RESPONDER_PORT (2) void thread_mcc_fn(void); #endif /* HELLOWORLD_H_ */
Makefile
all: HelloWorld_M4.c
~/curso/ecos_toolchain/gnutools/arm-eabi/bin/arm-eabi-gcc -g -I./ -g -I./build-tree/install/include HelloWorld_M4.c -L./build-tree/install/lib -Ttarget.ld -Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Wno-write-strings -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-exceptions -nostdlib -mcpu=cortex-m4;
~/curso/ecos_toolchain/gnutools/arm-eabi/bin/arm-eabi-objcopy -O binary a.out HelloWorld_M4.bin
clean:
$(RM) HelloWorld_M4.bin a.out
Compilando o projeto
Antes de compilar o projeto, uma série de arquivos includes são necessários. Copie para dentro do projeto a pasta encontrada dentro da sua máquina virtual em:
cp /home/usuario/curso/ecos_toolchain/build-tree.tar.bz2 /home/usuario/curso/workspace/HelloWorld_M4/ cd /home/usuario/curso/workspace/HelloWorld_M4/ tar xjvf build-tree.tar.bz2
Agora podemos compilar os exemplos usando o comando CTRL + B. Ou por meio do menu:
Project > Clean... Project > Build All
Executando o Firmware no M4
Para executar o firware no M4, é necessário alterar uma configuração no uBoot. Uma vez alterada e salva, não é necessário realizar outra vez.
Pare o uBoot no ao ligar a placa apertando qualquer tecla no terminal nos primeiros 3 segundos e entre com os seguintes comandos:
Colibri VFxx # set memargs mem=240M Colibri VFxx # set fdt_high 0x88000000 Colibri VFxx # saveenv
Copie o firmware gerado para placa usando SSH:
scp /home/usuario/curso/workspace/HelloWorld_M4/HelloWorld.bin root@192.168.10.2:/home/root/
Para executar o Firmware no M4, acesse o terminal da placa, suba o módulo mcc e em seguida lance a aplicação:
modprobe mcc mqxboot /home/root/HelloWorld.bin 0x8f000400 0x0f000411









Check if you can download the zib bellow:
https://toradex-my.sharepoint.com/personal/raul_munoz_toradex_com/_layouts/15/guestaccess.aspx?guestaccesstoken=3H%2f3CiqqIjFoFkYlbb4971ujEMSjMA6PAh%2fN%2bEzYMW4%3d&docid=0bc49807e155a4cfb8666b90ddb2828cc
It worked ok, thank you very much!!
Hello! Thank you for sharing these great articles series!
I have trouble copying build-tree.tar.bz2 to my workspace… (cp /home/my_user/curso/ecos_toolchain/build-tree.tar.bz2 /home/my_user/curso/workspace/HelloWorld_M4/)
It seems that build-tree.tar.bz2 doesn’t exist in ecos_toolchain/ folder
¿Where can I download this file?
Thanks in advance!