Entradas

Compilar un kernel > 2.6 en Debian

1. Instalar los siguientes paquetes: apt-get install ncurses*, bzip2, gcc*, make, libqt3* (opcional, para ser usado con xconfig) 1. Descargar la imagen del kernel desde: www.kernel.org 2. Descomprimirlo: tar jxvf .tar.bz2 3. Configurarlo make menuconfig 4. Generar el ejecutable make bzImage el ejecutable se encuentra en arch/i386/bzImage 5. Genera los módulos  make modules 6. Instala los módulos (este paso hacerlo como SU) make modules_install 7. Instala el kernel en /boot make install 8. Genera un sistema de archivos en RAM para el arranque (creo que sólo es para Debian) mkinitramfs -o /boot/initrd.img- (checar que hay un espacio en blanco) 9. Agregar la nueva imagen para el boot vim /boot/grub/menu.lst 10. Reiniciar

Conversión BCD a decimal

El siguiente código convierte un número BCD (0x00-0x99) a su equivalente decimal (0-99 ó 0x00-0x63). Este formato lo utilizan los RTCs: uint8_t bcd2bin(uint8_t bcd) { uint8_t tmp; tmp=bcd; tmp>>=4; tmp*=10; return(tmp+(bcd&0x0F)); }

Eliminando la tecla BloqMayús

Buscando ser más eficiente a la hora de escribir en la computadora, me encontré con una distribución de teclado llamada Colemak (de la cual voy a hablar en otra entrada, pero adelanto que ya la estoy aprendiendo y vale la pena) y me encontré con algo muy curioso: ¡no tiene tecla BloqMayús! En su lugar está otra "Retroceso" (o "Backspace"). Es decir, físicamente sigue existiendo la tecla BloqMayús, pero en lugar de escribir mayúsculas sirve para borrar el caracter que está a la izquierda del cursor, y es la cosa más extraordinaria que he visto en mucho tiempo. Existe una discusión filosófica acerca de si vale la pena o no conservar la tecla BloqMayús, pero la mejor opinión se tiene una vez que la eliminan y la utilizan como "Retroceso" Dado que aprender Colemak lleva su tiempo, quedé muy contento con mi nueva "Retroceso" para la mano izquierda, así que busqué cómo podría tenerla en mi teclado QWERTY en WinXP. Entonces encontré una pequeña aplicaci...

Editor Vim

Hace unas semanas por alguna razón me encontré con el editor de texto Vim y movido por la curiosidad lo instalé en mi máquina con WinXP y me puse a jugar con él. Como es sabido, es un editor modal con una curva de aprendizaje algo lenta, sin embargo los resultados valen la pena. La primer pantalla que nos aparece es intimidatoria e inconcientemente nos invita a cerrarlo (ups, ¿cómo se cierra? escriban :q!) y abrir algún otro editor que nos sea más familiar. Pero si logramos superar esta primera impresión y le damos una oportunidad, les aseguro que después de utilizar por un corto tiempo este editor las cosas ya no van a ser igual, e inclusive lo van a extrañar en aplicaciones como Word (o Writer del OpenOffice, yo lo extraño y ojalá existieran plug-ins para todas esas otras aplicaciones,) o al escribir mails en gmail. Es un editor compacto, ligero, poderoso y no tiene nada que envidiarle a ninguno de los editores más populares, ya que cuenta con ventanas, pestañas y hasta se puede comp...

Uso de interrupciones en el LPC21xx

Cómo configurar las interrupciones en el LPC 1.Establecer las isr para irq y fiq CW: void irq_handler(void) __attribute__ ((interrupt(“irq”))); WA: void __attribute__ ((interrupt(“irq”))) irq_handler(void); Para las fiq solamente cambiar “irq” por “fiq” Esos nombres son obligatorios 2.Escribir el código de la rutina de la interrupción irq o fiq void irq_handler(void){ ... } void fiq_handler(void){ ... } 3.Seleccionar la función alterna al pin con PINSELx 4.Seleccionar si va a ser fiq o irq con VICIntSelect (0: irq, 1: fiq) 5.Habilitar la interrupción con VICIntEnable 6.Escoger la prioridad con VICVectCntlx (x: 0-15, 0 tiene la mayor prioridad) Para las fiq se recomienda tener sólo una 7.Establecer la dirección de la callback con VICVectAddrx (x:0-15) 8.Escribir el código de la rutina que manejará la interrupción del periférico void eint0(void){...} El nombre de esta función es el mismo que se usa en el punto 5 9.Habilitar las interrupciones CW: __armlib_enableirq(); WA: 10.Repetir del ...

Archivo de configuración VIMrc 01-mar-09

set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set tabstop=4 set shiftwidth=4 set softtabstop=4 set smarttab set hls ic set ruler syntax on set nu set autoindent set tw=80 set ignorecase set nocursorline "colorscheme murphy colorscheme miesquema set guifont=Courier_New:h9:cANSI set errorbells set lbr! map ,n :tabnew map ,1 :tabprevious map ,0 :tabnext map ,a h map ,d l map ,w k map ,s j map :w "imap imap nmap nmap nmap 0i// j nmap 0xxj ab \1 /** ab \b \brief ab \p \param ab \r \return ab \f \file ab \d \date =strftime("%d-%b-%Y") ab \a \author "ab \z i/ JI ab \m /** \mainpage ab \t \todo ab \w \warning ab \v \version ab \g \bug ab \s \see ab \\ //! ab \* /** 2hi ab #d #define ab #i #include ab ## #ifdef comment ab #e #endif // comment set visualbell "syntax on set ruler set wrap "set tabstop=4 "set shiftwidth=4 "set showmatch set ai set sm "set smarttab set diffexpr=MyDiff() functi...

Control de un LCD 16x2 con la tool-chain winARM

El siguiente código fue generado utilizando WinARM e Insight. El framework se basó en una aplicación ejemplo de la propia tool-chain y se agregó el código para manejar un LCD de 16 x 2. NOTA: El siguiente código corre siempre y cuando se compile sin optimización, es decir, con -O0 ya que de otra manera por alguna razón falla (probablemente retardos muy lentos). También se utilizó una tarjeta OLIMEX LPC-E2129, y se depuró en RAM con un wiggler JTAG para el LPT de esa misma empresa. El propio código indica los puertos que se utilizaron. El código fuente lo puedes ver aquí Dic-09 Ya sé porqué no funciona con la optimización: El optimizador elimina las variables de retardo. Para evitarlo hay que hacerlas 'volatile': volatile int delay; Con eso se está forzando al compilador a no optimizarlas.