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! M4anno
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!
4anno
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.
a4anno ‘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