|
Thanks Eddie,
What kind of limit is there for active tasks?
Is there a responsitory somewhere for sample
programs/projects people have written?
Thanks
In lugnet.robotics.rcx.legos, Eddie C. Dost writes:
> > Would someone be so kind to show me through some
> > code snippets how to create multiple tasks using
> > legOS? I haven't been able to gleen this info
> > from the code although its probably there...
>
> Here is some sample code using three tasks for:
>
> 1. Motor control
> 2. Sound control
> 3. Shaking the head
>
> This runs on the Inventorbot of the Invention System.
> Each task is independantly watching a sensor to control
> it's actions.
>
> Hope this helps,
> Eddie C. Dost
> ecd@skynet.be
> --
> /* file: line1mot.c
> */
>
> #include <conio.h>
> #include <unistd.h>
>
> #include <dsensor.h>
> #include <dmotor.h>
> #include <dsound.h>
>
> #define LIGHTSENS SENSOR_2
> #define DARK_THRESH 0x40
> #define BRIGHT_THRESH 0x46
>
> #define NORMAL_SPEED (MAX_SPEED)
> #define TURN_SPEED (MAX_SPEED / 2)
>
> static const note_t robots[] = {
> { PITCH_D4, 2 } , { PITCH_C4, 1 } , { PITCH_D4, 1 },
> { PITCH_F4, 1 } , { PITCH_D4, 1 } , { PITCH_D4, 2 },
> { PITCH_F4, 2 } , { PITCH_G4, 1 } , { PITCH_C5, 1 },
> { PITCH_A4, 2 } , { PITCH_D4, 2 } , { PITCH_END, 0 }
> };
>
> static wakeup_t
> dark_found(wakeup_t data)
> {
> return LIGHT(LIGHTSENS) < (unsigned short)data;
> }
>
> static wakeup_t
> sensor1_release(wakeup_t data)
> {
> return SENSOR_1 > 0xf000;
> }
>
> static wakeup_t
> sensor3_release(wakeup_t data)
> {
> return SENSOR_3 > 0xf000;
> }
>
> static void
> locate_line(void)
> {
> motor_c_speed (NORMAL_SPEED);
> motor_c_dir (rev);
>
> msleep(1);
>
> cputs("run ");
> wait_event (dark_found, DARK_THRESH);
> }
>
> static void
> follow_line(void)
> {
> while (1) {
> cputs("turn ");
>
> motor_c_speed (TURN_SPEED);
> motor_c_dir (fwd);
>
> while (dark_found(DARK_THRESH))
> msleep (1000);
>
> cputs("run ");
>
> motor_c_speed (NORMAL_SPEED);
> motor_c_dir (rev);
>
> wait_event(dark_found, DARK_THRESH);
> }
> }
>
> int
> line_task(int argc, char **argv)
> {
> ds_active(&LIGHTSENS);
>
> locate_line();
> follow_line();
>
> return 0;
> }
>
> int
> head_task(int argc, char **argv)
> {
> while (1) {
> wait_event(sensor1_release, 0);
>
> motor_a_speed (MAX_SPEED >> 1);
> motor_a_dir (fwd);
>
> sleep(5);
>
> motor_a_dir (off);
> }
> }
>
> int
> music_task(int argc, char **argv)
> {
> while (1) {
> wait_event(sensor3_release, 0);
> dsound_play(robots);
> wait_event(dsound_finished, 0);
> }
> }
>
> int
> main (int argc, char **argv)
> {
> execi(line_task, argc, argv, 0, 0x100);
> execi(head_task, argc, argv, 0, 0x100);
> execi(music_task, argc, argv, 0, 0x100);
> return 0;
> }
|
|
Message is in Reply To:
| | Re: task managment
|
| (...) Here is some sample code using three tasks for: 1. Motor control 2. Sound control 3. Shaking the head This runs on the Inventorbot of the Invention System. Each task is independantly watching a sensor to control it's actions. Hope this helps, (...) (25 years ago, 17-Mar-00, to lugnet.robotics.rcx.legos)
|
3 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|