Sunteți pe pagina 1din 47

ANSI C

Tipo de dato Microchip C18 char 8 8 short 16 16 int 16 16 long 32 32 short long (no estandar) 24 long long (C99) 32

HCS08 8 16 16 32 64

HCS12 8 16 32 32 64

TMS470

Software Embebido para la Insustria Automotriz


2 / Author / Date Continental AG

Software Embebido para la Insustria Automotriz


3 / Author / Date Continental AG

Software Embebido para la Insustria Automotriz


4 / Author / Date Continental AG

Software Embebido para la Insustria Automotriz


5 / Author / Date Continental AG

Software Embebido para la Insustria Automotriz


6 / Author / Date Continental AG

Software Embebido para la Insustria Automotriz


7 / Author / Date Continental AG

Software Embebido para la Insustria Automotriz


8 / Author / Date Continental AG

Software Embebido para la Insustria Automotriz


9 / Author / Date Continental AG

Software Embebido para la Insustria Automotriz


10 / Author / Date Continental AG

Software Embebido para la Insustria Automotriz


11 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos


Arreglos. Un arreglo es una regin contigua de memoria donde se colocan variables de un mismo tipo. El acceso a estas variables es mediante un ndice. En C, un arreglo de tamao N , tiene ndices en el rango 0..N -1. Se declaran mediante <tipo> <nombre> [<tamao del arreglo> ];

En C, hay una relacin muy estrecha entre apuntadores y arreglos. De hecho, el nombre de un arreglo no es mas que un puntero constante a una regin de memoria previamente inicializada por el compilador. En algunas arquitecturas, es ms eficiente usar aritmtica de punteros para referenciar arreglos, que el uso de ndices (Lo cual no es el caso en ARM, donde es ms eficiente el indexamiento que la aritmtica de punteros

En C, no es ilegal indexar un arreglo con un nmero negativo o mayor que su tamao lo cual, la gran mayora de las veces, es un error de fatales consecuencias

Software Embebido para la Insustria Automotriz


12 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos

Software Embebido para la Insustria Automotriz


13 / Author / Date Continental AG

Manejo de memoria Tipos de datos compuestos


Estructuras. Las estructuras nos permiten encapsular dentro de un solo tipo diversas variables de diferentes tipos. La forma de acceder a estas variables, es mediante el operador punto.

Software Embebido para la Insustria Automotriz


14 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos


Internamente, el nombre de una estructura no es mas que un puntero a la regin de memoria donde se guarda. Cada campo, se interpreta como un desplazamiento constante desde ese punto

Software Embebido para la Insustria Automotriz


15 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos


Los campos de una estructura no siempre son colocados en posiciones contiguas de memoria (como en el caso de los elementos de un arreglo). En arquitecturas donde es ms eficiente la lectura de memoria en posiciones con alineacin 2 o 4, el compilador puede colocar los campos de una estructura en posiciones no contiguas de memoria. En muchas aplicaciones esto puede no ser lo adecuado

Forzando la alineacin a 4, la estructura POINT tiene un tamao de 12 bytes. Pasando por alto la alineacin, la estructura tiene un tamao de 9 bytes. La alineacin de los campos de una estructura es dependiente del compilador. Generalmente es mediante un pragma

Software Embebido para la Insustria Automotriz


16 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos


Las estructuras pueden ser copiadas entre ellas por simple asignacin

Aunque es posible pasar una estructura como parmetro a una funcin, esto no es eficiente, ya que el cdigo hace una copia de la estructura en la pila. En su lugar, es mejor pasar un puntero a la estructura (con el modificador const si queremos indicar que es de solo lectura) y acceder a los campos mediante el operador flecha

Software Embebido para la Insustria Automotriz


17 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos


Uniones. Las uniones se declaran de forma parecida a las estructuras, solo que todas las variables declaradas comporten la misma regin de memoria (se traslapan). El tamao de la unin es el mnimo para contener al campo de mayor tamao.

Un uso posible de las uniones es en situaciones de escasa memoria, pero que tenemos variables que se pueden traslapar (un uso bastante peligroso por cierto). En sistemas embebidos, el uso ms frecuente de las uniones es para dar diferentes interpretaciones a una misma regin de memoria

Software Embebido para la Insustria Automotriz


18 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos

Software Embebido para la Insustria Automotriz


19 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos


Las uniones (y estructuras) annimas, son una caracterstica de C++ que muchos compiladores de C soportan (mas no es parte del ANSI C). Cualquier unin o estructura que se declare sin nombre es annima, y sus miembros pueden ser usados directamente. Son muy tiles en la definicin de registros del procesador

Software Embebido para la Insustria Automotriz


20 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos


Campos de bits. Los campos de bits, se declaran de forma similar a estructuras. Se utilizan para empaquetar en una variable de tipo byte o word un conjunto de bits, que se usan generalmente como banderas. En arquitecturas que soportan instrucciones de manejo de bits, es igual o ms eficiente el uso de campo de bits para representar banderas, que el usar variables a los cuales hay que aplicarles mascaras para leer los bits

Los campos de bits, junto con las uniones, son muy utilizados para definir los registros del procesador que estn mapeados en memoria

El orden en que se interpretan los bits (cual queda como LSB o MSB) de dependiente del compilador y debe ser definido generalmente mediante un pragma u opcin del compilador. (Un ejemplo es el pragma bitfields de IAR)

El tamao de un campo de bit es dependiente de un compilador y es generalmente entre un byte y el tamao del tipo int del microprocesador (8, 16 o 32 bits)

Software Embebido para la Insustria Automotriz


21 / Author / Date Continental AG

Manejo de la memoria Tipos de datos compuestos

Software Embebido para la Insustria Automotriz


22 / Author / Date Continental AG

Manejo de la memoria Acceso a registros del procesador


Los microcontroladores hacen uso extensivo de muchos registros para configurar perifricos de entrada/salida. Estos registros normalmente estn mapeados en direcciones absolutas de memoria.

Una forma ya poco usada (por ser poco eficiente) de acceder a estos registros es mediante apuntadores a ellos. Esta forma de acceder a las registros es completamente compatible con el estndar ANSI (siempre que cuidemos la cuestin de si el micro es little o big endian

Software Embebido para la Insustria Automotriz


23 / Author / Date Continental AG

Manejo de la memoria Acceso a registros del procesador


Lo ms comn actualmente es desviarse del ANSI y declarar al registro como una variable con una posicin absoluta de memoria. Para facilitar el trabajo con el registro, en la declaracin de tipo de este podemos usar uniones, estructuras y campos de bits para darle la interpretacin ms adecuado a los bits o bytes del registro. Es imperativo marcar a los registros como volatile, ya que estos cambian debido a eventos externos a nuestro cdigo

Software Embebido para la Insustria Automotriz


24 / Author / Date Continental AG

Manejo de la memoria Acceso a registros del procesador


La@ indica la direccion en la que se encuentra el registro.

Software Embebido para la Insustria Automotriz


25 / Author / Date Continental AG

Enumerated data types


Una variable enum son valores simbolicos definidos dentro de la declaracion del enum. Internamente, un enum es tratado como un signed integer. El compilador no revisa la variable contra los valores definidos en la lista del enumerado. Es por eso que los enum deben ser solo usadas en asignaciones y comparaciones. Los valores enumerados puedes ser usados como macros, lo que significa que son conocidos en tiempo de compilacion y pueden ser usados en estructuras switch. Variables enum son utilizadas para representar estados y transiciones dentro de un automata.

Software Embebido para la Insustria Automotriz


26 / Author / Date Continental AG

Ejecucin del cdigo Framework de ejecucin de C


Ejecutar un cdigo en C requiere antes de cualquier cosa: Inicializar todas las variables globales Inicializar la pila

Llamar nuestra funcin de entrada (por lo general, la funcin main)

Este cdigo generalmente se conoce como de inicio (startup), adicionalmente, inicializa cualquier otra caracterstica til del microcontrolador (reloj, regiones de memoria, habilitar interrupciones, watchdog, etc)

Otra caracterstica del cdigo de inicio, es que esta escrito en ensamblador, y es de hecho un mdulo en ensamblador que se enlaza con el cdigo C mediante el linker. La mayora de los compiladores proporcionan este cdigo el cual debemos adaptar a nuestras necesidades. (Muchas veces se puede quedar tal y como esta)

Software Embebido para la Insustria Automotriz


27 / Author / Date Continental AG

Ejecucin del cdigo Funciones en C


La unidad de cdigo en C es la funcin. Las funciones en C reciben argumentos como entrada y regresan un solo valor de salida. Las funciones hace un uso intensivo de la pila (de ah su importancia en C). Llamar a una funcin en C implica: Guardar en la pila (o en algn registro especial) la direccin de retorno de la funcin Guardar en la pila (o registros especiales) cualquier registro que sea necesario respaldar ante cualquier modificacin que pueda realizar la funcin Copiar los argumentos de llamada en la pila o en registros Asignar en la pila espacio para las variables locales

Al terminar de ejecutarse una funcin, esta debe: Almacenar en un registro el valor de retorno Quitar de la pila (si es necesario) las variables locales Quitar de la pila (si es necesario) los argumentos Quitar de la pila (si es necesario) cualquier valor de registro que halla que restaurar Quitar de la pila (si es necesario) el valor de retorno de la funcin y saltar a esa direccin

Software Embebido para la Insustria Automotriz


28 / Author / Date Continental AG

Ejecucin del cdigo Funciones en C


De manera general, as es como se ve la pila cuando se llama a una funcin en C

Software Embebido para la Insustria Automotriz


29 / Author / Date Continental AG

Ejecucin del cdigo Funciones en C

Software Embebido para la Insustria Automotriz


30 / Author / Date Continental AG

Ejecucin del cdigo Funciones en C


En C, los argumentos se pasan en la pila comenzando por el ltimo y terminando con el primero. Esto no es arbitrario, ya que siendo C un lenguaje que permite llamar a funciones con un nmero variable de argumentos, el que el primer argumento quede en el tope de la pila (o apuntado por el frame pointer), nos permite almacenar ah, alguna forma de saber el nmero de argumentos siguientes. Otros lenguajes de programacin siguen la convencin de Pascal, de pasar los argumentos comenzando con el primero y terminando en el ltimo

En C el nombre de una funcin no es mas que la direccin de memoria a la que debe saltar el cdigo. Es posible por lo tanto, crear punteros a funcin

Los punteros a funcin deben ser usados con mucho cuidado, y no abusar de ellos, ya que su sintaxis de declaracin puede convertirse en algo bastante ilegible y difcil de mantener, especialmente cuando se mezclan con arreglos

Software Embebido para la Insustria Automotriz


31 / Author / Date Continental AG

Ejecucin del cdigo Funciones en C

Software Embebido para la Insustria Automotriz


32 / Author / Date Continental AG

Ejecucin del cdigo Funciones en C

Software Embebido para la Insustria Automotriz


33 / Author / Date Continental AG

Ejecucin del cdigo Funciones en C


Los punteros a funciones se pueden usar para realizar implementaciones eficientes de manejadores de eventos o de estados. Pueden sustituir secuencias largas de switch-cases. Tambin se usan mucho en el patrn de diseo Observador / Notificador

Software Embebido para la Insustria Automotriz


34 / Author / Date Continental AG

Ejecucin del cdigo Funciones en C


Es frecuente sustituir declaraciones complejas de apuntadores a funciones con typedefs

Software Embebido para la Insustria Automotriz


35 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo


La aritmtica ms eficiente siempre va a ser la de los enteros (segn el tamao de la palabra del micro) sin signo. Dependiendo del procesador, la aritmtica con signo puede o no puede ser igual de eficiente que la aritmtica sin signo.

Internamente, muchas operaciones se realizan de forma diferente dependiendo de si los operandos tienen signo o no

Muchos microcontroladores no tienen instrucciones para multiplicar, dividir o realizar la operacin mdulo, por lo que estas operaciones pueden resultar bastante ineficientes en muchas arquitecturas.

La aritmtica de punto flotante es realizada mediante llamadas a libreras del microprocesador y es bastante ineficiente.

Software Embebido para la Insustria Automotriz


36 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo

Software Embebido para la Insustria Automotriz


37 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo


La asignacin entre tipos distintos ocurre bajo las siguientes reglas Si es entre enteros de mayor tamao a otro de menor tamao, se truncan bytes mas significativos del entero de mayor tamao Si es de un entero de menor tamao a otro de mayor tamao, se realiza la extensin de signo o la extensin con ceros, segn el tipo de mayor tamao sea con signo o sin signo Si es de un flotante a un entero, se elimina la parte fraccionario del flotante Si es de un flotante de menor tamao a otro de mayor tamao, se convierte el de menor tamao al de mayor tamao

Si es de un flotante de mayor tamao a uno de menor tamao el resultado es impredecible


Se pueden hacer conversiones entre enteros y apuntadores pero no es una prctica recomendable

Software Embebido para la Insustria Automotriz


38 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo

Software Embebido para la Insustria Automotriz


39 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo


Como regla general, cualquier operacin aritmtica-lgica se debe realizar entre tipos de igual tamao y evitar mezclar tipos con signo y sin signo en la misma expresin. Si es necesario, realizar casts al tipo adecuado. Los tipos enteros tienen un rango, el cual es igual entre un tipo sin signo y otro con signo. El rango es tal que char < short < int < long Las reglas bajo las cuales se realizan las conversiones implcitas de tipo en expresiones son: Si en la expresin, aparece un tipo real (float, double o long double ), todo es convertido al tipo ms grande sin perder dominio (esto es, al realizar la conversin se toma en cuenta si el nmero es con signo o sin signo para respetarlo al momento de convertir al tipo real) Si la conversin es entre enteros, la secuencia es ms compleja: Cualquier tipo de menor rango que int (char, short) independientemente del signo, se convierte a int. En el caso de que short sea del mismo tamao que int, se convierten a unsigned int en caso de que halla un unsigned short. Si la operacin es entre tipos con igual signo, el de menor rango es convertido al de mayor rango Si el tipo sin signo tiene un rango mayor o igual al tipo con signo, el tipo con signo se convierte al del tipo sin signo. Si el rango del tipo con signo es mayor y a la vez su tamao es mayor, entonces el tipo sin signo se convierte al del tipo con signo. Si no, ambos operandos se convierten al tipo sin signo con el mismo rango que el tipo sin signo
Software Embebido para la Insustria Automotriz
40 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo

Software Embebido para la Insustria Automotriz


41 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo


Las conversiones implcitas de tipo pueden ocasionar resultados inesperados en comparaciones de magnitud

Software Embebido para la Insustria Automotriz


42 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo

Software Embebido para la Insustria Automotriz


43 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo

Software Embebido para la Insustria Automotriz


44 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo

Software Embebido para la Insustria Automotriz


45 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo


Los corrimientos son diferentes dependiendo de si la variable es con signo o sin signo. De forma similar, se realiza la promocin a int de tipos ms pequeos

Software Embebido para la Insustria Automotriz


46 / Author / Date Continental AG

Ejecucin del cdigo Operaciones aritmticas y de bits. Conversiones de tipo


Algunas optimizaciones aritmticas comunes

Software Embebido para la Insustria Automotriz


47 / Author / Date Continental AG

S-ar putea să vă placă și