Autor Tema: GCC ARM Embedded Toolchain en Ubuntu y algo extra  (Leído 2777 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 257
GCC ARM Embedded Toolchain en Ubuntu y algo extra
« en: 30 de Agosto de 2016, 23:11:18 »
Instalando la última versión del compilador

Código: [Seleccionar]
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-embedded

Código: [Seleccionar]
$ arm-none-eabi-
arm-none-eabi-addr2line   arm-none-eabi-elfedit     arm-none-eabi-gcc-ranlib  arm-none-eabi-ld.bfd      arm-none-eabi-size
arm-none-eabi-ar          arm-none-eabi-g++         arm-none-eabi-gcov        arm-none-eabi-nm          arm-none-eabi-strings
arm-none-eabi-as          arm-none-eabi-gcc         arm-none-eabi-gcov-tool   arm-none-eabi-objcopy     arm-none-eabi-strip
arm-none-eabi-c++         arm-none-eabi-gcc-5.4.1   arm-none-eabi-gdb         arm-none-eabi-objdump     
arm-none-eabi-c++filt     arm-none-eabi-gcc-ar      arm-none-eabi-gprof       arm-none-eabi-ranlib     
arm-none-eabi-cpp         arm-none-eabi-gcc-nm      arm-none-eabi-ld          arm-none-eabi-readelf

En este momento la versión es la 5.4.1

Código: [Seleccionar]
$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/bin/../lib/gcc/arm-none-eabi/5.4.1/lto-wrapper
Target: arm-none-eabi
Configured with: /build/gcc-arm-none-eabi-6L5Vno/gcc-arm-none-eabi-5-2016q2/src/gcc/configure --target=arm-none-eabi --prefix=/build/gcc-arm-none-eabi-6L5Vno/gcc-arm-none-eabi-5-2016q2/install-native --libexecdir=/build/gcc-arm-none-eabi-6L5Vno/gcc-arm-none-eabi-5-2016q2/install-native/lib --infodir=/build/gcc-arm-none-eabi-6L5Vno/gcc-arm-none-eabi-5-2016q2/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/build/gcc-arm-none-eabi-6L5Vno/gcc-arm-none-eabi-5-2016q2/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/build/gcc-arm-none-eabi-6L5Vno/gcc-arm-none-eabi-5-2016q2/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/build/gcc-arm-none-eabi-6L5Vno/gcc-arm-none-eabi-5-2016q2/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/build/gcc-arm-none-eabi-6L5Vno/gcc-arm-none-eabi-5-2016q2/install-native/arm-none-eabi --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Tools for ARM Embedded Processors' --with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r,armv8-m.base,armv8-m.main
Thread model: single
gcc version 5.4.1 20160609 (release) [ARM/embedded-5-branch revision 237715] (GNU Tools for ARM Embedded Processors)

De esta forma pueden compilar para todos los fabricantes de ARM, aunque sólo he probado para TI, ST, Nordic (nrf51822) y ATMEL (sólo compilando ejemplos que vienen en el SDK - xdk-asf-3.31.0).

Y aquí viene el extra:

¿Cómo programar con Pascal tus ARM Cortex M?

La respuesta es ..... con freepascal.
Nota:Lo pongo en el mismo hilo porque están ligados, ya que se necesita el arm-non-eabi- para usarlo con freepascal

http://wiki.freepascal.org/TARGET_Embedded
http://j-software.dk/stm32f103.php

También cuenta con soporte para los pic32mx y pic32mz
http://wiki.freepascal.org/TARGET_Embedded_Mipsel

Según la wiki de freepascal tienen un limitado soporte de microcontroladores de NXP LPC, ATMEL AT91, TI Stellares y STM32F10x.

Nota de Freepascal: "Todavía esta en desarrollo"

El primer paso es descargar la última versión de freepascal de

https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20amd64%20DEB/Lazarus%201.6/ para x86_64

o

https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20i386%20DEB/Lazarus%201.6/ para x86 (i386)

Los archivos a descargar son el fpc y el fpc-src, pero si quieren tener el IDE Lazarus para programar aplicaciones al estilo Delphi descargan lazarus.

Cuando terminen la descarga abren una terminal en el directorio donde fueron descargados los archivos .deb. Estando en ese directorio ejecutan

Código: [Seleccionar]
sudo dpkg -i *.deb

Ya instalado vamos a crear dos carpetas

 
Código: [Seleccionar]
mkdir ~/lab
 

En seguida en cualquier otro directorio descargamos la rama trunk de freepascal

Código: [Seleccionar]
svn co http://svn.freepascal.org/svn/fpc/trunk fpc

y compilamos

Código: [Seleccionar]
cd fpc
make clean buildbase installbase CROSSINSTALL=1 CROSSOPT="-XParm-none-eabi-"  OS_TARGET=embedded CPU_TARGET=arm SUBARCH=armv7m INSTALL_PREFIX=~/lab

Esto les va a crear una serie de directorios dentro de la carpeta ~/lab que fue creada con anterioridad

Código: [Seleccionar]
.
├── bin
└── lib
    └── fpc
        ├── 3.0.0
        └── 3.1.1
            ├── ppcrossarm
            └── units
                └── arm-embedded
                    └── rtl

ppcrossarm es nuestro compilador. Creamos un enlace simbólico en la carpeta bin que se encuentra dentro de ~/lab/bin

Código: [Seleccionar]
ln -s ~/lab/lib/fpc/3.1.1/ppcrossarm ~/lab/bin/ppcrossarm

Para poder compilar lo más sencillo es crear otro enlace simbólico de la carpeta lib/fpc/3.1.1 a la ruta donde freepascal busca por defecto las unidades.

Código: [Seleccionar]
cd /usr/lib/fpc
sudo ln -s /home/<su_home>/lab/lib/fpc/3.1.1 3.1.1

en mi caso la última línea es

Código: [Seleccionar]
sudo ln -s /home/alex/lab/lib/fpc/3.1.1 3.1.1

Para realizar la prueba tomé prestado
* Archivos.zip
(31.12 kB - descargado 155 veces)
el test.pas de http://j-software.dk/stm32f103.php y el stm32f103fw.pas de
https://github.com/Turro75/stm32lazarustemplate/blob/master/stm32f103fw.pas   (mas de 5000 líneas de código)

Después de unos ligeros cambios a stm32f103fw.pas para que compilara, removí la interfaz Serie de test.pas y dejé un sólo LED parpadeando.

Código: [Seleccionar]
program test;

uses stm32f103fw;

procedure RCC_Configure;
begin
   RCC_DeInit;
   
   RCC_HSEConfig(RCC_HSE_ON);
   
   // Wait till HSE is ready
   if RCC_WaitForHSEStartUp then
   begin
      // Enable Prefetch Buffer
      FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

      // Flash 2 wait state
      FLASH_SetLatency(FLASH_Latency_2);

      // HCLK = SYSCLK
      RCC_HCLKConfig(RCC_SYSCLK_Div1);

      // PCLK2 = HCLK
      RCC_PCLK2Config(RCC_HCLK_Div1);

      // PCLK1 = HCLK/2
      RCC_PCLK1Config(RCC_HCLK_Div2);

      // PLLCLK = 8MHz * 9 = 72 MHz
      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

      // Enable PLL 
      RCC_PLLCmd(Enabled);

      // Wait till PLL is ready
      while RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RCC_RESET do;

      // Select PLL as system clock source
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

      // Wait till PLL is used as system clock source
      while RCC_GetSYSCLKSource() <> $08 do;
   end;
end;

procedure delay;
var i: longint;
begin
   for i := 0 to 50000*9 do;
end;

var GPIO_InitStructure: TGPIO_InitTypeDef;
begin
   RCC_Configure;
   
   // Enable clocks
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLED);
   
   GPIO_InitStructure.GPIO_Pin := GPIO_Pin_9;
   GPIO_InitStructure.GPIO_Speed := GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode := GPIO_Mode_Out_PP;
   GPIO_Init(PortB, GPIO_InitStructure);
   
   while true do
   begin
      GPIO_SetBits(PortB, GPIO_Pin_9);
      delay;
      GPIO_ResetBits(PortB, GPIO_Pin_9);
      delay;   
   end;
end.

Para compilar el proyecto

Código: [Seleccionar]
~/lab/bin/ppcarm -Parm -Tembedded -Cparmv7m -Wpstm32f103x8 -XParm-none-eabi-  -OoNOSTACKFRAME hello.pas

Y si todo ha ido bien veremos en la salida
Código: [Seleccionar]
Free Pascal Compiler version 3.1.1 [2016/06/27] for arm
Copyright (c) 1993-2016 by Florian Klaempfl and others
Target OS: Embedded
Compiling hello.pas
Assembling test
Linking hello
STM32F10X_MD
71 lines compiled, 0.1 sec, 2844 bytes code, 89 bytes data

* Archivos.zip
(31.12 kB - descargado 155 veces)

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:GCC ARM Embedded Toolchain en Ubuntu y algo extra
« Respuesta #1 en: 11 de Octubre de 2016, 18:51:52 »
Hola amigo.
Muchas gracias por tu buen apoyo con este tutorial.
 Veo que tienes experiencia con esta clase de procesadores. Cuál es la ventaja de trabajar con estos procesadores comparado con Arduino y los PIC?.
Me pica la curiosidad saber un poco de esta familia..

Gracias.

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 257
Re:GCC ARM Embedded Toolchain en Ubuntu y algo extra
« Respuesta #2 en: 13 de Octubre de 2016, 13:43:37 »
Arduino en si es una plataforma completa que cuenta MCU de 8 bits hasta 32 bits. Tiene módulos y librerías para casi todo, por lo que es más como Plug&Play. El IDE esta, en sí, algo limitado, y no hay un ruta directa entre saber manejar el arduino a saber manejar el Microcontrolador que esta en sus entrañas.

Con respecto de los PICs y los ARM, prefiero entender los requerimientos del proyecto para elegir el MCU que más se adapte, aunque una de las ventajas que tienen los ARM son las herramientas disponibles, pero entra más en el mundo de lo subjetivo ya que el tener todas esas herramientas no implica que la arquitectura sea superior en absolutamente todos los aspectos.

Otra cosa es que puedes usar el mismo compilador para todos los fabricantes, así que si estas usando, por ejemplo, el gcc para programar un ARM Cortex M0 de ST, al rato puedes compilar para el nrf51822 de Nordic y para finalizar compilar para Raspberry Pi usando las mismas herramientas.

http://www.valvers.com/open-software/raspberry-pi/step01-bare-metal-programming-in-cpt1/

En cambio para los PICs tienes el xc8, xc16, xc32. Esto no implica que sea malo, si no que implica que para moverte de 8 bits a 16 bits o de 8 o 16 bits a 32 bits tienes que aprender a usar un nuevo conjunto de herramientas y librerías.
 
Si hiciste bien el trabajo, por ejemplo usando CMSIS, puedes mover el código de un M0 a un M3/M4/M7 sin mucho esfuerzo, incluso entre fabricantes.

También encuentras gran variedad de tarjetas de desarrollo y a precios muy accesibles y que en su mayoría incluyen el programador/debugger. Para los PICs tan sólo el Pickit 3 cuesta 47.95 USD, con los nucleo te llevas en el mismo paquete el st-link v2 y la tarjeta de desarrollo. Los nucleos F429ZI (M4), F746ZG (M7) y F767ZI (M7) cuestan 23 USD.

Saludos

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:GCC ARM Embedded Toolchain en Ubuntu y algo extra
« Respuesta #3 en: 19 de Octubre de 2016, 16:42:44 »
Muchas gracias por tu explicación, cuando tenga la oportunidad de tener algo de esta familia entre manos por aca me verás...gracias.

Saludos.

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 160
Re:GCC ARM Embedded Toolchain en Ubuntu y algo extra
« Respuesta #4 en: 25 de Octubre de 2016, 19:25:02 »
Hola tsk,
Sabes de casualidad si esta disponible, y en caso de que si lo este, como instalar arm-none-eabi-gdb-py con la versión actual del toolchain (la del PPA)?

Lo tengo disponible pero en la version 4.9 del toolchain:
Código: [Seleccionar]
$/usr/local/gcc-arm-none-eabi-4_9/bin/arm-none-eabi-gdb-py --version
GNU gdb (GNU Tools for ARM Embedded Processors) 7.8.0.20150604-cvs
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.

Saludos

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re:GCC ARM Embedded Toolchain en Ubuntu y algo extra
« Respuesta #5 en: 23 de Noviembre de 2016, 09:53:21 »
Hola , y perdón por desviar el hilo un momento,  de casualidad has compilado para el nRF51822 BLE multilink Central ?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA


 

anything