view examples/c3/coro.c3 @ 365:98ff43cfdd36

Nasty bug in adr instruction
author Windel Bouwman
date Wed, 19 Mar 2014 22:32:04 +0100
parents 158068af716c
children
line wrap: on
line source

module coro;

/*
  Some co-routines doing some work.

  This example demonstrates how to write co-operating
  routines in a nice way.
*/

int regbank[10];

function i2c_write(int address, int d)
{
    regbank[2] = address;
    regbank[0] |= 0x1; // Issue go command
    while (regbank[1] != 0)
    {
        yield;
    }

    // Wait while busy:
    while (regbank[1] != 11)
    {
        yield;
    }
}

function int i2c_read(int address)
{
    regbank[2] = address;
    regbank[0] |= 0x1; // Issue go command
    while (regbank[1] != 0)
    {
        yield;
    }

    // Wait while busy:
    while (regbank[1] != 11)
    {
        yield;
    }
}

function void eeprom_set(int address, int v)
{
    i2c_write(address, v);
    i2c_read(address);
}

function int calcX(int y)
{
  var int x;
  x = 2;
  x = x + 2 + 9 * y;
  return x;
}

var int counter = 0;

task task1()
{
    start task3;
   var int a = 200;
   while (a > 0)
   {
      yield;
   }
}

task task2()
{
    while(true)
    {
        yield;
    }
}

task task3()
{
    eeprom_set(99, 1);
   yield;
}

task main()
{
    start task1;
    start task2;
    await task1;
    await task2;
}