Uploaded by Mustafa Shiple

Embeded C DataTypes

advertisement
Agenda
1.
2.
3.
4.
Data Types
Data Types Qualifications
Data Types Modifications
Data Types Storage class
Embedded C
Numerical Systems
example
system
starts with
16.1 , 61e1
Decimal
non-zero
075
0xfab
Octal
Hexadecimal
zero
0x
‘a’
“abc”
Character
String add null char (4 chars)
“\n” , “\r”
control character
Data type Variables
Type
Bytes
char
1
int
2
float
4
double
4
Description
Range
A single byte of memory that
unsigned 0…255
defines characters
Used to define integer numbers unsigned 0…65535
Single precision floating point
1.175e-38…3.40e+38
number in IEEE format
Single precision floating point
1.175e-38…3.40e+38
number in IEEE format
1 if enum
< 256 Used to define a list of aliases
enum
that represent integers.
2 if enum
> 256
0…65535
Data Type Modifiers
Type
Bytes
char
1
int
2
short
2
Description
A single byte of memory that
defines characters
Range
unsigned 0…255
signed -128…127
unsigned 0…65535
Used to define integer numbers
signed 32768…32767
unsigned 0…65535
Standard type specifying 2signed byte integers
32768…32767
Data Type Modifiers
Type
Bytes
long
4
float
4
double
4
Description
Range
unsigned
0…4294967295
Standard type specifying the
signed largest integer entity
2147483648…21474
83647
Single precision floating point
1.175e-38…3.40e+38
number in IEEE format
Single precision floating point
1.175e-38…3.40e+38
number in IEEE format
1 if enum
< 256 Used to define a list of aliases
enum
that represent integers.
2 if enum
> 256
0…65535
Type casting
– To convert from long to int the programmer has to
manually type cast the value
– To do type casting, the value to cast has to be
preceded by the target type enclosed in parantheses
int Val16bit;
// short integer (16 bits)
long Val32bit; // long integer (32 bits)
Val16bit = (int) Val32bit; // type casting
// the higher 16 bits are lost
– Information may be lost by type casting
– The range of a value should be checked before doing
manual type casting
Data Type Naming Conventions
Avoid basic types (‘char’, ‘int’, ‘short’, ‘long’) in application code
Memory Alignment
*Source: Freescale
Data Type Storage Class
• Size modifier
Variables life time
• Global
• Global storage and global scope
• Static
• Global storage and local scope
• Local
• Local storage and local scope
Example (static)
Static Functions
Static Functions
Data Type Qualifiers
• Constant Qualifier
• Volatile Qualifier
Volatile Variables
Volatile Variables are Never
Optimized
Const
The addition of a 'const' qualifier indicates that the (relevant part of the)
program may not modify the variable
const int x = 5;
An alternate form
int const x = 5;
• It is safe to assume that a parameter along with the keyword
“const” means a “read-only” parameter.
• Some compilers create a genuine variable in RAM to hold the
const variable. Upon system software initialization, the “read-only”
value is copied into RAM. On RAM-limited systems, this can be a
significant penalty.
int * const cp = &i;
const int * ptci;
int const * ptci;
/* const pointer to int */
/* pointer to const int */
/* pointer to const int */
Typedef Const.
typedef int * ip_t;
const ip_t cp1 = &i;
ip_t const cp2 = &i;
/* const pointer to int */
/* const pointer to int!! */
const int x = 5;
int * y = &x;
:::::::::
::::::::
*y = 16; /* Completely valid! */
const int * const y = &x;
Any variation Will be caught by compiler
C operators
C operators
• Assignment
=
Assignment
MyVar = 5; // assign five to variable MyVar
• Relational operators
<, <=, >=, >,==
Less than, less than or equal to, greater than or equal to, greater than,
equality.
• Take care
MyVar2 = MyVar >= 5;
// if MyVar is greater than or equal to five
// the result is one (TRUE), otherwise zero (FALSE)
Arithmetic operators
• +, -, *, /
Add, subtract, multiply, divide
– Var2 = Var + 5;
• % Modulo
– Var2 = Var % 5; // if Var=13 the result= 3
• ++, -Increment, decrement
– Var++; // Var is incremented by one
• |, &, ^, ~ Bit wise OR, AND, Xor and NOT
– Var2 = Var & 0x0F;
• >>, <<
Bit wise shift right and left
– Var2 = Var << 3;
// Var =00010010.
// Var2 =10010000.
Increment and decrement
Assume X is 5
Boolean operators
–~
Boolean NOT
Var2 = ~ Var;
// Var=00010010
// Var2=11101101
– ==, != Equal to, not equal to
Var2 = Var == 5;
// Var=5,
// Var2 =TRUE
– &&, ||
Boolean AND and OR
Expressions compressed forms
Compiler Basics (Operators)
Compiler Basics (Precedence)
Operators of the same precedence are applied right to left
Program Syntax
• Comments
• For multiple line comments
– /* comment
comment
comment */
• Single line comment
– /* comment */
– // comment
Functions
type
name
int FunctionName( )
{
return
{}
return 5;
}
Calling function
Examples
FunctionName( );
Result = FunctionName( );
The void Keyword
• The void keyword is used to
explicitly state no value
int FunctionName(void)
void FunctionName(int Param)
void* pNothing
Conditional Expressions
– Conditional execution using the if and else
statements
– Conditional expressions with the ternary
operator ? :
– Conditional execution using switch and case
if (a > b)
z = a;
else
z = b;
// checks the expression a > b
// statement executed if true
// statement executed if false
z = (a > b) ? a : b; // z = max(a, b)
Nested conditions
if(d == 1)
printf("Mon");
else if(d == 2)
printf("Tue");
else if(d == 3)
printf(“Wed");
else if(d == 4)
else
printf("<invalid>");
Note where ; is
?!!
Nested conditions (Cont.)
• switch(d)
{ case 1:
printf("Mon");
// d = 1
case 2:
printf("Tue");
// d=2
break;
default:
// d= others
printf("<invalid>"); }
Flow control
– Loop statements
• for
• do
• while
– Jump statements
• break
• continue
• goto
• return
Loop Statements
int c = 0;
While (c < 8)
Printf ("%d ", ++c);
Check then do!!
int c = 0;
do printf("%d\n", ++c);
while(c < 8);
Do then check!!
For loop
For (c = 1; c <= 8; c++)
Printf ("%d ", c);
for( ; ; )
Jump statements
Loop begin (for, do , while);
break
Loop end;
Next st;
For (c = 1; c <= 8; c++)
{Continue;
Statment1;
Statement2;}
Loop begin ( do , while);
Continue; Test condition
Statment1;
Statement2;
Loop end;
Jump statments
goto err;
…
err:
// jump directly to label err
// define label err
Download