Autor Tema: FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!  (Leído 12023 veces)

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

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!
« en: 02 de Agosto de 2010, 12:47:54 »

Os pongo una pequeña explicación, a modo de resumen, sobre el como crear un proyecto de FreeRTOS y C18 en MPlab, en el ejemplo se aprovecha para hacer un Hola Mundo con un LCD 16x2. Son unas cuantas conclusiones extraídas del curso de FreeRTOS que estamos haciendo varios compañeros de este foro con nuestro profe Reinier ;) Así que un gran abrazo para él!

- En primer lugar, descargamos la última versión de MPlab, de C18 y de FreeRTOS, e instalamos MPlab y C18:
http://www.microchip.com/mplab/
http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_53.zip

http://www.microchip.com/c18/

http://sourceforge.net/projects/freertos/files/FreeRTOS/
http://downloads.sourceforge.net/project/freertos/FreeRTOS/V6.0.5/FreeRTOS%20V6.0.5.exe?use_mirror=switch&ts=1280746154

- Creamos una estructura de directorios de la siguiente forma (recomendada por Reinier):

  • C:\FreeRTOS (aquí estará el contenido del FreeRTOS V6.0.5)
  • L Prj
  •  L pic18
  •   L C03E03b (Aquí extraemos el contenido del 'C03E03b.rar' adjunto)

- Abrimos MPlab y pinchamos sobre 'project/new', le ponemos nombre al proyecto 'main' y seleccionamos la ruta anterior 'C:\FreeRTOS\Prj\pic18\C03E03b'.

- Seleccionamos ahora el micro a usar, para ello pinchamos sobre 'configure/select device', en la lista buscamos el PIC18F2550.

- Configuramos las rutas, para ello pinchamos sobre 'project/build options/project'. En la pestaña 'directories' seleccionamos 'library search path' de la lista desplegable. Añadimos la ruta del compilador C18, que es por defecto, 'C:\MCC18\lib'.

- A continuación seleccionamos 'include search path' de la lista desplegable. Añadimos los siguientes directorios:

  • 'C:\FreeRTOS\Source\portable\MPLAB\PIC18F'
  • 'C:\FreeRTOS\Source\include'

- En la pestaña 'MPASM/C17/C18 Suite' seleccionamos 'extended mode'

- En la pestaña 'MPLAB C18', dentro de la categoría 'General', añadimos el siguiente 'Preprocessor Macro': 'MPLAB_PIC18F_PORT'.

- En la misma pestaña, pero bajo la categoría 'Memory Model', seleccionamos las siguientes opciones:

  • Large code model
  • Large data model
  • Multi-bank model

- Guardamos cambios y vamos a añadir ahora los fuentes! En la ventana raíz del proyecto, en caso de no verla, pinchamos sobre 'View/Project'.

- En 'Source Files' añadimos los siguiente archivos:

  • 'C:\FreeRTOS\Source'
    'croutine.c', 'list.c', 'queue.c', 'tasks.c'
  • 'C:\FreeRTOS\Source\portable\MPLAB\PIC18F'
    'port.c'
  • 'C:\FreeRTOS\Source\portable\MemMang'
    'heap_1.c'
  • 'C:\FreeRTOS\Prj\pic18\C03E03b'
    'main.c'

- En 'Header Files' añadimos:

  • 'C:\FreeRTOS\Prj\pic18\C03E03b'
    'FreeRTOSConfig.h'

- En 'Linker Script' añadimos:

  • 'C:\FreeRTOS\Prj\pic18\C03E03b'
    '18f2550.lkr' (Más adelante veremos como modificar un .lkr)

- Ya casi estamos! Si probáramos a compilar en este punto veríamos que el software nos arroja el siguiente error:
  • 'Error - could not find definition of symbol 'vSerialRxISR' in file './port.o'.'

Esto se debe a que por defecto el port.c va a intentar hacer uso de las rutinas de interrupción para la UART, como no las vamos a utilizar, las comentamos en el 'port.c'. Las encontramos casi al final, en la siguiente función 'prvLowInterrupt( void )'. Comentamos los 'If' de 'vSerialRxISR' y 'vSerialTxISR'.

- Ahora si, ya está todo listo para compilar, si lo hacéis debería salir el buscado 'Build Succeeded'. Si tenéis un entrenador y un LCD este es el momento de probar el 'Hola FreeRTOS!'.

- Queda un punto por comprender, la modificación del linker. Para ello abrimos el linker de ejemplo de Microchip y el de este proyecto:

  • 'C:\MCC18\bin\LKR'
    '18f2550_g.lkr'
  • 'C:\FreeRTOS\Prj\pic18\C03E03b'
    '18f2550.lkr'

Como se puede apreciar, el linker de ejemplo tiene varios 'IFDEF', uno para 'Extended Mode' (haremos uso de él como ya hemos visto antes), otro para 'Debug' (no lo usaremos), por lo que si eliminamos todo lo que de momento no vamos a usar quedaría algo así:

Código: [Seleccionar]
// File: 18f2550_g.lkr
// Generic linker script for the PIC18F2550 processor

LIBPATH .

FILES c018i_e.o
FILES clib_e.lib
FILES p18f2550_e.lib

CODEPAGE   NAME=page       START=0x0               END=0x7FFF
CODEPAGE   NAME=idlocs     START=0x200000          END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000          END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000          END=0xF000FF       PROTECTED

DATABANK   NAME=gpr0       START=0x0               END=0xFF
DATABANK   NAME=gpr1       START=0x100             END=0x1FF
DATABANK   NAME=gpr2       START=0x200             END=0x2FF
DATABANK   NAME=gpr3       START=0x300             END=0x3FF
DATABANK   NAME=usb4       START=0x400             END=0x4FF          PROTECTED
DATABANK   NAME=usb5       START=0x500             END=0x5FF          PROTECTED
DATABANK   NAME=usb6       START=0x600             END=0x6FF          PROTECTED
DATABANK   NAME=usb7       START=0x700             END=0x7FF          PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF60             END=0xFFF          PROTECTED

STACK SIZE=0x100 RAM=gpr3

Puesto que el FreeRTOS necesita un solo bloque de RAM (ya que él se encarga de gestionarla), y debido a que para este proyecto no vamos a utilizar el USB, reagrupamos la RAM y el linker quedaría del modo que podemos ver en el '18f2550.lkr'

Código: [Seleccionar]
// File: 18f2550_g.lkr
// Generic linker script for the PIC18F2550 processor

LIBPATH .

FILES c018i_e.o
FILES clib_e.lib
FILES p18f2550_e.lib

CODEPAGE   NAME=page       START=0x0               END=0x7FFF
CODEPAGE   NAME=idlocs     START=0x200000          END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000          END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000          END=0xF000FF       PROTECTED

DATABANK   NAME=BIG_RAM    START=0x00              END=0x7FF
ACCESSBANK NAME=accesssfr  START=0xF60             END=0xFFF          PROTECTED

SECTION    NAME=CONFIG     ROM=config

STACK SIZE=0x100 RAM=BIG_RAM

Para este 'hola mundo' a la FreeRTOS he usado el entrenador 18F2550Trainer:

Con el módulo ModLCD:

Conectados del siguiente modo:

18F2550Trainer - ModLCD
  • RB4-RB7 - DB4-DB7
  • RA0 - E
  • RA1 - RW
  • RA2 - RS
  • RC2 - LEDR
  • VCC - LEDLCD
  • VCC - VCC
  • GND - GND

- El Driver para el LCD está basado en el XLCD de Microchip con alguna mínima modificación. A continuación un vídeo (minimalista XD) del funcionamiento!!


Descargar Código Fuente

Un saludo a todos!
« Última modificación: 03 de Agosto de 2010, 02:36:35 por J1M »

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!
« Respuesta #1 en: 03 de Noviembre de 2011, 03:32:08 »
Hola J1M!

Grande tu aporte! Lastima no he podido integrarlo porque me daba muchos errores a pesar de seguir todos los pasos. Te explico, primero probe con la ultima version del FreeRTOS (7.0.2) y me dio muchos errores. Luego lo hice con la version con la que hiciste obteniendo otros errores. No creo que sea mi version de MPLAB (8.63) pero algo debe de haber.

Finalmente, pude correr el ejemplo de suky . Pero, como lo que tengo a la mano es una placa PICDEM FS USB tenia que migrar los linkers a un 18f4550. Abri el que tenia suky de un 18f2550 y solo cambie el .lib por el del 4550. Nose si tenga que hacer algo mas pero hasta ahora funciona su ejemplo de LEDs (cambiando tambien los puertos de estos de RB por RD, el #include y los fusibles)

Gracias por la pequeña explicacion de como cambiar un linker para el rtos.

Decir que ni se que version del FreeRTOS a usado suky xD


Gracias otra ves!
« Última modificación: 03 de Noviembre de 2011, 03:35:46 por jeremylf »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!
« Respuesta #2 en: 03 de Noviembre de 2011, 10:50:52 »
Finalmente, pude correr el ejemplo de suky . Pero, como lo que tengo a la mano es una placa PICDEM FS USB tenia que migrar los linkers a un 18f4550. Abri el que tenia suky de un 18f2550 y solo cambie el .lib por el del 4550. Nose si tenga que hacer algo mas pero hasta ahora funciona su ejemplo de LEDs (cambiando tambien los puertos de estos de RB por RD, el #include y los fusibles)

Entre un 4550 y 2550, más que el nombre no hay diferencia entre linkers. Pero la modificación se basa en crear un único banco de memoria ram uniendo los disponibles.

Decir que ni se que version del FreeRTOS a usado suky xD

No me acuerdo, pero uno de los últimos.  :mrgreen: Para actualizar basta reemplazar los archivos para mantener esa estructura del proyecto.  ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!
« Respuesta #3 en: 03 de Noviembre de 2011, 13:02:22 »
Bueno, como digo, solo cambio el .lib que incluye dentro del linker. Pero si me dices que con eso basta entre el 2550 y el 4550, estoy mas tranquilo  :mrgreen:

Revisando un poco mas creo que usaste la v.6.0.2.

Gracias!

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!
« Respuesta #4 en: 07 de Diciembre de 2011, 10:31:36 »
Interesante!!! a pesar de que J1M lo posteo hace un año el tema recien lo estoy por ver  :oops:

Y de taquito una consultilla: se podria implementar el frertos para un comun y silvestre 18F4550 pero que cuenta con bootloader usb-hid? Simplemente separo las regiones de memoria como si fuese un simple prende led? es decir si tengo usar mi plantilla y copy paste el ejemplo? alguien lo ha intentado antes?

Gracias!!!
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!
« Respuesta #5 en: 07 de Diciembre de 2011, 11:27:14 »
Citar
Puesto que el FreeRTOS necesita un solo bloque de RAM (ya que él se encarga de gestionarla), y debido a que para este proyecto no vamos a utilizar el USB, reagrupamos la RAM y el linker quedaría del modo que podemos ver en el '18f2550.lkr'

Para el USB habria que modificar el linker de otra forma creo, por eso que dice J1M. Ahora, integrarle un bootloader creo que hará la cosa mas compleja, pero ahi está el reto  ;-). Yo he podido usar el FreeRTOS con un 18F4550:  http://www.todopic.com.ar/foros/index.php?topic=36549.0


Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!
« Respuesta #6 en: 07 de Diciembre de 2011, 12:02:54 »
Para usar el botloader lo unico es proteger el sector ocupado modificando el linker y despues el remapeo de vectores, ahi hay que revisar el archivo port.c que usa interrucion para el tick...


Saludos
No contesto mensajes privados, las consultas en el foro

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!
« Respuesta #7 en: 07 de Diciembre de 2011, 17:03:41 »
Citar
Puesto que el FreeRTOS necesita un solo bloque de RAM (ya que él se encarga de gestionarla), y debido a que para este proyecto no vamos a utilizar el USB, reagrupamos la RAM y el linker quedaría del modo que podemos ver en el '18f2550.lkr'

Para el USB habria que modificar el linker de otra forma creo, por eso que dice J1M. Ahora, integrarle un bootloader creo que hará la cosa mas compleja, pero ahi está el reto  ;-). Yo he podido usar el FreeRTOS con un 18F4550:  http://www.todopic.com.ar/foros/index.php?topic=36549.0



Interesante la chamba que te has mandado, gracias por el link!
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: FreeRTOS - C18 - PIC18F2550 - LCD - Hola Mundo!
« Respuesta #8 en: 07 de Diciembre de 2011, 17:05:05 »
Para usar el botloader lo unico es proteger el sector ocupado modificando el linker y despues el remapeo de vectores, ahi hay que revisar el archivo port.c que usa interrucion para el tick...


Saludos

Gracias por confirmar mis suposiciones, la del archivo port.c esta para revisarlo. Gracias!
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com


 

anything