This document provides an overview of embedded C/C++ programming fundamentals. It discusses what embedded systems and microcontrollers are. It also discusses typical development tools and processes like compilers, linkers, and debugging. Several programming languages are discussed at different levels like machine code, assembly language, and high-level languages like C/C++. C/C++ are recommended for embedded programming due to efficiency and ability to access I/O while assembly is used for speed-critical code. The document also outlines basic C/C++ programming concepts like program structure with directives, declarations, and statements.
* What are Embedded Systems?
* C for Embedded Systems vs. Embedded C.
* Code Compilation process.
* Error types.
* Code Compilation using command line.
Computer Science - Harvard and Von Neumann Architecture
The aspects of both architectures are highlighted through the presentation along with their advantages and disadvantages.
Board Support Package contains Low level device driver and HAL layer. It is the essential to boot the system. By this virtue, BSP finds its application in almost every automotive ECU software.We offer our Board Support Package (BSP) on a one-time license fee model. This model makes our customers the owner of the entire BSP source code along with the solution IP rights.
Translation of a program written in a source language into a semantically equivalent program written in a target language
It also reports to its users the presence of errors in the source program
Lot of book tells about what is programming. Many also tell how to write a program, but very few cover the critical aspect of translating logic into a program. Specifically, in this fast paced industry, when you don't have time to think to program, this course comes really handy. It builds on the basics of programming, smooth sailing through the advanced nitty-gritty’s of the Advanced C language by translating logic to code
From Intrepid's Thursday lecture series, our developer Ryan Meador explains the basics of firmware. Includes firmware background, what's different between a mobile device and a firmware device, underlying technology, & tools and techniques.
* What are Embedded Systems?
* C for Embedded Systems vs. Embedded C.
* Code Compilation process.
* Error types.
* Code Compilation using command line.
Computer Science - Harvard and Von Neumann Architecture
The aspects of both architectures are highlighted through the presentation along with their advantages and disadvantages.
Board Support Package contains Low level device driver and HAL layer. It is the essential to boot the system. By this virtue, BSP finds its application in almost every automotive ECU software.We offer our Board Support Package (BSP) on a one-time license fee model. This model makes our customers the owner of the entire BSP source code along with the solution IP rights.
Translation of a program written in a source language into a semantically equivalent program written in a target language
It also reports to its users the presence of errors in the source program
Lot of book tells about what is programming. Many also tell how to write a program, but very few cover the critical aspect of translating logic into a program. Specifically, in this fast paced industry, when you don't have time to think to program, this course comes really handy. It builds on the basics of programming, smooth sailing through the advanced nitty-gritty’s of the Advanced C language by translating logic to code
From Intrepid's Thursday lecture series, our developer Ryan Meador explains the basics of firmware. Includes firmware background, what's different between a mobile device and a firmware device, underlying technology, & tools and techniques.
FellowBuddy.com is an innovative platform that brings students together to share notes, exam papers, study guides, project reports and presentation for upcoming exams.
We connect Students who have an understanding of course material with Students who need help.
Benefits:-
# Students can catch up on notes they missed because of an absence.
# Underachievers can find peer developed notes that break down lecture and study material in a way that they can understand
# Students can earn better grades, save time and study effectively
Our Vision & Mission – Simplifying Students Life
Our Belief – “The great breakthrough in your life comes when you realize it, that you can learn anything you need to learn; to accomplish any goal that you have set for yourself. This means there are no limits on what you can be, have or do.”
Like Us - https://www.facebook.com/FellowBuddycom
Linux has emerged as a number one choice for developing OS based Embedded Systems. Open Source development model, Customizability, Portability, Tool chain availability are some reasons for this success. This course gives a practical perspective of customizing, building and bringing up Linux Kernel on an ARM based target hardware. It combines various previous modules you have learned, by combing Linux administration, Hardware knowledge, Linux as OS, C/Computer programming areas. After bringing up Linux, you can port any of the existing applications into the target hardware.
Coming up with optimized C program for Embedded Systems consist of multiple challenges. This presentation talks about various methods about optimizing C programs in Embedded environment. It also has some interesting tips, Do's and Dont's that will offer practical help for an Embedded programmer.
The Opcode or the operation code is the part of the instruction that specifies the operation to be performed by the instruction. The CPU decodes (understands) the instruction with the help of the opcode. Copy the link given below and paste it in new browser window to get more information on Operand and Opcode:- http://www.transtutors.com/homework-help/computer-science/computer-architecture/operand-and-opcode.aspx
Embedded C programming based on 8051 microcontrollerGaurav Verma
This lecture note covers the embedded 'c' programming constructs based on 8051 microcontroller. Although the same concepts can be used for other advanced microcontrollers with some modifications.
It is a presentation for the Embedded System Basics. It will be very useful for the engineering students who need to know the basics of Embedded System.
FellowBuddy.com is an innovative platform that brings students together to share notes, exam papers, study guides, project reports and presentation for upcoming exams.
We connect Students who have an understanding of course material with Students who need help.
Benefits:-
# Students can catch up on notes they missed because of an absence.
# Underachievers can find peer developed notes that break down lecture and study material in a way that they can understand
# Students can earn better grades, save time and study effectively
Our Vision & Mission – Simplifying Students Life
Our Belief – “The great breakthrough in your life comes when you realize it, that you can learn anything you need to learn; to accomplish any goal that you have set for yourself. This means there are no limits on what you can be, have or do.”
Like Us - https://www.facebook.com/FellowBuddycom
Linux has emerged as a number one choice for developing OS based Embedded Systems. Open Source development model, Customizability, Portability, Tool chain availability are some reasons for this success. This course gives a practical perspective of customizing, building and bringing up Linux Kernel on an ARM based target hardware. It combines various previous modules you have learned, by combing Linux administration, Hardware knowledge, Linux as OS, C/Computer programming areas. After bringing up Linux, you can port any of the existing applications into the target hardware.
Coming up with optimized C program for Embedded Systems consist of multiple challenges. This presentation talks about various methods about optimizing C programs in Embedded environment. It also has some interesting tips, Do's and Dont's that will offer practical help for an Embedded programmer.
The Opcode or the operation code is the part of the instruction that specifies the operation to be performed by the instruction. The CPU decodes (understands) the instruction with the help of the opcode. Copy the link given below and paste it in new browser window to get more information on Operand and Opcode:- http://www.transtutors.com/homework-help/computer-science/computer-architecture/operand-and-opcode.aspx
Embedded C programming based on 8051 microcontrollerGaurav Verma
This lecture note covers the embedded 'c' programming constructs based on 8051 microcontroller. Although the same concepts can be used for other advanced microcontrollers with some modifications.
It is a presentation for the Embedded System Basics. It will be very useful for the engineering students who need to know the basics of Embedded System.
* Memory types (RAM, ROM, EEPROM, etc).
* Program memory segments.
* Static vs. Dynamic memory allocation.
* Static vs. Dynamic linking.
* Function call with respect to stack, i/p, o/p and i/o parameters and return value.
* Functions types (Synch. vs. ASynch, Reentrant vs. non-Reentrant, Recursive, Inline function vs. function-like macro).
This session reviews some key features of the C++ language that are of interest to the embedded software developer. Also, some language features and implementation details that may be troublesome are highlighted and explained.
8051 programming skills using EMBEDDED CAman Sharma
It contains basic programming tips for embedded c for those who are just into it and don't know much about it....have a look in it and u will surely find it easy.
The objectives of the seminar are to shed a light on the premises of FP and give you a basic understanding of the pillars of FP so that you would feel enlightened at the end of the session. When you walk away from the seminar you should feel an inner light about the new way of programming and an urge & motivation to code like you never before did!
Functional programming should not be confused with imperative (or procedural) programming. Neither it is like object oriented programming. It is something different. Not radically so, since the concepts that we will be exploring are familiar programming concepts, just expressed in a different way. The philosophy behind how these concepts are applied to solving problems are also a little different. We shall learn and talk about essentially the fundamental elements of Functional Programming.
This C tutorial covers every topic in C with the programming exercises. This is the most extensive tutorial on C you will get your hands on. I hope you will love the presentation. All the best. Happy learning.
Feedbacks are most welcome. Send your feedbacks to dwivedi.2512@gmail.com. You can download this document in PDF format from the link, http://www.slideshare.net/dwivedi2512/learning-c-an-extensive-guide-to-learn-the-c-language
•Common Problems Needs Computers
•The Search Problem
•Basic Search Algorithms
–Algorithms used for searching the contents of an array
•Linear or Sequential Search
•Binary Search
•Comparison Between Linear and Binary Search
•Algorithms for solving shortest path problems
–Sequential Search Algorithms
•Depth-First Search
•Breadth First Search
–Parallel or distributed Search Algorithms
•Parallel Depth-First Search
•Parallel Breadth First Search
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...Amil Baba Dawood bangali
Contact with Dawood Bhai Just call on +92322-6382012 and we'll help you. We'll solve all your problems within 12 to 24 hours and with 101% guarantee and with astrology systematic. If you want to take any personal or professional advice then also you can call us on +92322-6382012 , ONLINE LOVE PROBLEM & Other all types of Daily Life Problem's.Then CALL or WHATSAPP us on +92322-6382012 and Get all these problems solutions here by Amil Baba DAWOOD BANGALI
#vashikaranspecialist #astrologer #palmistry #amliyaat #taweez #manpasandshadi #horoscope #spiritual #lovelife #lovespell #marriagespell#aamilbabainpakistan #amilbabainkarachi #powerfullblackmagicspell #kalajadumantarspecialist #realamilbaba #AmilbabainPakistan #astrologerincanada #astrologerindubai #lovespellsmaster #kalajaduspecialist #lovespellsthatwork #aamilbabainlahore#blackmagicformarriage #aamilbaba #kalajadu #kalailam #taweez #wazifaexpert #jadumantar #vashikaranspecialist #astrologer #palmistry #amliyaat #taweez #manpasandshadi #horoscope #spiritual #lovelife #lovespell #marriagespell#aamilbabainpakistan #amilbabainkarachi #powerfullblackmagicspell #kalajadumantarspecialist #realamilbaba #AmilbabainPakistan #astrologerincanada #astrologerindubai #lovespellsmaster #kalajaduspecialist #lovespellsthatwork #aamilbabainlahore #blackmagicforlove #blackmagicformarriage #aamilbaba #kalajadu #kalailam #taweez #wazifaexpert #jadumantar #vashikaranspecialist #astrologer #palmistry #amliyaat #taweez #manpasandshadi #horoscope #spiritual #lovelife #lovespell #marriagespell#aamilbabainpakistan #amilbabainkarachi #powerfullblackmagicspell #kalajadumantarspecialist #realamilbaba #AmilbabainPakistan #astrologerincanada #astrologerindubai #lovespellsmaster #kalajaduspecialist #lovespellsthatwork #aamilbabainlahore #Amilbabainuk #amilbabainspain #amilbabaindubai #Amilbabainnorway #amilbabainkrachi #amilbabainlahore #amilbabaingujranwalan #amilbabainislamabad
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)MdTanvirMahtab2
This presentation is about the working procedure of Shahjalal Fertilizer Company Limited (SFCL). A Govt. owned Company of Bangladesh Chemical Industries Corporation under Ministry of Industries.
Hierarchical Digital Twin of a Naval Power SystemKerry Sado
A hierarchical digital twin of a Naval DC power system has been developed and experimentally verified. Similar to other state-of-the-art digital twins, this technology creates a digital replica of the physical system executed in real-time or faster, which can modify hardware controls. However, its advantage stems from distributing computational efforts by utilizing a hierarchical structure composed of lower-level digital twin blocks and a higher-level system digital twin. Each digital twin block is associated with a physical subsystem of the hardware and communicates with a singular system digital twin, which creates a system-level response. By extracting information from each level of the hierarchy, power system controls of the hardware were reconfigured autonomously. This hierarchical digital twin development offers several advantages over other digital twins, particularly in the field of naval power systems. The hierarchical structure allows for greater computational efficiency and scalability while the ability to autonomously reconfigure hardware controls offers increased flexibility and responsiveness. The hierarchical decomposition and models utilized were well aligned with the physical twin, as indicated by the maximum deviations between the developed digital twin hierarchy and the hardware.
Welcome to WIPAC Monthly the magazine brought to you by the LinkedIn Group Water Industry Process Automation & Control.
In this month's edition, along with this month's industry news to celebrate the 13 years since the group was created we have articles including
A case study of the used of Advanced Process Control at the Wastewater Treatment works at Lleida in Spain
A look back on an article on smart wastewater networks in order to see how the industry has measured up in the interim around the adoption of Digital Transformation in the Water Industry.
Water scarcity is the lack of fresh water resources to meet the standard water demand. There are two type of water scarcity. One is physical. The other is economic water scarcity.
Overview of the fundamental roles in Hydropower generation and the components involved in wider Electrical Engineering.
This paper presents the design and construction of hydroelectric dams from the hydrologist’s survey of the valley before construction, all aspects and involved disciplines, fluid dynamics, structural engineering, generation and mains frequency regulation to the very transmission of power through the network in the United Kingdom.
Author: Robbie Edward Sayers
Collaborators and co editors: Charlie Sims and Connor Healey.
(C) 2024 Robbie E. Sayers
Sachpazis:Terzaghi Bearing Capacity Estimation in simple terms with Calculati...Dr.Costas Sachpazis
Terzaghi's soil bearing capacity theory, developed by Karl Terzaghi, is a fundamental principle in geotechnical engineering used to determine the bearing capacity of shallow foundations. This theory provides a method to calculate the ultimate bearing capacity of soil, which is the maximum load per unit area that the soil can support without undergoing shear failure. The Calculation HTML Code included.
Final project report on grocery store management system..pdfKamal Acharya
In today’s fast-changing business environment, it’s extremely important to be able to respond to client needs in the most effective and timely manner. If your customers wish to see your business online and have instant access to your products or services.
Online Grocery Store is an e-commerce website, which retails various grocery products. This project allows viewing various products available enables registered users to purchase desired products instantly using Paytm, UPI payment processor (Instant Pay) and also can place order by using Cash on Delivery (Pay Later) option. This project provides an easy access to Administrators and Managers to view orders placed using Pay Later and Instant Pay options.
In order to develop an e-commerce website, a number of Technologies must be studied and understood. These include multi-tiered architecture, server and client-side scripting techniques, implementation technologies, programming language (such as PHP, HTML, CSS, JavaScript) and MySQL relational databases. This is a project with the objective to develop a basic website where a consumer is provided with a shopping cart website and also to know about the technologies used to develop such a website.
This document will discuss each of the underlying technologies to create and implement an e- commerce website.
19. What Is A programming Language?
• An artificial language designed to communicate instructions
to a machine, particularly a computer.
• Can be used to create programs that control the behavior of a
machine and/or to express algorithms precisely.
• Thousands of different programming languages have been
created, mainly in the computer field, with many more being
created every year.
21. Embedded Systems Programming
• A program is a set of instructions written in a specific sequence for a processor
to accomplish specified tasks.
• An instruction is defined as a complete task (such as addition) performed by
the microprocessor. Each microprocessor has its own set of instructions.
• To be intelligible to the microprocessor, instructions must be supplied in
binary, i.e., as machine language.
• Assembler language is a symbolic language which represents instructions with
short human-readable mnemonics. For example, in PIC assembler a null
operation or ‘no operation’ is represented by the mnemonic ‘NOP’.
• An assembler is a software tool that converts assembler source programs into
machine language object files.
– Assemblers contain built-in debugging tools which can detect syntax errors.
– For example, ‘MPLAB’ is Microchip's PIC development environment which includes
an assembler that generates assembled files (object files) with .HEX extensions
which are used to program PIC chips.
22. What is Assembly Language
• It is a low level Language
• It works directly with the microprocessor
– Each statement is [almost] exactly equivalent to one
machine instruction.
• Embedded Systems depends on Assembly language
• It is the final product that produced by every
compiler
23. Why assembly language
• Makes you a better programmer.
• There are some situation when you will have no
option except assembly language.
– (Note: some high level programming language have
expensive compilers).
– Also when you dealing with minimum resources and When
you dealing with speed of program execution.
• Only assembly language can talk directly with the
hardware.
24. From Machine to High-Level Languages
• Machine Language: binary instructions
– All programs are converted into the machine
language of a processor for execution
– use the binary equivalent of the instructions
– Difficult to decipher and write
– Prone to cause many errors in writing
High-level Language
Assembly Language
Machine Language
Ex: 00 0111 0001 0101
25. From Machine to High-Level Languages
• Assembly Language: machine instructions represented in
mnemonics
– Has one-to-one correspondence with machine
instructions
– A program called Assembler converts to machine code
– Efficient in execution and use of memory; machine-specific
and not easy to troubleshoot
– Rather slow and inefficient for large and complex
programs
High-level Language
Assembly Language
Machine Language
Ex: MOV [90h], 05h
26. From Machine to High-Level Languages
• High-Level Languages (such as BASIC, C, and C++)
– Written in statements of spoken languages (such
as English)
• machine independent (Can be reuse for other
platforms)
• A program called Compiler converts to machine code
• easy to write and troubleshoot
• requires large memory and less efficient in execution
High-level Language Ex: for (i=0; i<10; i++) sum += a[i];
Assembly Language
Machine Language
28. Source File:
File1.C File2.C File3.asm
Compiler Compiler
Assembler
Object Object Object
Linker
Relocatable
Locator
Hex file
Program target
with
programmer
Programmed
target
combines files and any
referenced functions from
the libraries
Information about the
memory of the system
Running
embedded
program
30. Program Development Process
Write Source Code
Assembler/Compiler
Simulate (If available)
Download
Test Your Hardware
31. Revision on Embedded Programming
• Key Points in Embedded Programming:
– Code Speed:
• Timing constraints
• Limited Processing Speeds (Your microcontroller is not a 2.5 GHz processor)
– Code Size:
• Limited memory (you have limited memory)
• Programming Methods
– Machine Code: Bit (0,1)
– Low level language: Assembly
– High level language: C
• Why use C in embedded programming?
– Fairly efficient
– Supports access to I/O
– Ease of management of large embedded projects
• Why use assembly?
– High speed, low code size
– However, difficult to do a large project in assembly
33. Introduction
• Before you begin …
– C is a general-purpose programming language.
– C is a high-level language that has the advantages of readability,
maintainability, and portability, reusability.
– C is a very efficient language that allows you to get control of
computer hardware and peripherals.
– C is a small language that you can learn easily in a relatively short
time.
– The ANSI standard for C is the standard supported by all C compiler
vendors to guarantee the portability of C.
– Well Structured Language ( i.e. Main function calls many other
functions )
– C Language is the common language used in microcontrollers
,embedded systems and other hardware applications.
– Finally , UNIX Operating system is written with C Language
34. C++ for Embedded Systems
• Of higher level languages, C++ is the closest to
assembly languages
– bit manipulation instructions
– pointers (indirect addressing)
• Most microcontrollers have available C++ compilers
• Believe it or not, it is just ordinary C++ with little
additions !
35. Advantages over assembly language
• Knowledge of the processor instruction set is not
required (portable code; suitable for any μP).
• Register allocation and addressing of memory and data
is managed by the compiler.
• Programs get a formal structure and can be divided into
separate functions (Reusable code).
• Test time is drastically reduced, this increases efficiency.
• C libraries contain many standard routines such as
numeric conversions.
36. Assembly versus C
The selection depends on:
Project: Small or large
Resources: Memory(RAM and ROM)
Time to market: short or long
Updating of program: Yes or No.
………………………………….etc
37. C++ Coding Standards
• Program writing is like building a house.
• The following recommendations were taken from a C++
Standards document and have been adapted for the
Embedded C++.
– Names- make them fit their function
• Use mixed case names to improve the readability:
ErrorCheck is easier than ERROCHECK or errorcheck
• Prefix names with a lowercase letter of their type also to improve the readability
g Global gLog
r Reference rStatus();
s Static sValueIn;
– Braces {} : May be written like this If (condition) {
…………………….
}
Or preferred method
If (condition)
{
…………………….
}
38. C Program Structure
• A C program is built from three components:
1. Directives are directives handled directly by the
preprocessor (#include ….. )
2. Declarations are instructions for the compiler to record
the type and associated memory locations of symbols
3. Statements are the executable instructions in a program
39. The Structure of C Program
• Preprocessor directive
– The preprocessor goes through a program and prepares it to be
read by the compiler.
– Any line in source code with a leading # is taken as a
preprocessing directive
– The two most common preprocessor directives are : #define,
#include and #pragma
• Declarations
– Establishes the names of variables, functions and types used in the
program.
– Have global variables and local variables
40. The Structure of C Program
– Definition
• Establishes the contents of a variable or function. Ex: X = 10;
– Expression
• It is a combination of operators and operands that yields a single
value.
• Ex: X = A – B ;
Y =3 + C * 2 ;
– Statement
• Control the flow of program execution.
• Ex:
while (PRTxDR == 0x02)
{
// statements
}
if (counter == 10)
{
// statements
}
41. The Structure of C Program
• Function
– It is a collection of declarations, definitions, expressions and
statements that perform a specific task.
– Ex: C function declaration
#pragma fastcall16 send_byte
void send_byte( char val);
• Main function:
– all C program must contain a function named main where program
execution begin.
43. General C/C++ Program Structure
43
The C pre-processor replaces this directive with the contents of
the m8c.h and PSoCAPI.h headers file from the C library.
44. General C/C++ Program Structure
44
Every C program must have one main function and
may contain additional functions as well.
45. General C/C++ Program Structure
45
Each variable must be explicitly defined as a specific type.
46. Starting to write programs
whenever this constant will repeated
The return statement causes the main function to finish
47. Variables in C
• An important aspect of the C language is how it
stores data.
• Here we will discuss:
– Data types
– Declarations
– Assignments
– Data type ranges
– Type conversions
48. Variables in C
• The following table shows the meaning of the basic data types
and type modifiers:
Type Meaning Modifier
Character Character data char
Integer Signed whole numbers int
Float Floating point numbers float
Double Double precision floating point numbers double
Signed Positive and negative numbers signed
Unsigned Positive only numbers unsigned
Long Double the length of a number long
Short Halves the length of a number short
C represents all negative numbers in the 2’s complement format. For example to convert the
signed number 29 into 2’s complement:
49. Data types
Type Bit width Description Range
bit 1 To define a bit of data 0 - 1
Char 8 Character or small integer. signed: -128 to 127
unsigned: 0 to 255
Short Int 16 Used to define integer numbers signed: -32768 to 32767
unsigned: 0 to 65535
Long int 32 Used to define integer numbers signed: -2147483648 to 2147483647
unsigned: 0 to 4294967295
Float 32 Define floating point number 1.175e-38 to 3.40e+38
Double 32 Used to define largest integer
numbers
1.175e-38 to 3.40e+38
Note: in other C ref 64 bit
bool 8 Boolean value. true or false
* (pointer) width of
memory
Use for addressing memory Range of memory
For more details refer to “C Language Compiler User Guide”
50. Variable Declaration
• Variables can be declared inside a function or outside of all
functions.
• Variables are declared as following:
type variable_name; Ex: float price;
Where type is one of C’s valid data types and variable_name is the name of the variable.
• Global variables are declared outside functions and are visible
from the end of declaration to the end of the file.
• Local variables are declared inside a function and is visible
only from the end of declaration to the end of the function.
51. Variable Assignment
• Assignment of values to variables is simple:
variable_name = value ;
• Since a variable assignment is a statement, we have to include
the semicolon at the end.
• Example:
– count =100;
– Int x=10;
– float PI=3.14;
• typedef: used to create a new name for an exsisting type.
typedef old_name new_name
– Example:
52. Variable Assignment
• typedef are typically used for two reasons:
1. To create portable programs. (to make program works on Different
μP data width bus)
typedef short int myint; // int 8-bit for 8-bit processor
typedef int myint; // int 16-bit for 16-bit processor
2. help to document your code. (If your code contains many variables
used to hold a count of some sort)
typedef int counter;
Someone reading your code would recognize that any variable declared as counter
is used as a counter in the program.
53. Type conversions (casting/parsing)
– 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
(type) value
54. Variable Storage Class
• auto
– The auto specifier indicates that the memory
location of a variable is temporary.
– auto is the default for function/block variables
• auto int a is the same as int a because it is the
default, it is almost never used
• extern
– Declares a variable that is defined somewhere else.
– Useful when splitting software in multiple files.
55. Variable Storage Class
• static
– Variable stored in static memory.
– It retain their previous value on re-entry to a
block of code. So it eat up your memory.
– In the example the variable count is
initialized once and thereafter increment
every time the function test is called.
• register
– used to define local variables that should be
stored in a register instead of RAM (variable
should be stored in a processor register).
– Register should only be used for variables
that require quick access
The storage class is optional – if not specified the compiler
uses a default storage class.
56. Operators
• An expression is a combination of operators and operands.
• Operators act on operands.
• Types of operators:
– Arithmetic Operators
– Logical (or Relational) Operators
– Bitwise Operators
– Assignment Operators
– Precedence of operators
57. Operators
• Arithmetic Operators:
– Assume variable A holds 10 and variable B holds 20 then:
Operator Description Example
+ Adds two operands A + B will give 30
- Subtracts second operand from the first A - B will give -10
* Multiply both operands A * B will give 200
/ Divide numerator by denumerator B / A will give 2
% Modulus Operator and remainder of after an integer
division
B % A will give 0
++ Increment operator, increases integer value by one A++ will give 11
-- Decrement operator, decreases integer value by one A-- will give 9
58. Operators
• Logical (or Relational) Operators:
– Assume variable A holds 10 and variable B holds 20 then
Operator Description Example
== Checks if the value of two operands is equal or not, if yes then condition
becomes true.
(A == B) is not
true.
!= Checks if the value of two operands is equal or not, if values are not equal
then condition becomes true.
(A != B) is true.
> Checks if the value of left operand is greater than the value of right
operand, if yes then condition becomes true.
(A > B) is not
true.
< Checks if the value of left operand is less than the value of right operand, if
yes then condition becomes true.
(A < B) is true.
>= Checks if the value of left operand is greater than or equal to the value of
right operand, if yes then condition becomes true.
(A >= B) is not
true.
<= Checks if the value of left operand is less than or equal to the value of right
operand, if yes then condition becomes true.
(A <= B) is true.
&& Called Logical AND operator. If both the operands are non zero then then
condition becomes true.
(A && B) is true.
|| Called Logical OR Operator. If any of the two operands is non zero then
then condition becomes true.
(A || B) is true.
! Called Logical NOT Operator. Use to reverses the logical state of its
operand. If a condition is true then Logical NOT operator will make false.
!(A && B) is false.
59. Operators
• Bitwise Operators:
– Bitwise Operators: Bitwise operator works on bits and perform bit by
bit operation.
– Assume if A = 60; and B = 13; Now in binary format they will be as
follows: A = 0011 1100 , B = 0000 1101
Operator Description Example
& Binary AND Operator copies a bit to the result if it exists in both
operands.
(A & B) will give 12 which is
0000 1100
| Binary OR Operator copies a bit if it exists in eather operand. (A | B) will give 61 which is
0011 1101
^ Binary XOR Operator copies the bit if it is set in one operand but
not both.
(A ^ B) will give 49 which is
0011 0001
~ Binary Ones Complement Operator is unary and has the efect of
'flipping' bits.
(~A ) will give -60 which is
1100 0011
<< Binary Left Shift Operator. The left operands value is moved left
by the number of bits specified by the right operand.
A << 2 will give 240 which is
1111 0000
>> Binary Right Shift Operator. The left operands value is moved
right by the number of bits specified by the right operand.
A >> 2 will give 15 which is
0000 1111
60. Operators
• Assignment Operators
Operator Description Example
= Simple assignment operator, Assigns values from right side
operands to left side operand
C = A + B will assigne value
of A + B into C
+= Add AND assignment operator, It adds right operand to the
left operand and assign the result to left operand
C += A is equivalent to C = C
+ A
-= Subtract AND assignment operator, It subtracts right operand
from the left operand and assign the result to left operand
C -= A is equivalent to C = C -
A
*= Multiply AND assignment operator, It multiplies right operand
with the left operand and assign the result to left operand
C *= A is equivalent to C = C
* A
/= Divide AND assignment operator, It divides left operand with
the right operand and assign the result to left operand
C /= A is equivalent to C = C
/ A
%= Modulus AND assignment operator, It takes modulus using
two operands and assign the result to left operand
C %= A is equivalent to C = C
% A
<<= Left shift AND assignment operator C <<= 2 is same as C = C << 2
>>= Right shift AND assignment operator C >>= 2 is same as C = C >> 2
&= Bitwise AND assignment operator C &= 2 is same as C = C & 2
^= bitwise exclusive OR and assignment operator C ^= 2 is same as C = C ^ 2
|= bitwise inclusive OR and assignment operator C |= 2 is same as C = C | 2
61. Flow of Control, Conditional
Constructs, Loops
This session will make you advance to
control your code so control your world.
The goal is to take you from the basic
to learn more about Conditional
Constructs and loops.
62. C - Flow Control Statements
• Flow Control – Making the program behave in a particular
manner depending on the input given to the program
• Why do we need flow control?
– Not all program parts are executed all of the time( i.e. we want the
program to intelligently choose what to do).
• Topics will discussed here are:
– If
– If-else
– For
– While
– Do-while
– Nesting loops
– Switch
63. IF statement
• The if else statement decides on an action based
on if being true
• The form of the statements is
– IF (condition1)
{
Statements1;
}
Else if (condition2)
{
Statements2;
}
Else
{
Statements3;
}
64. SWITCH statement
• The switch case statement Compares a single
variable to several possible constants
• The form of the statements is
– Switch (variable)
{
Case value1:
Statements1;
Break;
Case value2:
Statements2;
Break;
Default:
Statements3;
Break;
}
65. WHILE statement
• The while statement tests a certain condition
and repeats a set of statements until the
condition is false
• The for of the statement
– While(condition)
{
statements;
}
66. DO statement
• The Do while statement is same as while,
except the test runs after execution of a
statement, not before
• The form of the statement
– Do
{
statements
}
while(condition)
67. FOR statement
• The For statement Executes a limited loop.
• The form of the statement
– For(initial value ; condition ; change)
{
Statements;
}
68. CONTINUE statement
• The Continue statement skip the rest of the
statements in the current loop
• The form of the statement
– Continue;
No Print for Value 5 Where it Skipped
69. BREAK statement
• The Break statement is Used with a switch or
in a loop to terminate the switch or loop
• The form of the statement is
– Break;
70. GOTO statement
• Goto statement Transfers execution to a label
• The form of the statement is:
– goto label ;
71. Functions
• Using functions we can structure our programs in a more
modular way.
• A function is a group of statements that is executed when it is
called from some point of the program. The following is its
format:
– type name ( parameter1, parameter2, ...) { statements }
73. The compiler preprocessor
• Compilers translate high level programming language
instructions into machine language.
• Three different components are responsible for changing C
instructions into their machine language equivalents.
1. Preprocessor
2. Compiler
3. Linker
• The Preprocessor:
– The preprocessor goes through a program and prepares it to be read
by the compiler.
– C Preprocessor Directives
• #include directives include the contents of another file
• #define directives define symbolic constants
• #pragma directives describe details of the target hardware
74. Calling Assembly Functions From C
• There are 4 conditions to meet when using the fastcall16 interface:
– The function must be tagged with a C #pragma fastcall16 directive.
– The function should have a C function prototype.
– The assembly function name must be the C function name prefixed with an
underscore character (_).
– The assembly function name must be exported
• For example, an assembly function that is passed a single byte as a
parameter and has no return value looks like this:
75. Inline Assembly
• Besides writing assembly functions in assembly files, inline
assembly allows you to write assembly code within your C file.
• The syntax for inline assembly is:
– asm ("<string>");
• For example:
– asm ("mov A,5");
76. Interrupts
• Interrupt handlers can be written in C. In order to employ
them, you must first inform the compiler that the function is
an interrupt handler.
– #pragma interrupt_handler <name>
• For an interrupt function, the compiler generates the reti
instruction instead of the ret instruction, then saves and
restores all registers used in the function.
• For example:
#pragma interrupt_handler timer_handler
...
void timer_handler()
{
...
}
77. Library Functions
• Use #include <associated-header.h> for each function
described in the Library Functions.
• ImageCraft C Compiler Guide page 23.
– String Functions
– Mathematical Functions
– API Software Library Functions
78.
79.
80.
81. • LAB 1_a: Using LCD to Print “Hello World”.
• LAB 1_b: Using LCD to Print and Flash “Hello World” every 2 sec.
• LAB 1_c: Using LCD to Print “Hello World” when pressing button.
• LAB 4: Using LCD to Print Mathematical Operations “Addition: X+Y =
Z” then “Abstraction: X-Y = Z” then “ Multiplication: X*Y = Z” then “
Division: X/Y = Z”.
• LAB 5: Using Conditional Statements and buttons combination to
Print Mathematical Operations “Addition: X+Y = Z” then
“Abstraction: X-Y = Z” then “ Multiplication: X*Y = Z” then “
Division: X/Y = Z”.
• LAB 6: Make delay of 1 sec using assembly (inline assembly and
calling assembly function).
• LAB 7: Do Some thing continually and when press a button make
interrupt that Prints “I am Interrupt)
83. Arrays
• An array is a series of elements of the same type placed in contiguous
memory locations that can be individually referenced by adding an index
to a unique identifier.
int foo [5] = { 16, 2, 77, 40, 12071 };
int bar [5] = { 10, 20, 30 };
int baz [5] = {};
84. Arrays
• Accessing the values of an array
foo [2] = 75; x = foo[2]; 1
2
int foo[5]; // declaration of a new array
foo[2] = 75; // access to an element of the array.
Some other valid operations with arrays: 1
2
3
4
foo[0] = a;
foo[a] = 75;
b = foo [a+2];
foo[foo[a]] = foo[2] + 5;
85. Multidimensional arrays
• Multidimensional arrays can be described as "arrays of arrays".
• Think of it as [row][col]
• Example:
int jimmy [3][5];
The way to reference the second element vertically and fourth horizontally in an
expression would be:
jimmy[1][3]
86. Initializing Arrays
Can initialize an array just like a normal variable
Example:
String
char szTemp[] = “Some string”;
Values
int nTemp[] = {5,15,20,25};
Letters
char szTemp[] = {‘A’,’B’,’C’,’D’};
Double Dimensioned
char szTemp[2][] = { {‘A’,’B’,’C’,’D’,’E’},
{‘U’,’V’,’X’,’Y’,’Z’} };
87. Pointers
• Variables have been explained as locations in the memory which can be
accessed by their identifier (their name).
– This way, the program does not need to care about the physical address of the
data in memory.
• The memory is like a succession of memory cells, each one byte in size,
and each with a unique address.
– These single-byte memory cells are ordered in a way that allows data
representations larger than one byte to occupy memory cells that have
consecutive addresses.
– Each cell can be easily located in the memory by means of its unique address.
• When a variable is declared, the memory needed to store its value is
assigned a specific location in memory (its memory address).
• Generally, C++ programs do not actively decide the exact memory
addresses where its variables are stored.
88. Pointers
• Address-of operator (&)
– The address of a variable can be obtained by preceding the name of a
variable with an ampersand sign (&), known as address-of operator.
For example:
– This would assign the address of variable myvar to foo; by preceding
the name of the variable myvar with the address-of operator (&), we
are no longer assigning the content of the variable itself to foo, but its
address.
– The actual address of a variable in memory cannot be known before
runtime.
foo = &myvar;
89. Pointers
– let's assume, in order to help clarify some concepts, that myvar is placed
during runtime in the memory address 1776.
In this case, consider the following code fragment:
myvar = 25;
foo = &myvar;
bar = myvar;
– The values contained in each variable after the execution of this are
shown in the following diagram:
First, we have assigned the value 25 to myvar (a
variable whose address in memory we assumed to
be 1776).
The second statement assigns foo the address
of myvar, which we have assumed to be 1776.
Finally, the third statement, assigns the value
contained in myvar to bar.
90. Pointers
• Dereference operator (*)
– As just seen, a variable which stores the address of another variable is called
a pointer. Pointers are said to "point to" the variable whose address they
store.
– An interesting property of pointers is that they can be used to access the
variable they point to directly. This is done by preceding the pointer name
with the dereference operator (*). The operator itself can be read as "value
pointed to by".
– Therefore, following with the values of the previous example, the following
statement:
baz = *foo;
– This could be read as: "baz equal to value pointed to by foo", and the
statement would actually assign the value 25 tobaz, since foo is 1776, and the
value pointed to by 1776 (following the example above) would be 25.
It is important to clearly differentiate
that foo refers to the value 1776,
while *foo (with an asterisk * preceding
the identifier) refers to the value stored
at address 1776, which in this case
is 25.
91. Pointers
• Notice the difference of including or not including
the dereference operator
• The reference and dereference operators are thus
complementary:
– & is the address-of operator, and can be read simply as "address of"
– * is the dereference operator, and can be read as "value pointed to by"
•
baz = foo; // baz equal to foo (1776)
baz = *foo; // baz equal to value pointed to by foo (25)
92. Pointers
• Declaring pointers
– Due to the ability of a pointer to directly refer to the value that it
points to, a pointer has different properties when it points to
a char than when it points to an int or a float.
– Once dereferenced, the type needs to be known. And for that, the
declaration of a pointer needs to include the data type the pointer is
going to point to.
– The declaration of pointers follows this syntax: type * name;
where type is the data type pointed to by the pointer. This type is not
the type of the pointer itself, but the type of the data the pointer
points to. For example:
int * number;
char * character;
double * decimals;
93. Pointers
• Let's see an example on pointers:
Notice that even though neither firstvalue nor secondvalue are directly set any value
in the program, both end up with a value set indirectly through the use of mypointer.
This is how it happens:
First, mypointer is assigned the address of firstvalue using the address-of operator (&).
Then, the value pointed to bymypointer is assigned a value of 10. Because, at this
moment, mypointer is pointing to the memory location offirstvalue, this in fact
modifies the value of firstvalue.
94. Pointers
• Another Example
Each assignment operation includes a comment on how each line could be read: i.e.,
replacing ampersands (&) by "address of", and asterisks (*) by "value pointed to by".
Notice that there are expressions with pointers p1 and p2, both with and without
the dereference operator (*). The meaning of an expression using the dereference
operator (*) is very different from one that does not. When this operator precedes the
pointer name, the expression refers to the value being pointed, while when a pointer
name appears without this operator, it refers to the value of the pointer itself (i.e., the
address of what the pointer is pointing to).
95. Pointers and Arrays
int myarray [20];
int * mypointer;
The following assignment operation would be valid: mypointer = myarray;
After that, mypointer and myarray would be equivalent and would have very similar
properties. The main difference being that mypointer can be assigned a different
address, whereas myarray can never be assigned anything, and will always represent
the same block of 20 elements of type int. Therefore, the following assignment would
not be valid: myarray = mypointer;
The main
difference being
that pointers can
be assigned new
addresses, while
arrays cannot.
96. Pointer initialization
• Pointers can be initialized to point to specific locations at the
very moment they are defined:
int myvar;
int * myptr = &myvar;
• When pointers are initialized, what is initialized is the address
they point to (i.e., myptr), never the value being pointed
(i.e., *myptr).
97. Pointer arithmetics
Suppose now that we define three pointers in this compiler:
char *mychar;
short *myshort;
long *mylong;
and that we know that they point to the memory locations 1000, 2000, and 3000,
respectively.
Therefore, if we write:
++mychar;
++myshort;
++mylong;
mychar, as one would expect, would contain the
value 1001. But not so obviously, myshort would
contain the value 2002, and mylong would contain
3004, even though they have each been
incremented only once. The reason is that, when
adding one to a pointer, the pointer is made to
point to the following element of the same type,
and, therefore, the size in bytes of the type it
points to is added to the pointer.
98. To Continue Go to
http://www.cplusplus.com/doc/tutorial/pointers/
99. PSoC® 1 - Dynamic Reconfiguration
with PSoC® Designer™
100. Introduction
• Dynamic reconfiguration is a unique feature of PSoC Designer
that allows a designer to easily create a project that uses
more resources of the chip than are statically available.
– This is done by time multiplexing the resources inside of a PSoC Chip.
• Every programmable semiconductor device, including PSoC 1,
has limited resources. However, the technique of dynamic
reconfiguration developed by Cypress allows PSoC 1 devices
to reuse analog and digital resources to achieve greater levels
of functionality.
• Only one function may be active at any point in time.
101. Introduction
• The PSoC Designer software development tool allows a user
to easily implement dynamic reconfiguration in firmware.
• Multiple hardware configurations for the device are defined
with an intuitive graphical user interface (GUI).
• A user switches between and interacts with these hardware
configurations at a firmware API level.
102. Creating Configurations in PSoC Designer
After a loadable configuration is added, a new folder appears under Loadable
Configurations.
103. Guidelines for Configuration Organization
Base Configuration First Overlay Configuration Second Overlay Configuration
106. Dynamic Reconfiguration API Functions
The functions that are primarily used are the LoadConfig and
UnloadConfig functions. These are used to load and unload overlay
configurations.
108. File Changes and Dynamic Reconfiguration
• There are files that are generated for a project
when dynamic reconfiguration is activated by
adding an overlay to a project.
• The psocdynamic.asm file adds one function for
each configuration in the project. Each function is
named Is[ConfigName]Loaded. An array of bytes in
RAM is declared when dynamic reconfiguration is
used in a project.
• This array of bytes is named
ACTIVE_CONFIG_STATUS. It is declared near the
bottom of the psocconfig.asm file. Each bit of each
byte corresponds to one of the configurations. If
the corresponding bit is HIGH, the configuration is
loaded. If it is LOW, the configuration is not loaded.
109. File Changes and Dynamic Reconfiguration
• The psocdynamicint.asm file determines how interrupts are handled when
using dynamic reconfiguration. This is explained in Appendix C: Interrupts
and Dynamic Reconfiguration..
• The psocdynamic.h file exports all dynamic reconfiguration functions for
use in C code. Each configuration gets three functions that are exported in
the file as follows:
Code 1. Exported C Function Declarations
extern void LoadConfig_an2104( void);
extern void UnloadConfig_an2104( void);
extern char Isan2104Loaded( void);