Documente Academic
Documente Profesional
Documente Cultură
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
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
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
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
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
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)
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
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)
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
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
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.