Instrucciones de Bajo Nivel en C - PowerPoint PPT Presentation

1 / 15
About This Presentation
Title:

Instrucciones de Bajo Nivel en C

Description:

Defina la macro MASK(SIZE,POS) para hacer m scaras de manipulaci n de bits ... SIZE es el n mero de bits de la m scara. Asuma n meros de 16 bits #define MASK(SIZE,POS) ... – PowerPoint PPT presentation

Number of Views:73
Avg rating:3.0/5.0
Slides: 16
Provided by: pablos2
Category:

less

Transcript and Presenter's Notes

Title: Instrucciones de Bajo Nivel en C


1
Instrucciones de Bajo Nivel en C
  • Pontificia Universidad Católica de Chile
  • Departamento de Ciencia de la Computación
  • IIC3552 Sistemas Embebidos de Tiempo Real
  • Gerardo León Pablo Straub

2
Objetivo
  • Conocer algunas capacidades y peculiaridades del
    lenguaje de programación C
  • Representar algunos constructos típicos en C
  • En esta clase veremos una serie de ejemplos de
    constructos inusuales y/o de bajo nivel en C

3
Referencias
  • Nigel Jones, A C Test The 0x10 Best Questions
    for Would-be Embedded Programmers, Embedded
    Systems Programming, May 2000.
  • Brian W. Kernigan Dennis M. Ritchie, The C
    Programming Language, Second Edition,
    Prentice-Hall, 1988.

4
1. Constantes
  • Cómo declararía una constante con define que
    represente el número de segundos de un año? No
    considere años bisiestos.
  • define SEGAGNO 31536000
  • define SEGUNDOS_POR_AGNO 31536000
  • define SECONDS_PER_YEAR 31536000
  • define SECONDS_PER_YEAR (3600 24 365)
  • define SECONDS_PER_YEAR (60 60 24 365)
  • define SECONDS_PER_YEAR (60 60 24 365)L

5
2. Macros
  • Defina la típica macro MIN, que entrega el mínimo
    de 2 argumentos.
  • define MIN(A,B) ((A) lt (B) ? (A) (B))
  • Qué pasa al ejecutar lo siguiente?
  • menor MIN(p,b)

6
3. Otras directivas
  • Para qué sirve la directiva error?
  • Para qué sirve la directiva pragma?
  • Para qué sirven las directivas if, else,
    ifdef, ifndef, elif, endif?

7
4. Iteración infinita
  • Escriba una iteración infinita en C.

while (1) instrucciones
for() instrucciones
while (TRUE) instrucciones
  • infinito
  • instrucciones
  • goto infinito

8
5. Declaraciones
Declare la variable a como
  • Entero
  • Puntero a un entero
  • Puntero a puntero a entero
  • Arreglo de 10 enteros
  • Arreglo de 10 punteros a enteros
  • Puntero a arreglo de 10 enteros
  • Puntero a función que toman un entero y devuelven
    un entero
  • Arreglo de 10 funciones que toman un entero y
    devuelven un entero
  • int a
  • int a
  • int a
  • int a10
  • int a10
  • int (a)10
  • int (a)(int)
  • int (a)(int)10

9
6. Cláusula static
  • Explique los usos de la cláusula static
  • Mantener el valor de una variable local a una
    función
  • Declarar variables locales a un módulo, no
    visibles desde otros módulos
  • Declarar funciones locales a un módulo, no
    visibles desde otros módulos

10
7. Cláusula const
  • Explique el significado de la cláusula const
  • Sólo lectura (lo que es distinto de constante)
  • Explique el significado de
  • const int a
  • int const a
  • const int a
  • int const a
  • int const a const

11
8. Cláusula volatile
  • Dé 3 ejemplos de uso de la cláusula volatile
  • Registros de hardware
  • Variables compartidas entre procesos
  • Variables no automáticas usadas desde una ISR
  • Puede haber una variable const volatile?
  • Sí, un registro de hardware de sólo lectura
  • Qué está mal en esta función?

int square(volatile int ptr) return ptr
ptr
12
9. Manipulación de bits
  • Escriba una instrucción para encender el bit 3 de
    la variable entera a.
  • a a 8
  • a 0x8
  • define BIT(POS) (0x1 ltlt POS)
  • a BIT(3)
  • Escriba una instrucción para apagar el bit 3 de
    a.
  • a BIT(3)

13
Macros para manipular bits
  • Defina la macro MASK(SIZE,POS) para hacer
    máscaras de manipulación de bits
  • Este es un caso general de la macro BIT
  • SIZE es el número de bits de la máscara
  • Asuma números de 16 bits
  • define MASK(SIZE,POS) \
  • ((0xFFFF gtgt (16 SIZE)) ltlt POS)

14
Uso de registros de hardware
T
D
I
M
S
  • define SIZE_MASK 0xF000
  • define TYPE_MASK 0x0300
  • define DIRTY_MASK 0x0080
  • define I_TIME_MASK 0x0040
  • define MODE_MASK 0x0007
  • define SIZE_MASK MASK(4,12)
  • define TYPE_MASK MASK(2,8)
  • define DIRTY_MASK MASK(1,7)
  • define I_TIME_MASK MASK(1,6)
  • define MODE_MASK MASK(3,0)

15
10. Uso de posiciones fijas en memoria
  • Necesitamos poner el valor 0xAA55 en la dirección
    de memoria 0x67A8
  • Podemos usar moldeo de tipos (type casting)
  • int ptr
  • ptr (int )0x67A8
  • ptr 0xAA55
  • Una forma más oscura es
  • (int const)(0x67A8) 0xAA55
  • Escondamos la oscuridad en una macro
  • define MEMORY_ADDRESS_INT(A) ((int
    const)(A))
  • MEMORY_ADDRESS_INT(0x67A8) 0xAA55
Write a Comment
User Comments (0)
About PowerShow.com