/* example3.c */ /* * RTXC Quadros Version 1.0 * Copyright (c) 1999-2003 * Quadros Systems, Inc. * ALL RIGHTS RESERVED * * THE INFORMATION HEREIN IS CONFIDENTIAL AND PROPRIETARY. * UNAUTHORIZED DISCLOSURE OR DISTRIBUTION IS PROHIBITED. * * * This example application demonstrates a state machine * with three states. The state machine is started by * the expiration of SALARM3. Only one thread object, * THREAD1, and only one entry point, entry_point1(), * are used. State transitions are implemented by * using Thread Arguments. The Thread Arguments are * initialized in example_init(). * * In this example, Thread Arguments are passed as pointers * to a data structure. Thread Arguments may also be passed * as scalar values, as demonstrated in example5.c. * */ #include "rtxcapi.h" #include "rtxcuart.h" #include "sysinit.h" #include "kalarm.h" #include "kthread.h" #include "example.h" #include "util.h" typedef struct { unsigned int state; unsigned int data; } EX_THREADARGS; EX_THREADARGS thread_args; /***** Example Initialization *****/ void example_init(void) { thread_args.state = 1; TS_DefThreadArg(THREAD1, (void *)&thread_args); TS_DefAlarmActionArm(SALARM3, SCHEDULETHREAD, THREAD1); } /***** Example Application *****/ void entry_point1(void *p1, void *p2) { EX_THREADARGS *args = p1; print_thread_id_message(); /* Thread: 1 */ switch(args->state) { case 1: print_state_message(1); /* State: 1 */ args->state = 2; break; case 2: print_state_message(2); /* State: 2 */ args->state = 3; break; case 3: print_state_message(3); /* State: 3 */ args->state = 1; break; default: print_state_message(args->state); break; } } /***** Unused Entry Points *****/ void entry_point2(void *p1, void *p2) {} void entry_point3(void *p1, void *p2) {} void entry_point4(void *p1, void *p2) {} void entry_point5(void *p1, void *p2) {} void entry_point6(void *p1, void *p2) {} void uexcptn1(void) {} void uexcptn2(void) {} void example_null_run(void) {} /* end of file - example3.c */