load testing EthernetInterface

Dependencies:   EthernetInterface mbed-rtos mbed

main.cpp

Committer:
okini3939
Date:
2014-01-17
Revision:
0:09101c438a45
Child:
1:321b8f934993

File content as of revision 0:09101c438a45:

#include "mbed.h"
#include "rtos.h"
#include "EthernetInterface.h"

Serial pc(USBTX, USBRX);
DigitalOut myled(LED1);
EthernetInterface eth;

volatile int count = 0, num = 0, reset = 0;
volatile int ref = 0, refreset = 0; // no rtos = 8727224

extern "C"
void os_idle_demon (void) {
    for (;;) {
        if (reset) {
            count = 0;
            reset = 0;
        } else {
            count ++;
        }
    }
}

void isr_timer () {
    num = count;
    reset = 1;
    refreset = 1;
    myled = 1;
}

void real_count (void const *args) {
    while (!refreset);
    refreset = 0;
    for (;;) {
        if (refreset) {
            count = 0;
            refreset = 0;
            break;
        } else {
            ref ++;
        }
    }
}

int main() {
    Ticker timer;

    pc.baud(115200);
    pc.printf("LOAD TESTING\r\n");
    pc.printf("system clock: %d\r\n", SystemCoreClock);

    timer.attach(&isr_timer, 1);

    pc.printf("wait...\r\n");
    Thread thread(real_count, NULL, osPriorityRealtime);
    while (! ref);
    pc.printf("reference count: %d / sec\r\n", ref);

    pc.printf("ethernet...\r\n");
    eth.init(); //Use DHCP
    if (eth.connect()) {
        pc.printf("error\r\n");
        return -1;
    }
    pc.printf("IP: %s\r\n", eth.getIPAddress());

    num = 0;
    for (;;) {
        if (num) {
            pc.printf("idle count: %d / sec (%0.1f %%)\r\n", num, (float)num / ref * 100);
            num = 0;
            myled = 0;
        }
        Thread::wait(100);
    }
}