User`s manual

86 digi.com Multitasking with Dynamic C
// 1. Explicitly use µC/OS-II library
#use "ucos2.lib"
void RandomNumberTask(void *pdata);
// 2. Declare semaphore global so all tasks have access
OS_EVENT* RandomSem;
void main(){
int i;
// 3. Initialize OS internals
OSInit();
for(i = 0; i < OS_MAX_TASKS; i++)
// 4. Create each of the system tasks
OSTaskCreate(RandomNumberTask, NULL, 512, i);
// 5. semaphore to control access to random number generator
RandomSem = OSSemCreate(1);
// 6. Begin multitasking
OSStart();
}
void RandomNumberTask(void *pdata)
{
OS_TCB data;
INT8U err;
INT16U RNum;
OSTaskQuery(OS_PRIO_SELF, &data);
while(1)
{
// Rand is not reentrant, so access must be controlled via a semaphore.
OSSemPend(RandomSem, 0, &err);
RNum = (int)(rand() * 100);
OSSemPost(RandomSem);
printf("Task%d's random #: %d\n",data.OSTCBPrio,RNum);
// Wait 3 seconds in order to view output from each task.
OSTimeDlySec(3);
}
}