🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
10 messages
10 total messages Started by heltena Mon, 24 Jul 2006 16:42
escribir el tamano de un fichero en otro, pero no en ascii
#982
Author: heltena
Date: Mon, 24 Jul 2006 16:42
20 lines
1732 bytes
Hola,

Quiero escribir el tamano de un fichero dentro de otro fichero, pero en
binario, osea, los cuatro bytes. Es para preparar un fichero que
después leo desde C. Me interesa leer los cuatro bytes y cargarlos
directos en un int con un codigo parecido a este:

fread(&value, 4, 1, f);  /* solo es un ejemplo */

¿cómo puedo hacerlo?

Gracias hasta ahora!

PD: necesito que sea así porque el código se ejecutará en un PIC
(leyendo una tarjeta SD) y no es que tenga muchas facilidades en ese
procesador.


-- 
Saludos
Re: escribir el tamano de un fichero en otro, pero no en ascii
#983
Author: heltena
Date: Mon, 24 Jul 2006 16:49
62 lines
3233 bytes
Para olvidar se me ha olvidado decir que hasta ahora estoy usando bash
y dd.

Quizás mejor explicar el problema general para dar una idea. Tengo
ficheros con los que quiero hacer una "ISO", pero como me es costoso
programar una FAT o algo parecido, pues me monto mi propio sistema de
ficheros "cutre" que ya me va bien. Mi sistema de ficheros sera:
offset 0x00000000: primer fichero.
offset 0x01000000: segundo fichero.
offset ox02000000: tercer fichero.
y así hasta que se acabe el disco.

Cada fichero:
offset 0: tamano del fichero en 4 bytes (big endian)
offset 512: raw del fichero hasta que el tamano diga. (512 porque es el
tamano del sector)

Es para un cacharro de electrónica. Los ficheros serán unos que se
determinen y punto. Y si se pierde mucha memoria ... da igual, se copia
en una SDCard que vale menos 20eur.

Lo que tengo hasta ahora es el siguiente script:

#!/usr/bin/env bash
GAP=$((0x01000000 / 512))
INDEX=0
dd if=/dev/zero of=imagen.iso bs=512 count=1024K
for file in *.ub ; do
        echo Aquí tendría que escribir en $((GAP)) el tamano del
fichero
        dd if=$file of=imagen.iso bs=512 seek=$((GAP * INDEX + 1))
        INDEX=$((INDEX+1))
done


Despues:
dd if=imagen.iso of=/dev/sdb bs=512



heltena ha escrito:

> Hola,
>
> Quiero escribir el tamano de un fichero dentro de otro fichero, pero en
> binario, osea, los cuatro bytes. Es para preparar un fichero que
> después leo desde C. Me interesa leer los cuatro bytes y cargarlos
> directos en un int con un codigo parecido a este:
>
> fread(&value, 4, 1, f);  /* solo es un ejemplo */
>
> ¿cómo puedo hacerlo?
>
> Gracias hasta ahora!
>
> PD: necesito que sea así porque el código se ejecutará en un PIC
> (leyendo una tarjeta SD) y no es que tenga muchas facilidades en ese
> procesador.
> 
> 
> -- 
> Saludos
Re: escribir el tamano de un fichero en otro, pero no en ascii
#984
Author: heltena
Date: Mon, 24 Jul 2006 17:20
92 lines
4055 bytes
De momento lo he hecho en Python con el siguiente código,
¿alternativa en Bash?


#!/usr/bin/env python

import sys

def main(args):
        if len(args) != 2:
                print >>sys.stderr, "esto no chuta!"
                sys.exit(-1)
        f = open(args[1], "rb")
        f.seek(0, 2)    # end of file
        sz = f.tell()
        f.close()

        c1 = (sz >> 24) & 0xFF
        c2 = (sz >> 16) & 0xFF
        c3 = (sz >>  8) & 0xFF
        c4 = sz         & 0xFF
        print "%c%c%c%c" % (c1, c2, c3, c4)


if __name__ == "__main__":
        main(sys.argv)


heltena ha escrito:

> Para olvidar se me ha olvidado decir que hasta ahora estoy usando bash
> y dd.
>
> Quizás mejor explicar el problema general para dar una idea. Tengo
> ficheros con los que quiero hacer una "ISO", pero como me es costoso
> programar una FAT o algo parecido, pues me monto mi propio sistema de
> ficheros "cutre" que ya me va bien. Mi sistema de ficheros sera:
> offset 0x00000000: primer fichero.
> offset 0x01000000: segundo fichero.
> offset ox02000000: tercer fichero.
> y así hasta que se acabe el disco.
>
> Cada fichero:
> offset 0: tamano del fichero en 4 bytes (big endian)
> offset 512: raw del fichero hasta que el tamano diga. (512 porque es el
> tamano del sector)
>
> Es para un cacharro de electrónica. Los ficheros serán unos que se
> determinen y punto. Y si se pierde mucha memoria ... da igual, se copia
> en una SDCard que vale menos 20eur.
>
> Lo que tengo hasta ahora es el siguiente script:
>
> #!/usr/bin/env bash
> GAP=$((0x01000000 / 512))
> INDEX=0
> dd if=/dev/zero of=imagen.iso bs=512 count=1024K
> for file in *.ub ; do
>         echo Aquí tendría que escribir en $((GAP)) el tamano del
> fichero
>         dd if=$file of=imagen.iso bs=512 seek=$((GAP * INDEX + 1))
>         INDEX=$((INDEX+1))
> done
>
>
> Despues:
> dd if=imagen.iso of=/dev/sdb bs=512
>
>
>
> heltena ha escrito:
>
> > Hola,
> >
> > Quiero escribir el tamano de un fichero dentro de otro fichero, pero en
> > binario, osea, los cuatro bytes. Es para preparar un fichero que
> > después leo desde C. Me interesa leer los cuatro bytes y cargarlos
> > directos en un int con un codigo parecido a este:
> >
> > fread(&value, 4, 1, f);  /* solo es un ejemplo */
> >
> > ¿cómo puedo hacerlo?
> >
> > Gracias hasta ahora!
> >
> > PD: necesito que sea así porque el código se ejecutará en un PIC
> > (leyendo una tarjeta SD) y no es que tenga muchas facilidades en ese
> > procesador.
> > 
> > 
> > -- 
> > Saludos
Re: escribir el tamano de un fichero en otro, pero no en ascii
#985
Author: gamo
Date: Mon, 24 Jul 2006 18:52
42 lines
2189 bytes
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323328-380724138-1153767154=:24520
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: QUOTED-PRINTABLE

On Mon, 24 Jul 2006, heltena wrote:

> Hola,
>=20
> Quiero escribir el tamano de un fichero dentro de otro fichero, pero en
> binario, osea, los cuatro bytes. Es para preparar un fichero que
> despu=E9s leo desde C. Me interesa leer los cuatro bytes y cargarlos
> directos en un int con un codigo parecido a este:
>=20
> fread(&value, 4, 1, f);  /* solo es un ejemplo */
>=20
> =BFc=F3mo puedo hacerlo?
>=20
> Gracias hasta ahora!
>=20
> PD: necesito que sea as=ED porque el c=F3digo se ejecutar=E1 en un PIC
> (leyendo una tarjeta SD) y no es que tenga muchas facilidades en ese
> procesador.
>=20
>=20
> --=20
> Saludos
>=20
>=20

Si lo hicieses en Perl
(stat)[7] te da el tama=F1o decimal en bytes
perldoc -f pack  te dice como empaquetarlos en 4 bytes=20
Lo demas es open, print, close y poco m=E1s.
Saludos=20

--=20
http://www.telecable.es/personales/gamo/
perl -e 'print 111_111_111**2,"\n";'
--8323328-380724138-1153767154=:24520--
Re: escribir el tamano de un fichero en otro, pero no en ascii
#986
Author: gamo
Date: Mon, 24 Jul 2006 19:57
21 lines
1777 bytes
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323328-1794859903-1153771037=:26363
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: QUOTED-PRINTABLE

On Mon, 24 Jul 2006, gamo wrote:

> Si lo hicieses en Perl
> (stat)[7] te da el tama=F1o decimal en bytes

=09$num=3D(stat($filename))[7];

> perldoc -f pack  te dice como empaquetarlos en 4 bytes=20

=09$int=3Dpack "L", $num;  #untested, justo 32 bits=20

> Lo demas es open, print, close y poco m=E1s.
> Saludos=20
--8323328-1794859903-1153771037=:26363--
Re: escribir el tamano de un fichero en otro, pero no en ascii
#987
Author: J.A. Gutierrez
Date: Tue, 25 Jul 2006 06:43
31 lines
2130 bytes
heltena <heltena@gmail.com> wrote:

: fread(&value, 4, 1, f);  /* solo es un ejemplo */

: �c�mo puedo hacerlo?


	Lo primero que necesitas es saber si tu codigo corre en
	CPU big o little endian. Un ejemplo de como hacerlo lo
	tienes en:

	<http://giga.cps.unizar.es/~spd/src/test/tsizes.c>

	Luego, dado que lo almacenas como big endian, lo unico
	que tienes que hacer es invertir el valor (tanto antes
	de escribirlo como despues de leerlo) en caso de que el
	host sea little endian.

	Para ello puedes usar una macro del estilo de:

#define swap_word(a) ( ((a) << 24) | \
        (((a) << 8) & 0x00ff0000) | \
        (((a) >> 8) & 0x0000ff00) | \
        ((unsigned long)(a) >>24) )


-- 
PGP and other useless info at      \
http://webdiis.unizar.es/~spd/      \
finger://daphne.cps.unizar.es/spd    \       Timeo Danaos et dona ferentes
ftp://ivo.cps.unizar.es/pub/          \                         (Virgilio)   
Re: escribir el tamano de un fichero en otro, pero no en ascii
#988
Author: Jos� Luis P�rez Diez
Date: Tue, 25 Jul 2006 07:20
35 lines
2654 bytes
In article <1153759759.899777.188880@p79g2000cwp.googlegroups.com>, 
Heltena wrote:
> Para olvidar se me ha olvidado decir que hasta ahora estoy usando bash
> y dd.
> 
> Quiz�s mejor explicar el problema general para dar una idea. Tengo
> ficheros con los que quiero hacer una "ISO", pero como me es costoso
> programar una FAT o algo parecido, pues me monto mi propio sistema de
> ficheros "cutre" que ya me va bien. Mi sistema de ficheros sera:
> offset 0x00000000: primer fichero.
> offset 0x01000000: segundo fichero.
> offset ox02000000: tercer fichero.
> y as� hasta que se acabe el disco.
> 
> Cada fichero:
> offset 0: tamano del fichero en 4 bytes (big endian)
> offset 512: raw del fichero hasta que el tamano diga. (512 porque es el
> tamano del sector)
> 
> Es para un cacharro de electr�nica. Los ficheros ser�n unos que se
> determinen y punto. Y si se pierde mucha memoria ... da igual, se copia
> en una SDCard que vale menos 20eur.
>

Para que reiventar la rueda tienes jffs2 ( los fuentes estan en el 
nucleo) es muy efieciente en este tipo de memoria donde el coste de 
borrado / reescritura es muy superior al de lectura / escritura de zonas 
libres ( es casi lo que tu estas haciendo pero depurado y completamente 
funcional)


--
Los programadores esta ocupados intendtado mejorar los programas a prueba 
de idiotas. Mientras tanto el universo  intenta mejorar los idiotas. El 
universo va ganando
Re: escribir el tamano de un fichero en otro, pero no en ascii
#989
Author: heltena
Date: Tue, 25 Jul 2006 08:18
28 lines
2523 bytes
José Luis Pérez Diez wrote:

> > Es para un cacharro de electrónica. Los ficheros serán unos que se
> > determinen y punto. Y si se pierde mucha memoria ... da igual, se copia
> > en una SDCard que vale menos 20eur.
> >
>
> Para que reiventar la rueda tienes jffs2 ( los fuentes estan en el
> nucleo) es muy efieciente en este tipo de memoria donde el coste de
> borrado / reescritura es muy superior al de lectura / escritura de zonas
> libres ( es casi lo que tu estas haciendo pero depurado y completamente
> funcional)
>

Hombre, es para un PIC (www.microchip.com), con 384 bytes de memoria,
35 instrucciones máquina (y la ALU se limita a sumar y restar) y
20Mhz. Además, del compilador de C que uso no me fio (ya encontré
fallos en el código que me genera). Para lo que necesito, creo que lo
mio es más que suficiente.

Me guardo la info por si en otro producto lo necesito.

>
> --
> Los programadores esta ocupados intendtado mejorar los programas a prueba
> de idiotas. Mientras tanto el universo  intenta mejorar los idiotas. El
> universo va ganando
Re: escribir el tamano de un fichero en otro, pero no en ascii
#990
Author: Jos� Luis P�rez Diez
Date: Tue, 25 Jul 2006 09:23
24 lines
2238 bytes
In article <1153815499.189799.168220@p79g2000cwp.googlegroups.com>, 
Heltena wrote:
> Hombre, es para un PIC (www.microchip.com), con 384 bytes de memoria,
> 35 instrucciones m�quina (y la ALU se limita a sumar y restar) y
> 20Mhz. Adem�s, del compilador de C que uso no me fio (ya encontr�
> fallos en el c�digo que me genera). Para lo que necesito, creo que lo
> mio es m�s que suficiente.
>

�Has mirado este articulo?
http://www.linuxjournal.com/article/3045
yo solo lo lei hace tiempo pero quiza te puda interesear. Una fuente 
que era bastante buena para este tipo de cosas es 
http://www.circuitcellar.com/ ( yo he estado suscrito algunas 
temporadas).

Se puede saber que estas intentando hacer me interesaria ayudar.



--
Los programadores esta ocupados intendtado mejorar los programas a 
prueba de idiotas. Mientras tanto el universo  intenta mejorar los 
idiotas. El universo va ganando
Re: escribir el tamano de un fichero en otro, pero no en ascii
#898
Author: heltena
Date: Tue, 25 Jul 2006 10:05
50 lines
3687 bytes
José Luis Pérez Diez ha escrito:

> In article <1153815499.189799.168220@p79g2000cwp.googlegroups.com>,
> Heltena wrote:
> > Hombre, es para un PIC (www.microchip.com), con 384 bytes de memoria,
> > 35 instrucciones máquina (y la ALU se limita a sumar y restar) y
> > 20Mhz. Además, del compilador de C que uso no me fio (ya encontré
> > fallos en el código que me genera). Para lo que necesito, creo que lo
> > mio es más que suficiente.
> >
>
> ¿Has mirado este articulo?
> http://www.linuxjournal.com/article/3045
> yo solo lo lei hace tiempo pero quiza te puda interesear. Una fuente
> que era bastante buena para este tipo de cosas es
> http://www.circuitcellar.com/ ( yo he estado suscrito algunas
> temporadas).
>

Gracias por los links. Para programar tengo una PicStart Plus y el picp
le va muy bien. Los compiladores: gputils y sdcc. El sdcc no está muy
bien logrado para los pic14 (16f876). Por ejemplo, cuando haces alguna
operación un poco compleja (543*h/x) se empieza a flipar.

> Se puede saber que estas intentando hacer me interesaria ayudar.

Tengo una instalación montada con un circuito de Cebek llamado TR-10.
Es un circuito "Grabador digital de 16 mensajes". En el grabas mensajes
de voz (sonidos de hasta 8 minutos), después tienes unas regletas
(pones unos botones) y puedes escuchar los sonidos cada vez que pulsas
un botón.

Pues bien, este circuito vale 170€ más o menos. Con un pic, una
tarjeta SDcard y un poco de paciencia pues llegas a un coste mucho más
bajo (y el circuito es más pequeño, va a 5v, ...).

Mi primera idea era poder leer una FAT de la tarjeta y reproducir un
fichero (0.wav, 1.wav, 2.wav, ...) por cada botón que se pulse, pero
de momento lo estoy montando con el "sistema de ficheros" que he
comentado antes. Ahora lo tengo con un DAC 2R-R de 8 bits y ya escucha
bien. Cuando pruebe el CS4340 ya te contaré.


>
>
>
> --
> Los programadores esta ocupados intendtado mejorar los programas a
> prueba de idiotas. Mientras tanto el universo  intenta mejorar los
> idiotas. El universo va ganando
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads