1 / 23

ECE 263 Embedded System Design

ECE 263 Embedded System Design. Lessons 13-15 Introduction to C. CASE. 4 th Generation Language Source. Assembly Code Source. Assembler. Linker. Object Code (Library Files). Software Programming Tools. *.c (C Source Code) *.h (C Header File). Compiler. 3 rd Generation

Download Presentation

ECE 263 Embedded System Design

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ECE 263 Embedded System Design Lessons 13-15 Introduction to C Revised: Aug 1, 2014

  2. CASE 4th Generation Language Source Assembly Code Source Assembler Linker Object Code (Library Files) Software Programming Tools *.c (C Source Code) *.h (C Header File) Compiler 3rd Generation Language Source *.s or *.asm *.o *.lst, *.map, *.s19 Revised: Aug 1, 2014

  3. ‘C’ Characteristics • “Low-level” Language • Stays very close to a processor’s hardware. • Minimalistic • Basic single-thread control flow constructs + optional libraries. • “Lightly-Typed” Language • You can do almost anything • Function-Based • Emphasizes structured design and modularity Revised: Aug 1, 2014

  4. char int float double Always a single byte. Also used for text. “Usually” matches the size of basic storage unit. Often 2 bytes. Single precision floating point (Used for fractional math) Double precision floating point (Wider range of numbers) ‘C’ Variable Types Revised: Aug 1, 2014

  5. short long signed unsigned static extern const Remains a 2 byte integer. Increases number of bytes used for an integer (4 bytes). Two’s complement numbers (DEFAULT). Allows unsigned arithmetic. Directly allocates memory to remember a value between function calls. Allows access by other files. Assigns a constant value to variable. Variable Modifiers Revised: Aug 1, 2014

  6. Operators • Arithmetic + - * / % modulo (remainder) operator EX] 11%3 -> 2 • Relational < <= > >= == != && || EX] if (num <= 0) || (num > 100) { : } Revised: Aug 1, 2014

  7. Operators • Bit-wise & | ^ ~ EX] unsigned char a, b; a = b & 0x0F; //0x: hexadecimal >> << EX] unsigned char a, b; a = b >> 2; //right shift b twice • Increment/Decrement ++ -- EX] i++; equivalent to i = i + 1; Revised: Aug 1, 2014

  8. Bit Twiddling - controlling individual bits • a | b bitwise or - used to turn on specific bits EX] PORTA | = 0x80; //turn on bit 7 (msb) • a&b bitwise and - useful for checking if specific bits are set EX] if ((PORTA & 0x81) == 0) //check bit 7 and 0 • a ^ b bitwise exclusive OR - useful for complementing a bit EX] PORTA ^= 0x80; //flip bit 7 • ~a bitwise complement - used to turn off specific bits EX] PORTA &= ~0x80; //turn off bit 7 Revised: Aug 1, 2014

  9. Forcing Variables to Absolute Addresses #pragma abs_address: 0x6000 short m = 0; int b = 0; int temp = 0; #pragma end_abs_address Revised: Aug 1, 2014

  10. while(expression) { statement1; statement2; } k = -10; while(k < 41) { Temp = k * 9/5 + 32; k++; printf(“Temp: %f \n”, Temp); } while{ } Loops Revised: Aug 1, 2014

  11. for (exp1;exp2;exp3) { statement1; statement2; } for(k=-10, k<=40; k++) { Temp = k * 9/5 + 32; printf(“Temp: %f \n”, Temp); } for{ } Loop Revised: Aug 1, 2014

  12. do { statement1; statement2; } while (expression); k = -10; do { Temp = k * 9/5 + 32; k++; printf(“Temp: %f \n”, Temp); } while (k < 41); do/while {} loop Revised: Aug 1, 2014

  13. if(expression) statement1; else if(expression) statement2; else { statement3; statement4; } if(c < min_temp) flag = TOO_LOW; else if (c> max_temp) flag = TOO_HIGH; else { temp = v * m + b; flag = IN_BOUNDS; } if-else-if Statements Revised: Aug 1, 2014

  14. Functions • Function Prototype <output type> func_name(<input type1> <variable name1>, ...); • Function Call <variable> = function(<variable name1,...>); • Function output type func_name(<input type1> <variable name1>, ...) { <Local variables> statement1; : : return(output variable); } Revised: Aug 1, 2014

  15. Function Example Prototype: int sqrt(int number); Call: sq_root = sqrt(1000); Function: int sqrt(int number) { int guess=5, i=1; for(i=1;guess=5;i != guess;) { i = guess; guess = (i + (10000/i))/2; } return guess; } Revised: Aug 1, 2014

  16. Arrays • Collection of the same type of data, stored in consecutive memory locations. • Declaration Examples: int temp[NUM_SAMP]; char msg[] = {“Hello World\n”}; • Assignment Example: temp[2] = 50; Revised: Aug 1, 2014

  17. Structures • Collection of multiple variables, possibly of different types. • Declaration Example: struct circle struct circle circle1; { int radius; int x_center; int y_center; }; Revised: Aug 1, 2014

  18. Structures (Cont.) • Assignment Example: circle.radius = 5; Employee.name = {“John”}; Revised: Aug 1, 2014

  19. Pointers • Variables assigned to specific addresses. • Declaring pointers int x; int *px, *pa; //address of integers pointers Revised: Aug 1, 2014

  20. Pointer Syntax px = &x; //assign pointer to the address of x x = *px; //set x equal to contents of px address of dereference operator, contents of Revised: Aug 1, 2014

  21. Pointer example int m,n; //integers int *pm; //pointer to integer type m = 10; //set m equal to 10 pm = &m; //set integer pointer to addr of m n = *pm; //set n equal to contents of pm //n = 10 Bottom line: do both sides of equation balance? Revised: Aug 1, 2014

  22. Pointer Syntax • Placing data at specific locations: * (char *) 0x102B = 0x30; Hexadecimal value Hexadecimal value Pointer of character size Contents of the address Revised: Aug 1, 2014

  23. Pointer Syntax - header files #define _IO_BASE = 0 #define _P(off) *(unsigned char volatile*) (_IO_BASE + off) #define _LP(off) *(unsigned short volatile*) (_IO_BASE + off) #define PORTA _P(0x00) : : • Allows you to use register file by name in code • Must include header file with code Revised: Aug 1, 2014

More Related