Está en la página 1de 14

Repasos Parte Nº3

Uso de registros y operaciones con bits en C


Compilación nativa con eUCCvm

Técnicas Digitales II - Área Práctica


Docentes:
Dr. Ing. Cristian F. Perez-Monte
Ing. Ana Lattuca
Ayudantías prácticas:
A definir
Recordatorio
Organización del área práctica de la materia durante cuarentena
Contenido completo ingresando al campus

Todas las clases (Turno Noche lunes 22 hs y Turno Tarde jueves 17:30 hs):

● Video de youtube de clase con presentación asistida por audio de profesor


● Acceso adicional a la presentación en pdf
● Actividad Nº29 y Nº30.
● Consulta a alumnos mediante whatsapp o telegram
● Toma de asistencia con la actividad Nº29

En horario de consultas (jueves a las 19 hs):

● Consulta a alumnos mediante e-mail, whatsapp o telegram


● Consultas por ZOOM solo a pedido de los alumnos
Recordatorio
A raíz de la crisis sanitaria por el virus SARS-CoV-2 las clases son a
distancia

Recordar inscribirse al grupo de whatsapp:


● https://chat.whatsapp.com/CL22OyMNwIs40ZV1haehRq

O al grupo de telegram:

● https://t.me/joinchat/wUCgeMCL_bk5ZjRh

Y no olvidar matricularse en la Parte Práctica de Cátedra de


Técnicas Digitales 2 del Campus Virtual para acceder a todo el
contenido.
Manipulación de bits en lenguajes de programación

● El manejo de bits es fundamental y habitual en lenguajes de bajo nivel como


ensamblador, tal como vimos en el primer semestre.

● En lenguajes de nivel superior suele ser poco habitual su uso.

● Sin embargo en electrónica es fundamental su uso ya sea en lenguajes de


bajo nivel como de nivel superior como C para la programación de
microcontroladores.
Variables y Operadores
● En c existen múltiples tipos de variables como vieron en materias anteriores como char, int, unsigned
char, unsigned int, long, etc.
● La cantidad de bits de cada tipo de variable puede variar de acuerdo al compilador, sistema operativo,
etc. es por ello que es recomendable usar la función sizeof() la cual nos devuelve el tamaño de un tipo
de variable con la que trabajaremos.

Operadores de bits Símbolo

Operación lógica AND &

Operación lógica OR |

Operación lógica XOR ^

Operación NOT ~

Desplazamiento a la izquierda <<

Desplazamiento a la derecha >>


Uso de operación AND y OR
unsigned char a=0x31;

unsigned char b=0x23;

unsigned char c=a&b; // Operación and entre los bits del registro a y del registro b

a=0x41;

b=0x23;

unsigned char d=a|b; // Operación or entre los bits del registro a y del registro b
Uso de operación XOR y NOT

unsigned char a=0x28;

unsigned char b=0x11;

unsigned char c=a^b; // Operación xor entre los bits del registro a y del registro b

a=0x25;

unsigned char d=~a; // Operación not de todos los bits del registro a
Uso de operaciones de desplazamiento
unsigned char a=0x03;

unsigned char b=a <<5; //desplazamiento de los bits del registro “a” 5 posiciones a la
izquierda

a=0xf0;

unsigned char c=a >>4;//desplazamiento de los bits del registro “a” 4 posiciones a la
derecha

Si el operador de la cantidad de bits de desplazamiento (de la derecha) es negativo o superior a la


cantidad de bits del registro de la izquierda el comportamiento es indefinido en C.
Uso de operaciones AND y OR para seteo o reseteo de
bits y XOR para inversión de estado, con máscara

unsigned char a=0x35;

a|=(1<<3); //Equivalente a a=a|(1<<3) setea el bit 3 del registro a y lo guarda en a

a&=~(1<<5); //Equivalente a a=a&~(1<<5) borra el bit 5 del registro a y lo guarda en a

a^=(3<<4); //Invierte los estados de los bits 4 y 5 del registro a y lo guarda en a


Leer si un bit está seteado o borrado
unsigned char a=0x0c;

unsigned char n=3;

if (a&(1<<n)) printf(“El bit %d está seteado\n”,n);

else printf(“El bit %d está borrado\n”,n);

n=1;

if (a&(1<<n)) printf(“El bit %d está seteado\n”,n);

else printf(“El bit %d está borrado\n”,n);


Compilación nativa en eUCCvm
eUCCvm está desarrollado para crear código ejecutable para ejecutarse en otras
arquitecturas, o sea compilación cruzada para otras arquitecturas.

Sin embargo eUCCvm permite compilar código ejecutable para ejecutarse sobre
la misma eUCCvm, en este caso x86, a esto se le llama compilación nativa.

La compilación nativa se realiza simplemente de la siguiente manera:

gcc codigo.c -o nombre_del_código_ejecutable

Luego se ejecuta de la siguiente manera:

./nombre_del_código_ejecutable

Realizaremos la actividad Nº30 para practicar la ejecución nativa


Actividad Nº30

En base a los ejemplos antes dados:

● Compile los ejemplos para arquitectura nativa (no cruzada) x86 en eUCCvm
● Ejecute los programas y verifique con sus respuestas

Diríjase al procedimiento en el siguiente enlace:

https://www.campusvirtual.frm.utn.edu.ar/mod/resource/view.php?id=93055
¡IMPORTANTE PARA PRÓXIMA CLASE!
● Realizar las actividades hasta la presente clase.
● Para próxima clase conseguir en lo posible los siguientes materiales:
■ Arduino UNO y cable usb.
● Dada la situación actual, en caso de no poseer hardware podrán realizar las
prácticas simuladas con uso de Proteus.
Bibliografía gratuita recomendada
Capítulo 2 de Sistemas Empotrados en Tiempo Real de José Daniel Muñoz Frías

https://www.campusvirtual.frm.utn.edu.ar/mod/url/view.php?id=93056

C Programming por en.wikibooks.org (En Inglés)

https://www.campusvirtual.frm.utn.edu.ar/mod/resource/view.php?id=93057

The C Book escrito por Mike Banahan, Declan Brady y Doran (En Inglés)

https://www.campusvirtual.frm.utn.edu.ar/mod/resource/view.php?id=93058

Deep C (and C++) por Olve Maudal y Jon Jagger (En Inglés)

https://www.campusvirtual.frm.utn.edu.ar/mod/resource/view.php?id=93060

INTERNATIONAL STANDARD ISO/IEC 9899

https://www.campusvirtual.frm.utn.edu.ar/mod/resource/view.php?id=93059

También podría gustarte