Autor Tema: Bug en MicroLogger 8 y 32 bits  (Leído 1524 veces)

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

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Bug en MicroLogger 8 y 32 bits
« en: 04 de Julio de 2009, 16:53:37 »
Hola recientemente un usario del FileSystem implementado en MicroLogger detecto un problema en memorias SD de 2GBytes, el problema aunque parezca ridiculo es una simple letra. Les detallo la linea de código involucradas.

File: FS.C linea 499
Código: C
  1. BytesPerCluster = FSInfo.SectorPerCluster * FIX_BYTES_PER_SECTOR;

Que en assembler el compilador traduce en esto :

Código: Text
  1. 499:    BytesPerCluster = FSInfo.SectorPerCluster * FIX_BYTES_PER_SECTOR;
  2.      LDA   #9
  3.      PSHA  
  4.      LDA   FSInfo
  5.      CLRX  
  6.      JSR   _ILSL
  7.      PULH  
  8.      PSHA  
  9.      JSR   _SEXT16_32
  10.      TSX  
  11.      AIX   #19
  12.      JSR   _POP32


Parece una simple multiplicación, pero el problema radica que la constante FIX_BYTES_PER_CLUSTER esta definida simplemente como 512 con lo cual el compilador asume es que signeada, y si ven el dissambler se daran cuenta que al resultado se le extiende el signo ya que dice signeado por unsigned resultado signeado. Para memorias de 2Gbytes es resultado de esa multpilicacion es 32768 o -1 con lo cual al extenderse el signo el valor era cualquier cosa. La solucion fue colocar el exacto tipo en la constante es decir el sufijo debe ser U y problema solucionado.

Coorecta defincion de la constante
Código: C
  1. #define FIX_BYTES_PER_SECTOR           512U
Queria compartir esta experiencia con uds.

Saludos !



Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Bug en MicroLogger 8 y 32 bits
« Respuesta #1 en: 04 de Julio de 2009, 18:46:29 »
muchas gracias richard, yo como muchos otros, no hemos sabido aprovechar tan buen aporte, debido a que todavia hay que seguir leyendo y estudiando para poder llegar a ese nivel para comprender el fat file, y otras cosillas de C, definitivamente la sd es uno de los retos este año. saludos
tus posts seran una excelente referencia
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....


 

anything