lecture 3 - c intro

Upload: nestor-salvador-meza-amaro

Post on 04-Jun-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/13/2019 Lecture 3 - C Intro

    1/42

    EE403W Senior Project

    C Tutorial

  • 8/13/2019 Lecture 3 - C Intro

    2/42

    QUIZ

    // initialization section

    =

    // execution section

    if (x = 7)

    x = 0;

    er s co e runs, w a s e va ue s ore n e memorylocation referenced by the variable x?

    2

  • 8/13/2019 Lecture 3 - C Intro

    3/42

    C Programming Language

    Why program microcontrollers in C?

    More com act code visuall s eakin

    Less cryptic code easier to understand Easier to maintain/update

    More portable (to an extent)

    C is a more marketable skill (than BASIC, etc)

    Why NOT program in C?

    Assembly potentially more compact code (memory size, execution speed)

    - Assuming you have a competent assembly programmer on-hand

    3

    ay e qu c er eas er or very sma pro ec s o co e n y e

  • 8/13/2019 Lecture 3 - C Intro

    4/42

    C Programming Language

    C vs. Assembly Language

    i = 3 LDAA #$03 4000:86 03STAA $800 4002:7A 08 00

    j = 5 LDAA #$05 4005:86 05STAA 801 4007:7A 08 01

    k = i + j LDAA $800 400A:B6 08 00

    STAA $803 4010:7A 08 03Compiler converts

    4

    ssem er conver s own oa e

    to chip

  • 8/13/2019 Lecture 3 - C Intro

    5/42

  • 8/13/2019 Lecture 3 - C Intro

    6/42

    C Programming Language

    Going from C to Machine Code requires a Compiler,

    Assembler & Linker

    Example.cCompiler

    Exam le.s19

    Pre-processor Linker

    . , ,

    and links all object files

    Compile

    O timize

    Example.oAssembler

    Executable - 1s & 0s that

    get loaded into programIterative process,

    multi le asses

    .

    Usually a compiler option

    optimize for code size,

  • 8/13/2019 Lecture 3 - C Intro

    7/42

    C Programming Language

    Basic Program Structure#______ are preprocessor directives

    #include < stdio.h>

    void main( )

    {

    main function

    printf("\nHello World\n");

    } printf( ) is a function defined in stdio.h

    Function is in brackets

  • 8/13/2019 Lecture 3 - C Intro

    8/42

    C Programming Language

    Use Lots of Comments!!!

    1. Traditional C comments

    /* Everything between is a comment */

    2. C++ style comments

    3. Preprocessor-enforced comments

    #if (0)

    Everything between is a comment;

    8

    #endif

  • 8/13/2019 Lecture 3 - C Intro

    9/42

    C Programming Language

    Variable Names & Keywords

    Variable Names - can be up to 31 characters long- may use upper/lower case letters, digits 0-9, and _

    - compiler & library vars use _ as first char in names

    Reserved keywords cant be used for var namesauto double int struct

    break else long switch

    case enum register typedef

    c ar ex ern re urn un onconst float short unsigned

    continue for signed void

    do if static while

  • 8/13/2019 Lecture 3 - C Intro

    10/42

    C Programming Language

    Data Types

    char 8 bits Integers types are signed byshort 16 bits default.

    ong ts

    long long 64 bits

    + - +/-38 ~

    double 64 bits +/-10+/-308 ~ 15 significant digits

    int Usually depends on architecture

    (32-bits for x86s 16 bits for HCS08)

    signed char is 8 bits, range is -128 to +127 unsigned char is 8 bits, range is 0 to +255

  • 8/13/2019 Lecture 3 - C Intro

    11/42

    C Programming Language

    10111001

    Straight binary (unsigned)MSB LSB

    =

    1 x 27 + 0 x 26 + 0 x 25 + 1 x 24 + 1 x 23 + 1 x 22 + 0 x 21 + 1 x 20 = 15710

    Total range of possible values is 010 25510

    o v e y wo, s one pos on o e e

    MSB LSB LSB = 0 if even #

    01110010

    0 x 27 + 1 x 26 + 0 x 25 + 0 x 24 + 1 x 23 + 1 x 22 + 1 x 21 + 0 x 20 = 7810

    = 1 if odd #= 0x4E

  • 8/13/2019 Lecture 3 - C Intro

    12/42

    C Programming Language

    Useful #

    conversion

    chart

    12

  • 8/13/2019 Lecture 3 - C Intro

    13/42

    C Programming Language

    ASCII text

    mer can an ar o e

    for Information Interchange

    ASCII s o ten use n

    computer systems to

    represent characters- yperterm

    - Many LCD screens

    13

  • 8/13/2019 Lecture 3 - C Intro

    14/42

    C Programming Language

    Math Operators

    + Addition

    * Multiplication Note: * and / have higher

    / Division recedence than + and -

    % Modulus operator

    if Ans, Rem and the numbers 5 and 8 are integers, then

    Ans = 5/8; // result is 0

    Rem = 5%8; // result is 5

  • 8/13/2019 Lecture 3 - C Intro

    15/42

  • 8/13/2019 Lecture 3 - C Intro

    16/42

    C Programming Language

    Increment & Decrement

    i = i + 1; is equivalent to i++;

    k = k - 1; k--;

    a ows pre- an pos - ncremen ng an pre- an pos - ecremen ng

    num = 1;

    while (num++ < 3)

    num = 0;

    while (++num < 3){

    // do something

    };

    {

    // do something

    }

    Are these

    code snippets

  • 8/13/2019 Lecture 3 - C Intro

    17/42

    C Programming Language

    Shift

    x = 8;x = x >> 2;

    0000 1000 (810) 0000 0010 (210)

    Equivalent to dividing by 22

    y = 8;

    y = y

  • 8/13/2019 Lecture 3 - C Intro

    18/42

  • 8/13/2019 Lecture 3 - C Intro

    19/42

    C Programming Language

    Bitwise Operators

    & Bitwise AND| Bitwise OR

    ~ Bitwise NOT

    ^ Bitwise Exclusive OR Note:

    B &= MASK;

    #define MASK (%1111 0000)

    =

    is equivalent to

    B = B & MASK;

    B = 0x88 | MASK; // result is 0xF8

    C = 0x88 MASK; // result is 0x78

    C = ~C; // result is 0x87

  • 8/13/2019 Lecture 3 - C Intro

    20/42

    C Programming Language

    Loops for loop

    start end increment

    for (i=0; i

  • 8/13/2019 Lecture 3 - C Intro

    21/42

    C Programming Language

    Loops while loop

    cntr = 0;

    while (cntr < 10) // loop will execute 10 times

    num[cntr] = 5;

    cntr++;

    while (1)

    {// this loop will execute forever

  • 8/13/2019 Lecture 3 - C Intro

    22/42

    C Programming Language

    Loops do while loop

    cntr = 0;

    o

    {num[cntr] = 5;

    cntr++;

    } while (cntr < 10); // still executes 10 times

  • 8/13/2019 Lecture 3 - C Intro

    23/42

    C Programming Language

    If statement

    if (num

  • 8/13/2019 Lecture 3 - C Intro

    24/42

    C Programming Language

    The switch statement

    If ou were to look at the assembl{

    case 1:

    // execute function 1

    or machine code, switch and if-else

    statements are functionally

    equivalent. But if there are manyrea ;

    case 2:

    //function eli

    case 3:

    cases, a switch statement is usually

    easier to look at, add to, etc.

    case 5:

    // execute function 2

    break;

    Switch statements lend themselves

    well to things like command parsers

    case n:

    // execute function n

    break;

    an s a e mac nes.

    default:

    // execute function _ERROR

    break;

  • 8/13/2019 Lecture 3 - C Intro

    25/42

    C Programming Language

    FunctionsFUNCTION

    type function_name( type, type, type, ) PROTOTYPE

    - At top of C file or

    Return argument can

    be char, int, etc.

    Values passed to a

    function one way

    file

    argument

    If not void function

    copy o unc on

    void means no

    values passednee s a re urn va ue

    statement at the end

  • 8/13/2019 Lecture 3 - C Intro

    26/42

    C Programming Language

    // Includes

    #include

    Functions (cont.)

    void config_Timer (void);// Function PROTOTYPES

    void config_IO (void);

    // MAIN Routine

    {

    // Configure Port I/O

    config_IO ();

    // Initialize Timer 3con g_ mer ;

    }

    }

    // Other RoutinesTimer.h

    void config_IO (void){

    //Set up micro I/O ports

    } Main.c

    EE403W.4 Spring 26

  • 8/13/2019 Lecture 3 - C Intro

    27/42

    C Programming Language

    Note on Recursion / Reentrancy

    n! = n * (n-1) * (n-2) *

    Function calculates a factorial by

    ong actor a nt n

    {

    ==

    .

    Need to be careful doing this, every

    return (1);

    else

    unc on ca pu s mu p e y es on e

    stack. If not terminated correctly could

    overflow the stack very easily.

    return (n * factorial (n-1));

    }

  • 8/13/2019 Lecture 3 - C Intro

    28/42

    C Programming Language

    Why use functions?

    Makes code more modular easier to read If sections of code are repeated multiple times, putting that

    code in a function saves code space

    If section of code is not repeated more than once, function call

    What if you want the modularity but not the extra stuff, what

    do you do?

  • 8/13/2019 Lecture 3 - C Intro

    29/42

    C Programming Language

    Macros

    A way to modularize code without the penalty of a function call

    In file_name.h

    #define square (x) (x) * (x)

    In ile name.c _

    Power = square (I) * R;

    ,

    as in-line code, whereas functions get treated as jumps to a single

    block of code somewhere else in memory.

  • 8/13/2019 Lecture 3 - C Intro

    30/42

  • 8/13/2019 Lecture 3 - C Intro

    31/42

    C Programming Language

    How to share Global Variables among multiple C files

    // Main.c

    #include

    unsigned char this_is_global = 7;

    // Main Routine

    // main.h

    extern unsigned char this_is_global;extern void calc_number ( );

    vo ma n vo

    {

    unsigned char this_is_local;

    this_is_local = this_is_global;

    calc_number ( );

    // Algorithm.c

    #include

    run_algorithm ( );

    }

    // Other Routines

    ou ne

    void run_algorithm (void)

    {

    unsigned char this_is_local_too;

    this is local too = this is global; _

    {unsigned temp1;

    temp1 = this_is_global;

    }

    _ _ _ _ _

    calc_number ( );}

    Variables and functions can be external / global.

  • 8/13/2019 Lecture 3 - C Intro

    32/42

  • 8/13/2019 Lecture 3 - C Intro

    33/42

    C Programming Language

    Multidimensional Arrays

    unsigned char cnum[2][3];

    cnum[0][0] = 3;

    =

    cnum[0][2] = 8;

    cnum[1][0] = 1;

    Mem Location Value

    0100 3

    cnum = ;

    cnum[1][2] = 12; 0102 8

    0103 1

    0104 0

    0105 12

  • 8/13/2019 Lecture 3 - C Intro

    34/42

    C Programming Language

    PointersMemory Value

    * - deference operator

    & - address of F004 F00CF008

    pq

    unsigned int *p, *q;

    unsi ned int i

    F00C 5

    F010 F004

    i

    r

    unsigned int **r

    i = 5;p = &i;

    =

    *p = 0; // like saying set the contents of

    // memory location pointed to by p

    // to 0 (i.e. i = 0)

    **r = ?

  • 8/13/2019 Lecture 3 - C Intro

    35/42

    C Programming Language

    Pointers another example

    You are working on a 16 bit machine, and the memorylocation at absolute address 0x67A9 needs to be set to an

    initialization value of 0xAA55. How do you do it?

    n p r ;

    ptr = (int *) 0x67A9; //Type Cast!

    ptr = x ;PORTA_DATA_REG = 1;

    #define PORTA_DATA_REG *(unsigned char *)(0x0004)

  • 8/13/2019 Lecture 3 - C Intro

    36/42

    C Programming Language

    Advantage of Using Pointers

    Allows you to directly access machinefunction call

    memory

    i.e. contents of specific registers Helps to modularize code

    BufCopy (num, &outputBuf, &inputBuf);

    can pass a pointer in a function call

    void BufCopy (char nbytes, char *DstBufPtr, char *SrcBufPtr)

    {

    while (nbytes-- > 0)

    *DstBufPtr = *SrcBufPtr;DstBufPtr++; SrcBufPtr++;

    }

    function

  • 8/13/2019 Lecture 3 - C Intro

    37/42

    C Programming Language

    typedef, struct and union

    struct FOURBYTES

    {char byte4;

    union FLOAT Impedance [8],unsigned char I_bytes [8][4];

    char byte3;

    char byte2;

    char byte1;

    Impedance [6].f = 23.556;

    ;

    typedef union FLOAT

    _ y es = mpe ance . . y e ;

    I_bytes [6][1] = Impedance [6].b.byte2;

    I_bytes [6][2] = Impedance [6].b.byte3;

    =

    float f;struct FOURBYTES b;

    _ . .

  • 8/13/2019 Lecture 3 - C Intro

    38/42

    C Programming Language

    typedef, struct and union

    // Definition

    {

    unsigned char BIT_0 : 1;

    unsi ned char BIT 1 : 1;

    BITFLAG UserFlags;

    _

    unsigned char BIT_2 : 1;

    unsigned char BIT_3 : 1;

    unsigned char BIT_4 : 1;

    UserFlags.BIT_0 = TRUE;

    UserFlags.BIT_1 = FALSE;

    unsigned char BIT_5 : 1;

    unsigned char BIT_6 : 1;

    unsigned char BIT_7 : 1;

    ;

    #define TRUE (1)

  • 8/13/2019 Lecture 3 - C Intro

    39/42

  • 8/13/2019 Lecture 3 - C Intro

    40/42

  • 8/13/2019 Lecture 3 - C Intro

    41/42

    C Programming Language

    Other keywords volatile

    en a var a e s ec are vo at e, t e comp er s orce to

    reload that variable every time it is used in the program.Reserved for variables that change frequently.

    - Hardware Registers

    - Variables used in interrupt service routines (ISR)

    - -

    Ex.

    _

    // UART_Buffer is used in the UART ISR to

    // record the incoming data stream

  • 8/13/2019 Lecture 3 - C Intro

    42/42

    C Programming Language

    Other keywords const

    Doesnt mean constant, means read-only

    The program may not attempt to write a value to a const

    var a e

    Generates tighter code, compiler can take advantage of some

    additional o timizations