An example of running multiple thread instances of the same function. Memory is being allocated dynamically.

Dependencies:   Threads mbed-rtos mbed

Committer:
lemniskata
Date:
Sat Jun 29 21:14:20 2013 +0000
Revision:
0:06fdc09661c2
Child:
1:458d82e37147
Creating and running multiple thread instances of the same function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lemniskata 0:06fdc09661c2 1 #include "mbed.h"
lemniskata 0:06fdc09661c2 2 #include "Threads.h"
lemniskata 0:06fdc09661c2 3
lemniskata 0:06fdc09661c2 4
lemniskata 0:06fdc09661c2 5 Serial pc(USBTX, USBRX);
lemniskata 0:06fdc09661c2 6 osMutexId stdio_mutex;
lemniskata 0:06fdc09661c2 7 osMutexDef(stdio_mutex);
lemniskata 0:06fdc09661c2 8
lemniskata 0:06fdc09661c2 9 void Do(void const *data) {
lemniskata 0:06fdc09661c2 10
lemniskata 0:06fdc09661c2 11 int i=(int)data;
lemniskata 0:06fdc09661c2 12 while(1)
lemniskata 0:06fdc09661c2 13 {
lemniskata 0:06fdc09661c2 14 osMutexWait(stdio_mutex, osWaitForever);
lemniskata 0:06fdc09661c2 15 pc.printf("This is Thread #%d\n",i);
lemniskata 0:06fdc09661c2 16 osMutexRelease(stdio_mutex);
lemniskata 0:06fdc09661c2 17 wait(1);
lemniskata 0:06fdc09661c2 18 }
lemniskata 0:06fdc09661c2 19 }
lemniskata 0:06fdc09661c2 20
lemniskata 0:06fdc09661c2 21 int main() {
lemniskata 0:06fdc09661c2 22
lemniskata 0:06fdc09661c2 23 osThreadDef_t **my_threads=NULL;
lemniskata 0:06fdc09661c2 24 if(initThread(&my_threads,Do)==0)
lemniskata 0:06fdc09661c2 25 {
lemniskata 0:06fdc09661c2 26 pc.printf("Thread creation faile\n");
lemniskata 0:06fdc09661c2 27 return -1;
lemniskata 0:06fdc09661c2 28 }
lemniskata 0:06fdc09661c2 29 int i=1;
lemniskata 0:06fdc09661c2 30 osThreadCreate(my_threads[i-1],(void *) i);
lemniskata 0:06fdc09661c2 31 while(1) {
lemniskata 0:06fdc09661c2 32 i++;
lemniskata 0:06fdc09661c2 33 if(i<6)
lemniskata 0:06fdc09661c2 34 {
lemniskata 0:06fdc09661c2 35 if(reAlloc(&my_threads,Do,i)==0)
lemniskata 0:06fdc09661c2 36 {
lemniskata 0:06fdc09661c2 37 pc.printf("Thread creation faile\n");
lemniskata 0:06fdc09661c2 38 return -1;
lemniskata 0:06fdc09661c2 39 }
lemniskata 0:06fdc09661c2 40 osThreadCreate(my_threads[i-1],(void *) i);
lemniskata 0:06fdc09661c2 41 i++;
lemniskata 0:06fdc09661c2 42 }
lemniskata 0:06fdc09661c2 43 wait(0.2);
lemniskata 0:06fdc09661c2 44 }
lemniskata 0:06fdc09661c2 45 }