Modular Programming - PowerPoint PPT Presentation

1 / 30
About This Presentation
Title:

Modular Programming

Description:

when called it will return a char where the top six bits are zero left aiming photo transistor, ... by slowly rotating and scanning in the direction specified. ... – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 31
Provided by: smartprodu
Category:

less

Transcript and Presenter's Notes

Title: Modular Programming


1
Modular Programming
  • Where the rubber meets the Code

2
The three uses of static
3
Encapsulation
Groups
together the data and the functions that operate
on the data
Publishes
an interface to the rest of the code
Hides
the details of the implementation
4
Encapsulation
5
What goes into a header file?
6
What shouldnt be in a header file?
7
Where do you include the header file?
8
(No Transcript)
9
Module Design by Interface Specification
View
The module provides Services to the rest of the
code
Design Activities
Specify the Services
Describe Functionality
Name the Services
Design the implementation
10
Application Programming Interfaces (API) for the
ME218c Master modules Module Communications to
UI on PC To avoid hanging up the master during
the transmission or reception of messages, this
module should implement buffered, interrupt
driven transmit and receive. The communications
routines for this module will need to be
interrupt driven because the UI may send its
message at any time. Char InitializeUICommunicati
ons(void) Do whatever hardware and software
initialization necessary to prepare for
communications with the UI on SC1. Void
TellUINewUserReady(void) Should send the message
to the UI that a new iButton has been inserted
and read. Unsigned char IsNameReady(void) Should
check to see if a new name is ready from the UI.
Return TRUE if a new name is ready, FALSE
otherwise. Unsigned char GetNewName( unsigned
char NameSpace) Should copy the name gotten
from the UI into the array NameSpace. The copy
operation should copy no more than 16 characters,
including the terminating NULL. Should return
TRUE if there was a new name ready, FALSE
otherwise.
A Real Example
11
Design the interfaces to modules for
Driving the platform
Gathering sensor data
Produce
Public interface specification
What are the details that are being hidden?
12
Mike, Ian, and James
// mike, james, and ian // cmpe 118, spring 05 //
these functions or for the motor and sensory
control of our final project // motor direction
defines define forward 1 define
brake 0 define backward -1 define
success 1 define failure 0 // Motor control
functions char wheel_left(char direction, char
speed) char wheel_right(char direction, char
speed) // given a direction and a speed between
0 and 10 it return 0 if failure // and 1 if
successful. // The bot can coast by giving a
direction of "forward" or "backward" with a speed
of 0, // or it can brake by giving any speed with
a direction of "brake".
13
// bump sensors char bump_sensors(void) // When
called it will return a char where the upper four
bits are always 0 then front left, front right,
back right, back left. // line sensors char
line_sensors(void) // when called it will return
a char where the upper four bits are always 0
then forward left, // forward middle, forward
right, and middle // aiming sensors char
aim_sensors(void) // when called it will return
a char where the top six bits are zero left
aiming photo transistor, // and right aiming
photo transistor. // firing solenoid char
firing(char) // when passed a 1 solenoid is open
and it firing, when passed a 0 is closed. Will
return 0 for // failure and 1 for success.
14
Thomas, Maria, and Oscar
DRIVING void LeftMtrSpeed(uchar speed) void
RightMtrSpeed(uchar speed) IR uchar
getBroadIR() //Returns IR level for broad
sensor uchar getAccurateIR() //Returns IR level
for narrow sensor TAPE uchar checkTape()
//Returns solid state for tape
(could be boolean) TURRET uchar
TurnLeft(uchar distance) // Returns
status uchar TurnRight(uchar distance) //
checks for homeswitch BUMPERS uchar
getBumpers() //Returns which bumpers are
pressed
15
John and Suraj
ifndef DROID_H define DROID_H include
"util.h" // types         typedef enum
DIRECTION_LEFT, DIRECTION_RIGHT,
DIRECTION_FORWARD, DIRECTION_BACKWARD
Direction // functions /      Makes the
droid search for a target (tie fighter or
death-star beacon) by slowly rotating and
scanning in the direction specified.             
    _at_param  a_dir   The direction in which to
scan for a target.                 _at_return false
when no target has been detected.
/         boolean Droid_scan(Direction
a_dir) /       Makes the droid seek out its
nearest target and orient itself such that it is
facing the target. From here, the droid may
proceed forward and engage the target.           
      _at_return false when no target has been
detected.       /         boolean
Droid_seek() / Makes the droid engage its
nearest target by driving forward, while
dynamically adjusting its trajectory, until the
droid is within point-blank firing range. Next,
the droid fires a foam ball at the
target.                 _at_return false when no
target has been detected. /         boolean
Droid_engage()
16
/ Rotates the droid, in the given direction,
by the given number of steps.                 _at_pa
ram  a_dir   The direction in which the droid
shall rotate.                 _at_param  a_numSteps  
    The number of discrete rotational steps the
droid shall undertake in its
rotation.                 _at_return false upon
failure. /         boolean
Droid_rotate(Direction a_dir, uint
a_numSteps) / Drives the droid, in the given
direction, by the given number of
steps.          _at_param  a_dir    The direction
in which the droid shall drive.          _at_param  a
_numSteps   The number of discrete translational
steps the droid shall undertake in its
translation.          _at_return false upon failure.
/         boolean Droid_drive(Direction
a_dir, uint a_numSteps) endif
17
ifndef SENSORS_H define SENSORS_H include
"util.h" // types         typedef enum
SENSOR_PRECISION, SENSOR_LEFT, SENSOR_RIGHT,
SENSOR_BUMP Sensor // functions /    Init
ializes all sensors on the droid. /         void
Sensors_init() /    Initializes the specified
sensor on the droid.         _at_param  a_sensor     
   The sensor we wish to initialize.  /         v
oid Sensors_initSensor(const Sensor
a_sensor) / Returns the quantified
strength of the signal being sensed by the
specified sensor.        _at_param  a_sensor  The
sensor whose signal strength we wish to
retrieve./         uint Sensors_getSensorStrength
(const Sensor a_sensor) endif
18
Mike, Ian, and Dev
19
(No Transcript)
20
Hierarchical State Machines
(Harel Statecharts)
21
(No Transcript)
22
A Possible Top-Level State Diagram
23
Work out State Diagrams to Implement Finding
Tape I
24
(No Transcript)
25
(No Transcript)
26
Implementing Hierarchical State Machines
What do you need?
27
State Machine Function Template
If current state is state one Execute During
function for state one If an event is
active If event is event one Execute action
function for state one event one Decide what
the next state will be Endif If event is
event two Execute action function for state
one event two Decide what the next state
will be Endif Repeat the block above as
required for each of the possible events
affecting this state. If next state is different
from current state Execute exit function for
state one Execute entry function for new
state Modify state variable to reflect the new
state Endif Endif Return from state machine
function
28
/
Module
d\me218b\Lectures\Lecture 29\SMTemplate.c
Description This is a template file for
implementing state machines. Notes History
When Who What/Why --------------
--- -------- 02/18/99 1019 jec built
template from MasterMachine.c 02/14/99 1034 jec
Began Coding
/ /--
--------------------------- Include Files
-----------------------------/ / include header
files for this state machine as well as any
machines at the next lower level in the
hierarchy that are sub-machines to this
machine / /-----------------------------
Module Defines ----------------------------/ //
define constants for the states and event for
this machine /----------------------------
Module Functions ---------------------------/ /
prototypes for private functions for this
machine, things like entry exit functions.
/ /---------------------------- Module
Variables ---------------------------/ //
everybody needs a state variable, you may need
others as well static unsigned char CurrentState
29
void RunStateMachine(unsigned char CurrentEvent
) unsigned char NextState CurrentState
switch ( CurrentState ) case
STATE_ONE // If current state is state
one DuringStateOne() //Execute During
function for state one if ( CurrentEvent
! NO_EVENT ) //If an event is active
switch ( CurrentEvent)
case EVENT_ONE //If event
is event one // Execute action
function for state one event one
NextState STATE_TWO//Decide what the next
state will be break
// If next state is different
from current state if ( NextState !
CurrentState) //
Execute exit function for current state
// Execute entry function for new state
CurrentState NextState //Modify
state variable
return
30
/
Function
StartStateMachine Parameters None
Returns None Description Does any
required initialization for this state machine
Notes Author J. Edward Carryer, 2/18/99,
1038AM
/ void
StartStateMachine ( void ) CurrentState
ENTRY_STATE // call the (optional) entry
function for the ENTRY_STATE // any other
initialization necessary to re-start the state
machine
Write a Comment
User Comments (0)
About PowerShow.com