C5 - Introducción a C

De Proyectos
Saltar a: navegación, buscar

C5.0.-Introduction - Flow Charts


Herramientas gráficas para describir la organización de un sistema embedido:

  • Flowcharts
  • Data flow graphs
  • Call graphs


C5.0 - Flowcharts


  • Describe el programa en un formato bidimensional
  • Permite visualizar las ramas condicionales y las llamadas a las funciones


Oval
Imagen

  • Es el punto de inicio del programa
  • Toda función o subrutina tiene uno


Imagen

  • Devuelve el flujo de control al sitio donde se ha llamado



Rectangle
Imagen

  • Se usa para especificar bloques de proceso (un bloque de proceso es por ejemplo W=W+5;)
  • En un flowchart de alto nivel un bloque de proceso puede contener varias operaciones
  • En un flowchart de bajo nivel una operación se define en cada bloque de proceso


Paralelograma
Imagen

Diamond
Imagen

  • Dentro del diamante se pone lo que se está evaluando
  • En cada flecha se pone la condición que hace activarla
  • Puede haber mas de 2 flechas


Rectangle with double lines
Imagen

  • Son las funciones que se usan en los programas. Por ejemplo si queremos hacer un Delay en varias partes del programa, crearemos una función que se llame Delay() para invocarla cada vez que la necesitemos


Circles
Imagen

  • Flecha hacia afuera define un etiqueta en el código
  • Flecha hace adentro son "goto connectors"


Ejemplo alarma

Necesitamos programar una alarma para proteger nuestra casa, estas son las especificaciones:

  • 2 sensores de ventana abierta (input)
  • 1 interruptor para armar la alarma (input)
  • 1 led para hacer la sirena de la alarma (output)


Cuando el sistema esté armado y se abra una de las dos ventanas (o las dos) la alarma se dispara enciendiendo el led intermitentemente. La frecuencia de parpadeo ha de ser de 10Hz.

Imagen

C5.2 Structure Organitzacion


  • Cuando escribimos un programa es conveniente hacerlo de forma ordenada
  • Se pueden incluir a modo de comentario las diferentes secciones con las que cuenta un programa


Hay 4 secciones importantes en todo programa:

  • Documentacion
    • Proposito del software
    • Autores
    • Fecha
    • Informacion copyright
    • Si hay hardware externo se explica como esta conectado
  • Directivas de pre-proceso
    • Se ponen los #includes
  • Declaracion de variables globales
    • Se declaran las variables globales y las "function prototypes"
  • Subrutinas
    • Las funciones que desarollamos
    • La función principal que es el main


Ejemplo:

//**** 0. Documentation Section
//  This program calculates the area of square shaped rooms
//  Author: Ramesh Yerraballi & Jon Valvano
//  Date: 6/28/2013
//
// 1. Pre-processor Directives Section
#include <stdio.h>  // Diamond braces for sys lib: Standard I/O
#include "uart.h"   // Quotes for user lib: UART lib
 unsigned long calcArea(unsigned long a);
// 2. Global Declarations section
unsigned long side;
// 3. Subroutines Section
// MAIN: Mandatory routine for a C program to be executable 
int main(void) {
  unsigned long area;
  UART_Init();  // call subroutine to initialize the uart 
  printf("This program calculates areas of square-shaped rooms\n");
  side=3;
  area = calcArea(side);
  printf("The area of room is: %",area);
}
unsigned long calcArea(unsigned long a){
 unsigned long area;
 area = a * a;
 return area;
}


En este código se puede ver las diferentes partes de las que se han hablado
Secciones código:

  • Descripción del programa
  • Autores
  • Fecha
  • Includes
  • main


There are four sections of a C program as shown in Program 5.2. The first section is the documentation section, which includes the purpose of the software, the authors, the date, and any copyright information. When the software involves external hardware we will add information about how the external hardware is connected. The second section is the preprocessor directives. We will use the preprocessor directive #include to connect this software with other modules. We use diamond braces to include system libraries, like the standard I/O, and we use quotes to link up with other user code within the project. In this case the uart module is software we wrote to perform I/O with the universal asynchronous receiver/transmitter (uart). We will discuss modular programming in great detail in this class. The third section is global declarations section. This section will include global variables and function prototypes for functions defined in this module. The last section will be the functions themselves. In this class we will use the terms subroutine, procedure, function, and program interchangeably. Every software system in C has exactly one main program, which defines where it begins execution.

There are two types of comments. The first type explains how to use the software. These comments are usually placed at the top of the file, within the header file, or at the start of a function. The reader of these comments will be writing software that uses or calls these routines. The second type of comments assists a future programmer (ourselves included) in changing, debugging or extending these routines. We usually place these comments within the body of the functions. The comments on the right of each line are examples of the second type.

C5.4 Functions


Se añade una nueva sección al código:

  • prototype
  • funciones

Explicar que es cada y la plantilla que se usa

C5.5 Keywords and punctuation


The volatile keyword disables compiler optimization, forcing the compiler to fetch a new value each time. We will use volatile when defining I/O ports because the value of ports can change outside of software action. We will also use volatile when sharing a global variable between the main program and an interrupt service routine. It is a good programming practice not to use these keywords for your variable or function names.

Lists can also be used in general expressions. Sometimes it adds clarity to a program if related variables are modified at the same place. The value of a list of expressions is always the value of the last expression in the list. In the following example, first thetime is incremented, next thedate is decremented, and then x is set to k+2.

X = (thetime++, thedate--, k+2);