Anda di halaman 1dari 4

PREPROCESADOR

Un preprocesador es una parte integral de cada compilador. Su funcin es de reconocer y ejecutar las instrucciones del preprocesador. Qu son instrucciones del preprocesador? Son instrucciones especiales que no pertenecen al lenguaje Basic, sino que estn integrados en el compilador. Antes de compilar, el compilador inicia al preprocesador que pasa por el programa en bsqueda de estas instrucciones. Si encuentra una, el preprocesador las sustituir por otro texto que, dependiendo del tipo de comando, puede ser un archivo (comando include) o slo una corta sentencia de caracteres (comando define). Entonces, el proceso de compilar puede empezar. Las instrucciones pueden estar en cualquier parte del programa fuente y se refieren solamente a la parte del programa en la que aparecen hasta el final del programa.

DIRECTIVA DEL PREPROCESADOR INCLUDE


Muchos programas repiten con frecuencia el mismo conjunto de comandos un par de veces. Para escribir un programa ms rpidamente, estos comandos y declaraciones se agrupan normalmente en los mdulos particulares que se pueden incluir en el programa con facilidad por medio de la directiva include. Para decir con ms precisin, la directiva include importa el texto del otro documento en el programa, sea un conjunto de comandos o bien un conjunto de comentarios etc.

COMPILACIN CONDICIONAL

Las directivas de la compilacin condicional se utilizan generalmente para facilitar la modificacin y compilacin de los programas fuente para los diferentes microcontroladores. El compilador mikroBasic PRO for PIC soporta a la compilacin condicional. Todas las directivas de la compilacin condicional deben terminar dentro del mdulo en el que han empezado.

DIRECTIVAS #IF, #ELIF, #ELSE, Y #ENDIF


Las directivas condicionales #if, #elif, #else y #endif se ejecutan de manera similar a las sentencias condicionales comunes en Basic. Si una expresin escrita despus de #if tiene un valor distinto de cero, las lneas de programa que siguen a la directiva #if sern interpretadas como un cdigo de programa vlido y compiladas en cdigo hex. La sintaxis es la siguiente:

#if constant_expression_1 cero, <section_1> [#elif constant_expression_2 cero, <section_2>] ... [#elif constant_expression_n cero, <section_n>] [#else secciones anteriores <final_section>] #endif

'Si expresin_de_constante_1 no es 'seccin_1 ser compilada 'Si expresin_de_constante_2 no es 'seccin_2 ser compilada 'Si expresin_de_constante_n no es 'seccin_n ser compilada 'Si no se compila ninguna de las 'seccin_final ser compilada 'Final de la directiva #if

Cada directiva #if en un archivo fuente debe terminar por una directiva #endif de cierre correspondiente. Entre las directivas #if y #endif puede haber cualquier nmero de las directivas #elif, pero slo se permite una directiva #else. Si est presente la directiva #else, debe ser la ltima directiva antes de la directiva #endif. Seccin puede ser cualquier cdigo de programa reconocido por el compilador o preprocesador. El preprocesador selecciona una seccin al evaluar la expresin_de_constante que sigue a cada directiva #if o #elif hasta encontrar una expresin_de_constante verdadera (distinta de cero). Si todas las expresiones-constantes son evaluadas como falsas o no aparecen ninguna directiva #elif, el preprocesador selecciona la seccin_final que sigue a la clusula #else. Si se omite la clusula #else y todas las expresiones_constantes en el bloque #if son evaluadas como falsas, no se seleccionar ninguna seccin para un procesamiento posterior.

Por ltimo, resulta que solamente una seccin del cdigo ser compilada, aunque est vaca.

PUNTEROS
Como ya hemos mencionado, a cada objeto en el programa (variable, procedimiento, subrutina etc.) se le asigna una direccin de memoria particular. Al declarar una variable en el programa el compilador le asigna automticamente una localidad de la memoria RAMlibre. Durante la programacin, estas direcciones no son visibles para los programadores. La posibilidad de acceder a los diferentes objetos por sus nombres

(identificadores) en vez de por sus direcciones es una de las ventajas principales de los lenguajes de programacin de alto nivel. En realidad, es ms fcil manejar las palabras (nombres) que los nmeros. Adems, el compilador se encarga de los objetos asociados y de sus direcciones. Direccionar los objetos al especificar sus nombres es denominado direccionamiento directo.

Sin embargo, a veces se necesita utilizar las direcciones de localidades de memoria. En este caso se utilizan los punteros - variables que almacenan la direccin de memoria de un objeto. Entonces, es posible acceder a los objetos que utilizan solamente los punteros. Por eso esta forma de direccionar es denominada direccionamiento indirecto. Antes de utilizar un puntero es necesario declarar su tipo de datos. Solo hay que anteponer el signo de intercalacin (^) al tipo.

dim pointer_p as ^word

' puntero_p apunta al dato de tipo word

Se le recomienda almacenar una varible en una localidad de memoria RAM especfica, luego se debe utilizar la directiva absolute en el programa de la siguiente manera:

dim variable_a as word absolute 12 ' variable_a ocupar una palabra ' (16 bits) en la direccin 12
Para acceder a los datos en la localidad de memoria del puntero, necesita posponer el signo de la intercalacin (^) al nombre del puntero. Veamos el ejemplo de la declaracin del anteriormente mencionado puntero puntero_p , que apunta a la palabra (en este caso, es anteriormente definida variable_a almacenada en la direccin 12 en la RAM). A la variable apuntada variable_a se le asigna el valor 26:

dim pointer_p as ^word 'Puntero_p a punta al dato de tipo word ... ... pointer_p = 12 'Puntero_p apunta a la direccin de memoria 12 ... puntero_p^ = 26 'Variable a en la localidad de memoria 12 tiene valor 2 'Similar a la directiva absolute utilizada para las variables, la 'directiva org especifica la direccin inicial de una rutina en la 'memoria ROM. Se aade a la declaracin de la rutina. Por ejemplo: sub procedure proc(dim par as word) org 0x200 ' El procedimiento empezar ... ' en la direccin 0x200 end sub

En este caso, al puntero puntero_p se le asigna el valor 12 (puntero_p =12), lo que significa que la direccin de memoria 12 est especificada.

Si quiere cambiar el valor de una variable apuntada, basta con cambiar el valor del puntero y posponer el signo de intercalacin (^) al valor. Veamos la figura a la derecha: a la variable variable_a en la direccin 12 se le asigna el valor 26 por medio del puntero puntero_p. Los punteros pueden apuntar a los datos almacenados en cualquier espacio de memoria disponible y pueden residir en cualquier espacio de memoria disponible menos en el espacio de memoria de programa (ROM).

Anda mungkin juga menyukai