Sie sind auf Seite 1von 14

23/10/2017

The Connected MCU Lab


The Connected MCU Lab Mdulo 4: Concurrencia Bsica e
Mdulo 4: Concurrencia Bsica e Interrupciones
Interrupciones Versin en Espaol.
Dr. Alexander G. Dean
Dept. of Electrical and Computer Engineering Omar Alvarado Cando
North Carolina State University Escuela de Ingeniera Electrnica
1/26/2016, Version 1.5 Universidad del Azuay
10/02/2017, Versin 1.0

Copyright Imagination Technologies 2016 Module 4 p.1 Copyright Imagination Technologies 2016 Module 4 p.2

Agenda
1. Visin general del reto de planificacin de software
2. Conceptos de tarea
3. Mejorar la capacidad de respuesta mediante el uso de mquinas de estado finito Seccin 1:
4. Conceptos de interrupcin Visin general del reto de
5. Uso de interrupciones planificacin de software

Copyright Imagination Technologies 2016 Module 4 p.3 Copyright Imagination Technologies 2016 Module 4 p.4

1
23/10/2017

Probando el cdigo de demostracin Examinando el problema


Considere el programa de LEDs 1-4 BTN2
Compilar y cargar el proyecto barrido de LEDs de la Se encuesta el botn BTN2
Demo_Basic_Concurrency prctica 3, con una velocidad
de parpadeo ms lenta
Basado en el Lab 3
Problemas:
Utiliza demoras mayores de tiempo Algunas pulsaciones del BTN2 Nada Pasa!
para poder percibirlas son ignoradas Barrido LEDs
Ejecutar el cdigo y pulsar los Tiene que mantener
botones presionado BTN2 hasta que el
programa lo encueste (lea), Nada Pasa!
Cuan rpido responde el puede ser un retraso largo
programa al presionar los El programa lee los botones
pulsantes? una vez por ciclo de escaneo
Se perdi alguna pulsacin? de LED
El ciclo de escaneado de LED El LEDs finalmente
se apaga!
tarda mucho tiempo en
completarse
Copyright Imagination Technologies 2016 Module 4 p.5 Copyright Imagination Technologies 2016 Module 4 p.6

Planificacin de Programacin
Cmo compartir el tiempo de la CPU entre varias actividades de software
Un sistema empotrado tpico tiene mltiples actividades que deben ser
gestionadas
Algunas son realizadas por perifricos de hardware, otras realizadas por software en
el CPU
Estas actividades tienen requisitos de tiempo, algunos ms crticos que otros
Seccin 2:
Ejemplo: lectura de botones/interruptores, barrido de LEDs Concepto de Tarea
Queremos que parezca que un ncleo de CPU hace muchas cosas
simultneamente (al mismo tiempo)
Incluso con un procesador multincleo, por lo general tenemos ms actividades de
software que ncleos del procesador
Cmo compartimos el tiempo del CPU entre las actividades de software?
Cmo simulamos la concurrencia entre las actividades de software?
Cmo realizamos la planificacin de tareas?
Copyright Imagination Technologies 2016 Module 4 p.7 Copyright Imagination Technologies 2016 Module 4 p.8

2
23/10/2017

Tareas: Qu y Por qu? Usando Tareas para Barrido LED


Una mejor estructura de cdigo simplifica el desarrollo Descripcin general del diseo de Software
Cdigo para
Tarea: Cdigo que realiza una actividad Requisitos
manejo de
determinada o un conjunto de actividades
pulsantes Al pulsar BTN1 acelera la velocidad de barrido
estrechamente relacionadas
extraer para Al pulsar BTN2 apaga los LEDs tan pronto como sea
Encender los LEDs crear una tarea TASK_Read
posible
Leer los botones _Switches
Tareas
Simplifica el desarrollo: Cdigo para TASK_Read_Switches gestiona los botones
Agrupa las funcionalidades relacionas manejo de G_LED_Scan_Delay G_Allow_Lit_LEDs
LEDs TASK_Scan_LEDS_Once encender y apagar los
Separa las funcionalidades no relacionadas LEDs, realiza demoras de tiempo
extraer para
Mejora la depuracin, el mantenimiento y la crear una Agregue dos variables para la comunicacin entre la tarea
extensin. TASK_Scan_
tarea e ISR
LEDs_Once
Cada tarea tiene una funcin raz de tarea Variable G_LED_Scan_Delay define velocidad del
Funcin raz de tarea puede llamar a otras barrido
funciones segn sea necesario Variable G_Allow_Lit_LEDs es una flag que indica si los
LEDS pueden ser encendidos o no
Copyright Imagination Technologies 2016 Module 4 p.9 Copyright Imagination Technologies 2016 Module 4 p.10

Declarando Variables Compartidas Tarea para gestin de interruptores

Declararlas en el archivo user.c, fuera de todas Variable G_Allow_Lit_LEDs


las funciones
Visible por todas las funciones dentro del
archivo La funcin TASK_Scan_LEDs_Once utiliza
esta variable como mscara para decidir si
Use el prefijo G_ en el nombre de la variable
encender o no los LEDs.
Estilo de cdigo: indica al desarrollador que la LED_state & 0 = 0: La mascara de 0 siempre
variable es global, compartida apagara el LED. independiente del valor de
Establecer los valores iniciales de las variables LED_state
Permitir a los LEDs que sean encendidos LED_state & 1 = LED_state: La mascara de 1
permite que el valor de los LEDs lo establezca
Establecer el barrido en velocidad lenta
LED_state

Copyright Imagination Technologies 2016 Module 4 p.11 Copyright Imagination Technologies 2016 Module 4 p.12

3
23/10/2017

Tarea para gestin de LEDs Planificador para el llamado de taeras Scheduler

Copyright Imagination Technologies 2016 Module 4 p.13 Copyright Imagination Technologies 2016 Module 4 p.14

Probando el Cdigo Ejemplo Planificador de ejecucin de tareas


Que cdigo esta funcionado, y dnde?
Abra el proyecto Scan_LEDs_with_Tasks
Demo_Basic_Concurrency_Tasks
TASK_Read_Switches
En Scan_LEDs_with_Tasks, use
TASK_Scan_LEDs_Once
TASK_Scan_LEDs_Once()
Compile y cargue el cdigo Demora Mxima desde la activacin del pulsante
hasta que los LEDs respondan
Ejecute el programa y pulse los Scan_LEDs_with_Tasks
botones
Acta como un planificador de tareas, llamando a cada funcin raz de tarea
Todava funciona? Debera.
Nunca para de funcionar
Responde ms rpido? No, casi igual.
Cada tarea se ejecuta hasta su finalizacin y, a continuacin, devuelve el control al
Reconoce ms pulsaciones del botn? planificador de tareas
No, casi igual.
El retardo mximo de respuesta de los LEDs a la pulsacin de un botn ocurre si
presionamos el interruptor apenas despus de que TASK_Read_Switches termine

Copyright Imagination Technologies 2016 Module 4 p.15 Copyright Imagination Technologies 2016 Module 4 p.16

4
23/10/2017

Mejorando el tiempo de respuesta


Cmo mejorar la velocidad de respuesta a los interruptores?
Cmo podemos encuestar
ms a menudo los botones?

Seccin 3: Podra insertar copias de la


tarea de lectura de
Mejora de la capacidad de interruptores en las tareas ms
lentas
respuesta utilizando mquinas de Retroceso !
estado finito No es una Buena idea!
Dificulta la escritura,
entendimiento,
mantenimiento y depuracin
correcta del cdigo
Mezcla diferentes partes del
cdigo (spaghetti code)

Copyright Imagination Technologies 2016 Module 4 p.17 Copyright Imagination Technologies 2016 Module 4 p.18

Mejorando el tiempo de respuesta Tarea basadas en FSM


Cmo podemos responder ms rpido a los interruptores?
Mejor manera: divida el trabajo de Agregue una variable de estado
la tarea lenta para que devuelva el FSM_state
control al programador antes Estado 1 Debe ser esttico de manera que la
Divida la tarea en una mquina de Estado 2 variable conserve su valor la prxima
estados finita con mltiples vez que se ejecute esta funcin
Estado 3
estados El cdigo de cada estado est en una
Estado 4 declaracin de caso separado
Comience en un estado inicial
definido El comando switch selecciona qu caso de
cdigo se ejecuta en funcin del estado
Cada llamado de la tarea ejecutar Comien
un estado y regresar za aqu FSM
Estado Estado Estado Estado
El cdigo en cada estado 1 2 3 4 Cada estado actualiza el estado FSM para
determinara el estado a ejecutar en indicar qu hacer la prxima vez
el siguiente llamado de la tarea Nota: El caso 4 establece el estado FSM
de nuevo a 1 para repetir el ciclo
Copyright Imagination Technologies 2016 Module 4 p.19 Copyright Imagination Technologies 2016 Module 4 p.20

5
23/10/2017

Probando el cdigo de ejemplo Nuevo itinerario de ejecucin de tareas


Qu cdigo se esta ejecutando y dnde?
Abra el proyecto Scan_LEDs_with_Tasks
Demo_Basic_Concurrency_Tasks
TASK_Scan_LEDs_Once_FSM 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1
En Scan_LEDs_with_Tasks, use
TASK_Scan_LEDs_Once_FSM() TASK_Read_Switches

Compile y cargue el cdigo


Demora mxima desde la presin del
Ejecute y pulse los botones pulsante hasta la reaccin del LED
Todava funciona? Debera. (compare con la demora mxima anterior)
Responde ms rpido? Si, debera ser
mucho mas rpido. El tiempo de respuesta debe ser menor ahora!
Todava pierde pulsaciones? S, pero Aunque hay cierta sobrecarga, es aceptable
muchas menos.
El cdigo est bien organizado en tareas

Copyright Imagination Technologies 2016 Module 4 p.21 Copyright Imagination Technologies 2016 Module 4 p.22

Conceptos avanzados de diseo FSM


El procesamiento del estado tarda demasiado?
Dividirlo y agregar un estado
El cdigo espera que algo suceda?
Dividirlo y agregar un estado Seccin 4:
Acerca del manejo de condicionales? Conceptos de Interrupcin
Agregar un estado para cada rama del condicional

Copyright Imagination Technologies 2016 Module 4 p.23 Copyright Imagination Technologies 2016 Module 4 p.24

6
23/10/2017

Conceptos de Interrupcin Ms conceptos de Interrupcin


Ms de 200 fuentes de interrupcin para MCUs PIC32
Interrupcin Evento: ISR: Cdigo Main-line: Cdigo La mayora de perifricos puede generar Se puede definir un ISR separado para
Pulsante Switch-Reading LED- Scanning
Una seal que indica que un evento particular ha
Interrupcin
interrupciones cada fuente de interrupcin
sucedido (por ejemplo, se ha presionado el
solicitada El valor de entrada digital en el puerto ha El vector apunta al ISR para que ejecute de
interruptor)
cambiado acuerdo a la fuente de interrupcin
Comportamiento del Sistema
Ha expirado el retardo La tabla de vectores contiene todos los
El CPU est ejecutando el cdigo "main-line" del Interrupcin
programa en la funcin principal o una de sus solicitada Medicin de voltaje de entrada analgica vectores de interrupcin
subrutinas, o sub-subrutinas, etc. completa
Tensin de entrada analgica demasiado alta o
Algunos ISRs viene predefinidos en el
La interrupcin obliga al CPU a poner el cdigo en
ejecucin "en espera" y en su lugar ejecutar Rutina demasiado baja sistema
de Tratamiento de interrupcin" (ISR) que maneja el Interrupcin Nuevos datos recibidos Reseteo del MCU
evento. solicitada
Datos enviados con xito
Una vez finalizado el ISR, el CPU vuelve a ejecutar el
main-line. Error de comunicacin

Nunca se llama a una funcin ISR desde cdigo Trasferencia de datos completa

Copyright Imagination Technologies 2016 Module 4 p.25 Copyright Imagination Technologies 2016 Module 4 p.26

Excepciones Controlador de Interrupcin


Muy parecidas a las interrupciones
Principal diferencia: los eventos son eventos de depuracin o anomalas en la
operacin del procesador
Punto de interrupcin del hardware
Instruccin ilegal
Direccin ilegal
Informacin invlida en el sistema de memoria
Componentes del Sistema sin inicializar
Error en el bus Controlador de Interrupcin
Selecciona la interrupcin de mayor prioridad que se ha solicitado y que est habilitada
Enva esa informacin de interrupcin al core para el tratamiento de la excepcin.

Copyright Imagination Technologies 2016 Module 4 p.27 Copyright Imagination Technologies 2016 Module 4 p.28

7
23/10/2017

Tabla del vector del ISR Configuracin de la fuente de Interrupcin


Cdigo en la Memoria
Traslada de la fuente de interrupcin, al ISR ISR_Ext0

Vector ISR_IC1E
Fuente de interrupcin (Direccin del ISR)
ISR_OC1
External Interrupt 0 0x1234_0014
Timer 1 0x1234_0810 Cada interrupcin tiene
Input Capture 1 Error 0x1234_0100 ISR_IC1 Nombre de Vector XC32, usado por el compilador.
Output Compare 1 0x1234_0170
IRQ# Numero de solicitud de interrupcin, usado para referencia
Input Capture 1 0x1234_0300
Nmero de vector de interrupcin: indica al procesador qu ISR debe ejecutarse para esta fuente
ISR_Timer1
Flag: Se ha solicitado la interrupcin, pero an no se ha servido/gestionado/tratado?
Habilitacin: est habilitada o deshabilitada la interrupcin?
Prioridad: seleccione uno de los siete niveles o deshabilitada
Sub prioridad: seleccione uno de los cuatro niveles

Copyright Imagination Technologies 2016 Module 4 p.29 Copyright Imagination Technologies 2016 Module 4 p.30

Prioridades

Section 5:
Por qu tener prioridades?
Determina el orden en el cual las interrupciones
Subprioridad
Divide un nivel de prioridad en 4 niveles ms (0-3).
Usando Interrupciones
simultaneas son atendidos La mayor es 3.
Primero atiende a la interrupcin de mayor Prioridad Natural
prioridad. Despus que su ISR se completa, atiende Fija (Fixed). Se utiliza para romper los lazos de
al siguiente nivel de interrupcin que est solicitada empates con la misma prioridad y subprioridad.
Prioridad Indicado por la posicin en la tabla y el nmero de
Siete niveles (1-7). 7 es al prioridad ms alta, 1 la IRQ (nmero ms bajo es la prioridad ms alta)
mas baja. 0 deshabilita las Fuentes de interrupcin.

Copyright Imagination Technologies 2016 Module 4 p.31 Copyright Imagination Technologies 2016 Module 4 p.32

8
23/10/2017

Usando Interrupciones para el Scan LED Declaracin de las variables compartidas


Descripcin general del diseo del programa
Requisitos
Al presionar BTN1 se acelera la velocidad de barrido
Al presionar BTN2 se borran los LED tan pronto como sea Como antes, para usar las tareas ...
posible
ISR Alcance del archivo: Declarar en el archivo user.c (fuera de todas las funciones) para que sean
Tratamiento
visibles para todas las funciones dentro de ese archivo
TASK_Scan_LEDS encender y apagar los LEDs, realizar
los demoras de temporizacin. Estilo de codificacin: Utilice el prefijo G_ en el nombre de la variable para decirle al desarrollador
G_LED_Scan_Delay G_Allow_Lit_LEDs que la variable es global, compartida
ISR_PortA_Change controlar los conmutadores
Establecer valores iniciales para variables
Agregue dos variables para la comunicacin entre la tarea y la
ISR Y, utilice la palabra clave volatile al declararlos
La variable G_LED_Scan_Delay define la velocidad de barrido Task Indica al compilador que la variable puede cambiar inesperadamente al ejecutar una funcin
La variable G_Allow_Lit_LEDs es una flag que nos dice si los Se utiliza para variables modificadas por interrupcin y registros de hardware.
LEDs pueden estar encendidos o no
Sin estas palabras clave, el compilador puede utilizar una copia local de la variable en lugar de la
real actualizada

Copyright Imagination Technologies 2016 Module 4 p.33 Copyright Imagination Technologies 2016 Module 4 p.34

Pre visualizacin: Interrupciones y Atomicidad Pasos para utilizar interrupciones


Atomicidad - La operacin se puede hacer sin interrupcin
Qu pasa si se interrumpe al CPU mientras se modifica una variable 1. #include encabezados estndar <xc.h> y <sys / attribs.h>
compartida? 2. Crear el ISR utilizando el macro __ISR()
Ejemplo: vector de caracteres que contiene un comando de la red 3. Configurar perifricos para generar interrupciones
Start warp core
Mensaje Recibido "Start warp core" 4. Configurar la entrada del controlador de interrupciones correspondiente a este perifrico.
Start warp core Inicia el cdigo de procesamiento de mensajes, que llega hasta "Star" antes de 1. Habilitar interrupciones desde el perifrico
ser interrumpido con el nuevo comando "Shields up"
Shields up 2. Establecer prioridad de interrupcin
"Shields up" sobrescribe el primer comando en el vector.
3. Restablecer el indicador (flag) de peticin de interrupcin
El cdigo de procesamiento de mensajes ha utilizado las primeras cuatro letras
Starlds up del primer mensaje (Start) y contina utilizando las letras restantes del 5. Establecer el modo de controlador de interrupcin en modo multi-vector
segundo mensaje (lds up) 6. Permitir interrupciones a nivel global
Qu significa "Starlds up"? 7. Habilitar perifricos
La Interrupcin que ocurre en el momento equivocado (mientras se modifica la
variable compartida) podra conducir a la corrupcin de datos Para obtener ms informacin, consulte http://microchip.wikidot.com/32bit:mz-arch-exceptions-usage
Esto se cubrir ms adelante en curso
Copyright Imagination Technologies 2016 Module 4 p.35 Copyright Imagination Technologies 2016 Module 4 p.36

9
23/10/2017

Escribiendo el ISR Escribiendo el ISR


El ISR no tiene parmetros, no hay valor de Determine qu entrada (switch) ha
retorno cambiado
Usar la macro __ISR en la definicin de la BTN2?
ISR
Si se pulsa, apaga los LEDs y limpia la
El Compilador tiene que generar diferente flag
cdigo para la ISR en comparacin con la
subrutina regular Caso contrario activa la flag

Identifique qu fuente de interrupcin BTN1?


debe utilizar este ISR Si se pulsa, selecciona un barrido ms
Nombres definidos en la Tabla 7-2 rpido.
Especificar el nivel de prioridad. En este Caso contrario selecciona slow rate.
caso, software Reseteo la bandera de interrupcin para
IPL1SOFT a IPL7SOFT esta fuente de interrupcin
Ms tarde utilizaremos un mtodo de Si no lo hacemos este ISR se repetir
guardado de contexto ms rpido indefinidamente

Copyright Imagination Technologies 2016 Module 4 p.37 Copyright Imagination Technologies 2016 Module 4 p.38

Cmo trabaja Cmo trabaja


Controlando la velocidad de muestreo Controlando el parpadeo de los LED
ISR_PortA_Change ISR_PortA_Change
Ejecuta porque BTN1 o BTN2 ha cambiado
Ejecuta porque BTN1 o BTN2 ha
cambiado Si BTN2 se pulsa, apaga todos los LEDs y
deshabilita el encendido escribiendo 0 en
Si BTN1 cambia, actualiza G_Allow_Lit_LEDs
G_LED_Scan_delay basado en el Si el BTN2 se suelta, habilita el encendido de
nuevo valor de BTN1 LED escribiendo 1 en G_Allow_Lit_LEDs
TASK_Scan_LEDS
Lee la variable G_Allow_Lit_LEDs
TASK_Scan_LEDS
La usa como una mscara para decidir si
Lee la variable G_LED_Scan_Delay encender o no los LEDs
La usa como parmetro para la 0&X=0
subrutina Delay 1&X=X

Copyright Imagination Technologies 2016 Module 4 p.39 Copyright Imagination Technologies 2016 Module 4 p.40

10
23/10/2017

Se rompen las reglas de tareas? Configurando el PortA


Apagado de LEDs En la funcin InitApp()
Se divide el software entre tareas y ISRs para separar la Comienza con el
funcionalidad cdigo de
Los botones son manejados por ISR_PortA_Change inicializacin
Los LEDs son manejados por TASK_Scan_LEDs existente para los
El cdigo switch-reading apaga los LEDs para un tiempo de LEDs y los botones
Botones

respuesta ms rpido en el PORTA


Este cdigo (flechas rojas) rompe nuestro objetivo de manejar ISR
los LEDs slo con TASK_Scan_LEDs
A veces no queremos hacer esto. G_LED_Scan_Delay G_Allow_Lit_LEDs

"Demasiados cocineros estropean el caldo" - Es difcil escribir un


cdigo correcto, sin errores cuando varias tareas o ISRs administran Task
LEDs

un recurso compartido
Ejemplo: acceder a un dispositivo externo (tarjeta de memoria SD)
requiere una secuencia de acciones para funcionar correctamente. La
interrupcin que ocurre en el momento incorrecto hara que el
sistema funcionar mal.
Copyright Imagination Technologies 2016 Module 4 p.41 Copyright Imagination Technologies 2016 Module 4 p.42

Configurando PortA Configurando el controlador de interrupcin


En la funcin InitApp() En la funcin InitApp()

Encuentre los nombres de los registros del


controlador de interrupciones para la fuente de
Todas las entradas del puerto (PORTA, PORTB, interrupcin de cambio en la entrada del PORTA
etc.) pueden generar interrupcin a raz de un (Tabla 7-2)
cambio en la entrada Enable: IEC3
Habilitacin/Deshabilitacin de la notificacin de Priority: IPC29
cambio para BTN1 y BTN2 (bits 4 and 5)
Flag: IFS3
Registro de Control CNENx: notificacin de
cambio en el.
Escriba 1 en correspondiente bit para habilitar CN
Copyright Imagination Technologies 2016 Module 4 p.43 Copyright Imagination Technologies 2016 Module 4 p.44

11
23/10/2017

Advertencia: Los niveles de prioridad de interrupcin deben coincidir Configurando el control de interrupcin
En la funcin InitApp()
Inicializar el controlador de interrupcin para usar
en modo multi-vector
Habilitar interrupciones globales
Habilitar el perifrico que genera interrupcin.
CNCONA es un del registro PORTA.

ISR definition debe usar el mismo IPL que interrupt priority definition
El cdigo NO funcionar si se usa un nivel diferente

Copyright Imagination Technologies 2016 Module 4 p.45 Copyright Imagination Technologies 2016 Module 4 p.46

Probando el Cdigo Demostrativo Avance: Podemos utilizar interrupciones y FSM?


Se profundizar ms tarde en el curso
Abra el proyecto Scan_LEDs_with_Tasks
Demo_Basic_Concurrency_Interrupts
TASK_Scan_LEDs_Once_FSM 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1
Compile y cargue el cdigo
Other tasks
Ejectelo y presione los pulsantes
Todava Funciona? Debera!
Si podemos! Y deberamos hacerlo.
Responde ms rpido? Si, debera verse
instantneo Esto le dar a las otras tareas del sistema una mejor capacidad de respuesta.
Reconoce mas activaciones de pulsante? No tendremos que poner tanto cdigo dentro del ISRs.
Si, debera reconocer todas las Mejora la capacidad de respuesta de otros ISR.
activaciones del pulsante y no perder Reduce los riesgos de errores (bugs).
ninguna
Veremos que Framework del MPLAB Harmony Integrated Software utiliza FSMs para
proporcionar capacidad de respuesta.

Copyright Imagination Technologies 2016 Module 4 p.47 Copyright Imagination Technologies 2016 Module 4 p.48

12
23/10/2017

Avance: Temas de interrupcin avanzada Avance: Demoras e Interrupciones


Se profundizar ms tarde en el curso Covered later in course
Podemos interrumpir un ISR? Por qu estamos desperdiciando el
Por defecto, un ISR no se puede interrumpir tiempo de la CPU ejecutando esta
Pero podemos cambiar esto funcin de retardo?
Qu sucede realmente en la CPU entre una peticin de interrupcin y la ejecucin
del ISR?
Y cmo la CPU vuelve a ejecutar el cdigo de la lnea principal? Ms Adelante: El perifrico
Cunto tiempo se tarda hasta que el ISR realmente comienza a ejecutar correr? temporizador puede generar una
Retardo entre la peticin de interrupcin y el inicio de la ejecucin ISR
interrupcin peridica
Simplifica la gestin del tiempo
Podemos acortar esto usando los conjuntos de shadow register de la CPU
Libera CPU para ejecutar otro cdigo (o
Cuntas interrupciones por segundo puede manejar la CPU? ir a dormir para ahorrar energa)
Funciona bien para cdigo de mquina
de estado
Copyright Imagination Technologies 2016 Module 4 p.49 Copyright Imagination Technologies 2016 Module 4 p.50

Anexo

Copyright Imagination Technologies 2016 Module 4 p.51 Copyright Imagination Technologies 2016 Module 4 p.52

13
23/10/2017

Proteccin de los datos de una tarea Mtodos para proteger los datos de las tareas
Una buena prctica para proteger los datos internos de la tarea de otras tareas Crear un archivo fuente .c para una tarea, funciones estrechamente relacionadas,
Evita que la mayora de los cdigos corrompan los datos variables
Ahora slo unos pocos fragmentos de cdigo pueden corromper los datos, reduciendo la Declarar las variables de datos de la tarea en ese archivo
lista de culpables Reglas de proteccin
Ejemplo: Mi computadora no est en mi departamento. Que pas? Los datos deben ser compartidos con otras funciones en la tarea?
Caso A: Siempre mantengo la puerta sin seguro. Declarar con mbito de archivo (file scope): en archivo, pero fuera de todas las funciones
Quin podra haber tomado la computadora? Cualquiera que pudiera llegar a mi apartamento y Declare la variable con el modificador esttico (static) para ocultarlo del cdigo en todos los dems
entrar. archivos
Caso B: Siempre mantengo la puerta asegurada cuando no estoy en casa. Slo una funcin necesita usarla?
Quin podra haber tomado la computadora? Slo alguien con la llave, una ganza, o una Declarar con mbito de bloque (block scope): dentro de esa funcin
palanca, o un ariete ...
Es necesario que estos datos persistan de una llamada a la funcin de tarea a la siguiente?
Si la puerta est daada, entonces la persona probablemente no tena una llave o una ganza
Declare esa variable con el modificador static

Copyright Imagination Technologies 2016 Module 4 p.53 Copyright Imagination Technologies 2016 Module 4 p.54

14

Das könnte Ihnen auch gefallen