Está en la página 1de 4
anno ‘Biacm Mend Principal Aetualdad / Noticias Por qué donar? Registrarse Enlaces Web Foros dana S-ree BGO crea mas por menos: ‘UnIDE completo con una Salecin de posts ccs; ce Indice Programacion Picenc Indice pricticas PIC c Indice Sistemas Embebicos indice practicas Arduino curso Pica2 'S0CC (Small Device compiler) en Windows Actualizar a Ubuntu 9:40 (Karmic Koala) Pragramacién de Miocontroadores Piclenc con Uouney izange et 1002 Perticones y Slstemas de archivos nun ‘Apures inormsica/Elecronica- Apurtes forma / Electrica Curso de programacién PIC en C con CCS, Punteros (1) Detaies Voter at indice Empazamos hoy un tems muy importante an C como son los puntafes, veremas que son, para que sitven y Tos precauciones que tenemes que tener en cuents cuando Tos ublcemes {2Que 0s un puntero? [Un puntero es una vi able ms, pero que almacena la dleccién de memoria de ote variable. {Para que siven los punteros? 1 conocer a eraccién de memora de una variable es muy Util en C, como funciones principales que tienen fos punters podemos citar las sigulertes: ‘+ pueden proporconar una forma répida de accedero referenciar a tlpes de dados compuestos ‘como arays, estructuras y enumeraiones, «+ Sirven para pasar variables por referencla las funciones. 1 Segun los eases puaden optimizar el cbciga y anar'ar recursos de memos, we eradores disponge para manipular ls puntoros? 1. £1 primer operador de punteos es &, un operader monario que devuelve la dieccién de memoria dal ‘perando, (Un operador monario es aquel que solo requlere un operand), or ejemplo: mateontadors CColoca en m la direcién de memoria dela variable contador, se la dreccn del registro del PIC onde se ha guerdedo Ia variable contader. are comprencerlo mejor, susongamos que la vans contador utilize In pasicién de memos oxOC {onimer resist de propésit general del Sonic 0 Gel PIC T6FB4A) pera guerder su valor, tambisn Supongamos que el valor de contador es 100. Después dela asignacén, m tendrd el valor de OxOC. Se ‘uece pensaren & come “la girccisn se", Por tant, la sentencia anterior ge 'gracion significa. *m Fecibe fa dieceiin de contador 2. segundo operador de punteros es *, que es el complementar de &. Es oto operader monate que Gevuelve a valor dela varioble ubicada en la cireccibn que ‘se specifica. Por ejemple, si m contiene ireceibn de memoria dela variable contador, entances: etm: Colocars el valor de contador en 9. Sipuendo con al ejemplo, q tend el valor 300, ye que 100 as fo {Guardado en elreleto O¥0C, que es le treccibn de memoria gue Ince m Piensa en * como "valor en Ia divecidn. En este caso, la sentencia de asignacién significa que recibe flvalor ens creccion my. Como vemos y es0 puede despistar un poco, ol simbolo de estos operadores coineige con Ios fperedores (8) AND léglco y el operadar matemdtca (=) Mullplicacén [No hay ningun problema en este porque el compllador se encarca ce alferenclarlos segin el contexto onde estén colseados 13. El terceroperador ullzado es: -> y se utiliza para acceder a tipo de datos compuestes en C como las estrcturas, lo veremos més adelante cuando vearwes est tipo de dates, {UCome se declara una varia puntero? Las variables que vayan a contenerdieeciones de memoria, 9 punteros, como se laman en C, deben {eclararse eslocanco un" gelante del nombre de la'varanle, Este Incica sl compar que v2 ontener un puntero 2 se tps de variable, Por eomplo, para daclaare core puntere a cardcter (char) ‘senbremos lo siguiente char te; ‘Agu, no o8 un cardcter, sno un puntere aun cardctr, el ipo de dato al que apunta un puntere, en ‘este'caso char, se denomina tipe base del puntero. Bueno puede que alguien se prequnte lo siguiente {de que tipo #4 Ie propia variable puntero? Puce esta clare que tess que ser de un tipa de datos uve {amano 200 suficlente para guardar una dieccién de memoria tal y comme este definida porta argutecture del microcertrolador que se utlie. Por ejemplo si utllzames el PIC 167844, con un tipo de oto entero Ge 8 Dis {il8)serfosutclente para eireccionor todos los registros de este PIC, pero ese etpdhwww aquhayapurtes comicamponertlcorterlaricle42-micracanladares/171-cu'so-de-programacion-pc-en-c-con-ces-puntras-1 Him! M4 anno Algunas rezones pare Instalacién de Ubuntu 9.04 paso a CCompllacores € para brogramacién PIC en (Comandos Unix/Linux OOO Tago el contenido de este sito est bajo una ‘Apures ivormsica/Elecrénica- Apurtes forms / Electrica tipo de datos seria insuficlente para dieccionar toda la memoria de otro PIC con mayor memoria RAM tp que nace CCS es establecer como tipo Ge Gato por defecte nara Ios punteros al entero de 16 bits {inti6 en ef Upo de date native de CCS) para que sea compatile con tados los PICs que atualmente Se pueden programar con CCS, pero da a apcian de modiicar ese pardmeto a tavés de la directva, ‘Fdevice Girectiva se encuentra Incluce en el achive de cabecera y en la siguiente instrucelén se define ara gue el complador le asigne un tipo de cato Ine (1 byte) al PIC 16"8AA para las varadles punter, avice PICLetBAA == Sueno, es une maners de ahorrar recursos cuando utiicemos punters en PICs con paca memoria RAM, Peto en la mayor de 0s casos la opclén por defecto sera la comecta y ademés de no tener que preccupares por ello, aromas porablidad en nuestro cécigo, al saber que es compatible para todos tos Pics Lo que si es responsabilidad del programador en cada momento es el tener en cuenta que un puntero bio debe ser usado pord apuniar a datos que sean del Upo base del punter declorado (este tipo ce cosas se vers mas adelante cuando veames las precaucianes que tenemos que tener en cuenta cuando Nota: se puede mezcar en una misma sentenca Ie declracién de varlables puntero con vara normale, por ejemplo, ln x, *¥, 25 //6eclara x, 2 como vatables de pe entero, « y coma puntero un tipo entero Vamos 3 ver un ejemplo del uso de puntaros S| fae cehay (clock tocoee) Ge: | Sose P2252 ¢onudess0e,parsty=nxnttaPI 6 revePIN 92 06¢508) 26: | vous matng) « 25: | nt fuente destin G2! | SpE" 7Feeelarectén de p cone un puntera ue tipo 12:| fugreent://asigno ei valor 4 2 ta variable fuent 412'| pebfuontey //al puntero p se le asigna ta direccion de nonoria de 1a varsatie fuente 13:| Erstinostp;// te"asigno o is vsriatle destino el valor Ge fuente a sravés del punvere p 45:| simostcanos tos resultados en 12 temninat 48:| pranté(cts varfable fuence Siene In eneccton: (ne0)\r"phfuenteds 17.| prantetsta varlable cestino tiene la sineccton: We (hex sades8sRa): 438,| pruncetsia variable punters p tiene is uireccton? Xe (00) \esp)s 26:| prantetsta variable fuepte tiene el valor de: ae", fuented: Bi|| frineetvacstino tiene el valor’ de! A dgnactan hacha'eon al puntero a\"°,¢9)5 22)| prineet“ts"tana\aato de da variable panterg es daz Se\n byte” s0200°09)95 aly La sala del programa_asi como el valor de los registros dl PIC se pueden visualizar si simulamos ‘ants avons comentario {ceclaracin de las variables punter, Para ella coma he dicho ya, hay que modifier Is ceca ‘Fdovice on ol archivo ce cabecers sgt se muestra en Is figura de’ aba: tpdhwww aquhayapurtes comicamponertlcorterlaricle42-micracanladares/171-cu'so-de-programacion-pc-en-c-con-ces-puntras-1 Him! 4 anno tpdhwww aquhayapurtes comicamponertlcorterlaricle42-micracanladares/171-cu'so-de-programacion-pc-en-c-con-ces-puntras-1 Him! ‘Apures iformsica/Elecrénica Apurtes forma / Electrica Podemes ver al tamafia que tiene la variable puntero par medio del oparader sizeof), 51 no modifies cl pardmeta dele drecive #dovice versis que el tomaha en exe cana es de ? tes Nota: cada vez que se modifique alguna lbreria pertoneciente a CCS as conveniante hacer na copia Ge cienalibreis en la carpeta de nuestro proyecto y moditcsra al, scoréese en este caso de Ineult ‘nel programa principale archive de cabacera entre comiias dobles y no ene Ios signos <>. En a declaracién de las variables el compiled reserva las posiciones cle memoria RAM necesarias pare poder contener los datos de las variables Gaclaracas, como los registios dela RAM de propOsito {general del PIC 16F0K san de un byte (8 bits) de tamara, las posicones de memoria reservacas por el Eompllagor dependerdn del tipo de dato con el que se ha declarado la variable, por ejemplo una erable declorada como ipo entero (int) necesita un solo registro para almacaner su valor, Una ‘arable declarada como tp Flat necesitard 4 regisvos (32 bts) para alitacenar su valar RAM P= fuente int fuente, destino; int*p; a destino FF > ooh En al siguiente paso se produce la asignacién de datos a la varable fuente y ala variable punto p, coma ves on la Tigra se abalo, el ato almacenago en'p es la dieccion Ge memoria de le variable fuer pre aul sul del gue 9 apura la vavable fuente y_ qn vorble pntereB ‘quede vinculada 8 es direc ‘Anore nacemas una asignacinindrecta de datos utiizenda el operador de indveceiin (%). Como se ‘Yen la figure de abajo asignamos ale varable desine el valor que tens lo vanable fuente inirectarente a raves del punter. destino"; Sueno ahora tenia pensado hacer un ejemplo con los posibles erores que podemos cometer ala hora {e ulllzer punter, pero por hoy lo tengo ce dejar, sui28e en el préximo aries. a4 anno ‘Apurtes inormética Elecrénica- ApuxtesIfoematea | Electrica ®.0: i vals agin ere algo que aportar al respecte serfa de agradecer que lo comentarals en el Volver al indice tpdhwww aquhayapurtes comicamponertlcorterlaricle42-micracanladares/171-cu'so-de-programacion-pc-en-c-con-ces-puntras-1 Him! “4

También podría gustarte