Autor Tema: Traduciendo de CCS a HTSOFT. Declaracion de funciones .  (Leído 2377 veces)

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

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« en: 12 de Agosto de 2009, 12:59:36 »
Buenas!!
Estoy "traduciendo" el driver que trae el CCS (para manejar una MMC) para que pueda ser compilado en HTSOFT PIC18, que es el compilador con el que ya tengo hecho un 75% del proyecto... Me salto la duda, nunca habia visto una declaracion de este tipo:


Parte del codigo del driver mmc_spi.c:

enum MMC_EC {
   MMC_EC_OK = 0,
   MMC_EC_NOT_IDLE = 1, //after reset command, device wasn't in idle state
   MMC_EC_NOT_INIT = 2, //after init command, device had an error
   MMC_EC_NO_CRC = 3, //CRC wouldn't turn off
   MMC_EC_SET_READ_BLOCKSIZE_FAIL = 4, //gave us an error during set blocksize
   MMC_EC_SET_WRITE_BLOCKSIZE_FAIL = 5, //gave us an error during set blocksize
   MMC_EC_SET_MULTI_BLOCKSIZE_FAIL = 6, //gave us an error during set blocksize
   MMC_EC_SET_WRITE_ADDRESS_FAIL = 7, //gave us an error when we told it we want to write block
   MMC_EC_BLOCK_NOT_WRITTEN = 8, //after sending block, it gave us this response
   MMC_EC_SET_READ_ADDRESS_FAIL = 9, //gave us an error when we told it we wanted to read block
   MMC_EC_ERASE_SECTOR_START_FAIL = 10, //mmc gave us an error when we set the start sector for erase
   MMC_EC_ERASE_SECTOR_END_FAIL = 11, //mmc gave us an error when we set the end sector for erase
   MMC_EC_ERASE_SECTORS_FAIL = 12, //mmc gave us an error when we told it to erase tagged sectors
   MMC_EC_BAD_STATE = 13,  //we cant start/continue a multi transfer because we didn't start/finish the last one
   MMC_EC_START_MULTI_READ_FAIL = 14, //mmc gave us an error when we started a multi-read
   MMC_EC_READ_NEXT_BLOCK_FAIL = 15, //mmc gave us an error when started to read the next block (in multi-read)
   MMC_EC_STOP_TRANSMISSION_FAIL = 16, //mmc gave us an error when tried to stup a multi read/write transmission
   MMC_EC_WRITE_ALWAYS_BUSY = 17 //after a block write, we waited longer than timeout period for busy signal to end
};


//#define MMC_DEBUG PRINTF      //uncomment this line to print out debug messages
#define MMC_DEBUG(a,b,c,d,e,f,g,h,i,j,k)   //uncomment this line to not print out debug messages

/////*** END USER CONFIG ***/////

//if you want to slow down the speed of the MMC clock, define delay_clk to a delay_xx() routine
//#define mmc_delay_clk() delay_us(1)
#define mmc_delay_clk()

#define MMC_BLOCK_SIZE  512

int16 mmc_last_result=0;

// FUNCTIONS
//public functions
MMC_EC   mmc_init();

MMC_EC   mmc_modify_byte(int32 address, int8 val);
MMC_EC   mmc_modify_block(int32 address, int16 block_size, int *ptr);
MMC_EC   mmc_write_block(int32 address, int16 block_size, int *ptr);

#define  mmc_read_byte(a,p) mmc_read_block(a,1,p)
MMC_EC   mmc_read_block(int32 address,int16 block_size, int *ptr);

MMC_EC   mmc_erase(int32 address, int32 sectors);


MMC_EC   mmc_read_enable(int32 address, int16 block_size);
MMC_EC   mmc_read_mult_block(int *ptr);
MMC_EC   mmc_read_disable(void);


Se ve que en vez de declarar una funcion del tipo int, char o void... declara una funcion tipo MMC_EC  :shock: si tuviera que bajar un poco el nivel de esta declaracion, que es lo que se esta haciendo al declarar de esta forma? De mas esta decir que el compilador de HTSOFT no me lo toma :(

No esta de mas preguntar , hay alguna forma de mezclar en un mismo codigo (como quien mezcla assembler con C) codigos para distintos compiladores? por ejemplo venir escribiendo todo para HTSOFT y poner en alguna parte del programa algo hecho para compilar con CCS... jeje, soñar es gratis.. pero a lo mejor se puede hacer.

Desde ya muchas gracias!!!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #1 en: 12 de Agosto de 2009, 13:07:29 »
Hola.

Yo algun dia pense que las MCU (Multiple Compiler Units) eran para eso, pero nunca despeje esa duda. Se puede hacer con ASM y C18 de microchip, pero CCS y HiTech no tengo idea de si se pueda.

Segun el manual del CCS se puede exportar un archivo .o el cual se puede llamar desde otro compilador. Pero segun lo explicado aca en el foro, cada compilador organiza la info de manera diferente en el archivo exportado.

De pronto MMC_EC esta definido como int32 con otro #define en otro lado.

Revisa en la ayuda las opciones de #export y #import

Saludos
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #2 en: 12 de Agosto de 2009, 13:08:19 »
Ojo con las librerías de CCS que tienen Copyright!
Después revisando el pdf de las memorias SD y mirando el código veras lo que va haciendo la librería y podrás crear la propia.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #3 en: 12 de Agosto de 2009, 13:19:47 »
Hola! Gracias por la pronta respuesta!
MLO__ hay por donde viste que lo definia como int32? no doy con el #define dentro del mmc_spi.c
De pronto MMC_EC esta definido como int32 con otro #define en otro lado.

Suky , gracias por el consejo, no sabia de los copyrights...la verdad, pienso tomar como referencia la libreria del CCS y despues hacer una propia, realmente me interesa entender bien el tema.

Saludos!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #4 en: 12 de Agosto de 2009, 13:52:59 »
Hola.

Estan definidas. Mira que MMC_EC esta definido justo arriba con enum. Todas las funciones retornan enteros.

Saludos
El papel lo aguanta todo

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #5 en: 12 de Agosto de 2009, 15:21:34 »
Hola, mi pequeño aporte:

La declaración del enum deberias cambiarla a esta manera para que exista un "tag" que el compilador pueda resolver como retono de la función:

Código: C
  1. typedef enum
  2. {
  3.    MMC_EC_OK = 0,
  4.    MMC_EC_NOT_IDLE = 1, //after reset command, device wasn't in idle state
  5.    MMC_EC_NOT_INIT = 2, //after init command, device had an error
  6.    MMC_EC_NO_CRC = 3, //CRC wouldn't turn off
  7.    MMC_EC_SET_READ_BLOCKSIZE_FAIL = 4, //gave us an error during set blocksize
  8.    MMC_EC_SET_WRITE_BLOCKSIZE_FAIL = 5, //gave us an error during set blocksize
  9.    MMC_EC_SET_MULTI_BLOCKSIZE_FAIL = 6, //gave us an error during set blocksize
  10.    MMC_EC_SET_WRITE_ADDRESS_FAIL = 7, //gave us an error when we told it we want to write block
  11.    MMC_EC_BLOCK_NOT_WRITTEN = 8, //after sending block, it gave us this response
  12.    MMC_EC_SET_READ_ADDRESS_FAIL = 9, //gave us an error when we told it we wanted to read block
  13.    MMC_EC_ERASE_SECTOR_START_FAIL = 10, //mmc gave us an error when we set the start sector for erase
  14.    MMC_EC_ERASE_SECTOR_END_FAIL = 11, //mmc gave us an error when we set the end sector for erase
  15.    MMC_EC_ERASE_SECTORS_FAIL = 12, //mmc gave us an error when we told it to erase tagged sectors
  16.    MMC_EC_BAD_STATE = 13,  //we cant start/continue a multi transfer because we didn't start/finish the last one
  17.    MMC_EC_START_MULTI_READ_FAIL = 14, //mmc gave us an error when we started a multi-read
  18.    MMC_EC_READ_NEXT_BLOCK_FAIL = 15, //mmc gave us an error when started to read the next block (in multi-read)
  19.    MMC_EC_STOP_TRANSMISSION_FAIL = 16, //mmc gave us an error when tried to stup a multi read/write transmission
  20.    MMC_EC_WRITE_ALWAYS_BUSY = 17 //after a block write, we waited longer than timeout period for busy signal to end
  21. }MMC_EC ;

Citar
No esta de mas preguntar , hay alguna forma de mezclar en un mismo codigo (como quien mezcla assembler con C) codigos para distintos compiladores? por ejemplo venir escribiendo todo para HTSOFT y poner en alguna parte del programa algo hecho para compilar con CCS... jeje, soñar es gratis.. pero a lo mejor se puede hacer.

El ANSI C permite este tipo de cosas con condicionales de compilacion, cada compilador define una constante que identifica al mismo compilador, se llama comunmente "Compiler Vendor Identification Defines ". Deberias averiguar cuales define el CCS y el HITECH, te pongo un ejemplo:

Código: C
  1. #ifdef __HIWARE__
  2. ...
  3. #elif __BORLANC__
  4. ...
  5. #endif

En la primera parte colocas código para ese compilador ( en este caso compiladores CodeWarrior para Freescale ) en el segundo código para el compilador Borland C/C++

No se cual es el proposito de tu proyecto, si es investigar e implementar acceso a la tarjeta y manejo de FAT, segui los consejos de Sulky, sino podes optar por esquemas ya implementados que solo requieren la customizacion del hardware:

ELM FatFs
ELM Petit FAT File System (para 8 bits)
DOSFS
ChaN´s FAT
http://www.todopic.com.ar/foros/index.php?topic=23459.0

Saludos !
« Última modificación: 12 de Agosto de 2009, 15:24:28 por RICHI777 »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #6 en: 12 de Agosto de 2009, 15:39:47 »
Hola.

Pues que lastima que CCS no sea ANSI C. Creo entonces que no hay modo de hacer lo que mencionas RICHI, pero, segun lo que indicas, si se podria entre HiTech y C18.
El papel lo aguanta todo

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #7 en: 12 de Agosto de 2009, 18:23:57 »
1000 gracias RICHI777!!

Muy buenos los links que me pasaste tambien, de a poco va tomando forma esto !

Seguiremos metiendole pata

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #8 en: 12 de Agosto de 2009, 18:31:24 »
Hola MLO, segun lo que dice la página oficial del CCS soportaria compilación condicional

http://www.ccsinfo.com/content.php?page=compspecific

Saludos !

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #9 en: 12 de Agosto de 2009, 21:06:18 »
Como asi compilacion condicional amigo RICHI? Podiras explicarme mejor eso?

Saludos
El papel lo aguanta todo

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Traduciendo de CCS a HTSOFT. Declaracion de funciones .
« Respuesta #10 en: 12 de Agosto de 2009, 23:17:57 »
Hola MLO, la compilacion condicional es usada para que ciertas lineas de código se compilen o no segun algun define definido en un archivo h o pasado al momento de compilar. Ya que estamos hablando de tarrjetas y sistemas de archivos FAT, supongamos que queremos compilar dos versiones de apliacion, una que soporte FAT32 y la otra no, entonces hacemos esto

Código: C
  1. #ifdef __FAT32__
  2. ...
  3. #endif

En todos los lugares donde el código de soporte a FAT32 y sea independiente de otra parte se debe incluir estas directivas de compilación. El define __FAT32__ puede ser definido en eun archivo o pasarselo a compilador como sea.

Saludos !
« Última modificación: 12 de Agosto de 2009, 23:23:39 por RICHI777 »