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
Author: heltena
Date: Mon, 24 Jul 2006 16:42
Date: Mon, 24 Jul 2006 16:42
20 lines
1732 bytes
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
Author: heltena
Date: Mon, 24 Jul 2006 16:49
Date: Mon, 24 Jul 2006 16:49
62 lines
3233 bytes
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
Author: heltena
Date: Mon, 24 Jul 2006 17:20
Date: Mon, 24 Jul 2006 17:20
92 lines
4055 bytes
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
Author: gamo
Date: Mon, 24 Jul 2006 18:52
Date: Mon, 24 Jul 2006 18:52
42 lines
2189 bytes
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
Author: gamo
Date: Mon, 24 Jul 2006 19:57
Date: Mon, 24 Jul 2006 19:57
21 lines
1777 bytes
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
Author: J.A. Gutierrez
Date: Tue, 25 Jul 2006 06:43
Date: Tue, 25 Jul 2006 06:43
31 lines
2130 bytes
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
Author: Jos� Luis P�rez Diez
Date: Tue, 25 Jul 2006 07:20
Date: Tue, 25 Jul 2006 07:20
35 lines
2654 bytes
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
Author: heltena
Date: Tue, 25 Jul 2006 08:18
Date: Tue, 25 Jul 2006 08:18
28 lines
2523 bytes
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
Author: Jos� Luis P�rez Diez
Date: Tue, 25 Jul 2006 09:23
Date: Tue, 25 Jul 2006 09:23
24 lines
2238 bytes
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
Author: heltena
Date: Tue, 25 Jul 2006 10:05
Date: Tue, 25 Jul 2006 10:05
50 lines
3687 bytes
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