Ctest2 Code:
/* task time in COMATOS C
The goal is to use a small RTOS to run the following tasks.
Task descriptions:
task 0: sends message and starts timer
task 1: recv message reads timer
*/
#include <stdio.h>
#include "comatos8515.c"
#define begin {
#define end }
//task repetition times
#define t0 10
//initial task state variables
#define Task0State 0
#define Task1State 0
//Comatos constants
#define NODebug 0
#define OSTimeOut 100
#define NoMessage 0xff
#define NoTime 0
#define Task0Message 0b00000001
#define BaudRate 51
//Task 0 executes on a time base
//Sends a messnage to Task 1 and records the time
//required to get from task 1 back into task 0
int Task0(void)
begin
char ping[]="ping";
char SwTime[10];
int SwitchTime;
TCCR1B = 0;
OSSendMess(1,1);
OSUARTTransmitBytes(ping,4);
SwitchTime = TCNT1;
sprintf(SwTime,"%-i\r\n",SwitchTime);
OSUARTTransmitBytes(SwTime,8);
TCCR1B = 1;
TCNT1 = 0;
return 0;
end
//Task 1 executes on a message receive
//and records the time
//required to get from task 0 back into task 1
int Task1(void)
begin
char pong[]="pong";
char SwTime[10];
int SwitchTime;
TCCR1B = 0;
SwitchTime = TCNT1;
sprintf(SwTime,"%-i\r\n",SwitchTime);
OSUARTTransmitBytes(pong,4);
OSUARTTransmitBytes(SwTime,8);
TCCR1B = 1;
TCNT1 = 0;
return 0;
end
//Now define tasks and start the OS
void main(void)
begin
OSInit(OSTimeOut, NODebug);
OSInitUART(BaudRate);
putsf("Starting...\r\n");
OSCreateTask(Task0, t0, NoMessage, 0);
OSCreateTask(Task1, NoTime, Task0Message, 0);
OSStart(); //never returns
end