Getting Started
27
3.3.4.2 FLASHLEDS.C
In addition to Dynamic C’s implementation of C-language programming for embedded
systems, it supports assembly-language programming for very efficient processor-level
control of the module hardware and program flow. This application is similar to
FLASHLED.C
and
TOGGLELEDS.C
, but uses assembly language for the low-level port
control within
cofunctions
, another powerful multitasking tool.
Dynamic C permits the use of assembly language statements within C code. This program
creates three functions using assembly language statements, then creates a C cofunction to
call two of them. That cofunction is then called within
main()
.
Within each of the C-like functions, the
#asm
and
#endasm
directives are used to indicate
the beginning and end of the assembly language statements.
In the function
initialize_ports( )
, port A is initialized to be all outputs while bit 0
of port E is initialized to be an output.
In the function
ledon()
, a 0 is written to the port A bit corresponding to the desired LED
(0, which equals DS3, or 1 which equals DS4), turning that LED on. The
ledoff( )
function works exactly the same way except that a 1 is written to the bit, turning the
selected LED off.
Finally, in the cofunction
flashled()
, the LED to be flashed, the on time in millisec-
onds, and the off time in milliseconds are passed as arguments. This function uses an end-
less
for(;;)
loop to call the
ledon()
and
ledoff()
functions, separated by calls to
the wait function
DelayMs()
. This sequence will make the indicated LED flash on and
off.
As is proper in C program design, the contents of
main()
are almost trivial. The program
first calls
initialize_ports()
, then begins an endless
for(;;)
loop. Within this
loop, the program:
1. Calls the library function
hitwd()
, which resets the microprocessor’s watchdog timer.
(If the watchdog timer is not reset every so often, it will force a hard reset of the sys-
tem. The purpose is to keep an intermittent program or hardware fault from locking up
the system. Normally, this function is taken care of by the virtual driver, but it is called
explicitly here).
2. Sets up a costatement which calls two instances of the
flashled()
function, one for
each LED. Note that one LED is flashed one second on, one-half second (500 ms) off,
while the other is flashed in the reverse pattern.
Note also the
wfd
keyword in the costatement. This keyword (an abbreviation for
wait-
fordone
, which can also be used) must be used when calling cofunctions. For a complete
explanation, see Section 5 and 6 in the
Dynamic C User’s Manual
.
More Information
See the entries for the
hitwd()
and
DelayMs()
functions in the
Dynamic C User’s
Manual
, as well as those for the directives
#asm
and
#endasm
. For a complete explana-
Содержание RabbitCore RCM2100 Series
Страница 1: ...RabbitCore RCM2100 C Programmable Module with Ethernet Getting Started Manual 019 0093 050505 F ...
Страница 34: ...30 RabbitCore RCM2100 ...
Страница 52: ...48 RabbitCore RCM2100 ...
Страница 54: ...User s Manual 50 ...
Страница 56: ......