|
> 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 has 1 Reply: | | Re: task managment
|
| Thanks Eddie, What kind of limit is there for active tasks? Is there a responsitory somewhere for sample programs/projects people have written? Thanks (...) (25 years ago, 17-Mar-00, to lugnet.robotics.rcx.legos)
|
Message is in Reply To:
| | task managment
|
| 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... thanks tom (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
This Message and its Replies on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|