Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "scheduler.h" 00003 #include "LinkedList.h" 00004 #include "jobService.h" 00005 #include "schedules.h" 00006 00007 #include "mbed-trace/mbed_trace.h" 00008 #define TRACE_GROUP "main" 00009 00010 // These are necessary only if thread safety is needed 00011 static Mutex TracingLock; 00012 static void tracingWait() 00013 { 00014 TracingLock.lock(); 00015 } 00016 static void tracingRelease() 00017 { 00018 TracingLock.unlock(); 00019 } 00020 00021 void jobA(void *context) 00022 { 00023 printf("Job A\n"); 00024 } 00025 00026 void jobB(void *context) 00027 { 00028 printf("Job B\n"); 00029 } 00030 00031 void printJobs(JobScheduler::Scheduler& scheduler) 00032 { 00033 LinkedList<JobScheduler::Job> jobs; 00034 scheduler.JobList(jobs); 00035 printf(" Job List:\n"); 00036 node<JobScheduler::Job>* jn = jobs.pop(1); 00037 while (jn != NULL) { 00038 printf("Job ID: %d\n", jn->data->GetID()); 00039 jobs.remove(1); 00040 jn = jobs.pop(1); 00041 } 00042 printf(" Job List Completed\n"); 00043 } 00044 00045 00046 void runScheduler() 00047 { 00048 /* Setup tracing */ 00049 mbed_trace_mutex_wait_function_set( tracingWait ); // only if thread safety is needed 00050 mbed_trace_mutex_release_function_set( tracingRelease ); // only if thread safety is needed 00051 mbed_trace_init(); // initialize the trace library 00052 00053 JobScheduler::JobService js; 00054 JobScheduler::Scheduler scheduler(&js); 00055 00056 JobScheduler::Error err; 00057 err = js.Register(3, NULL, NULL); 00058 if (err) { 00059 printf("Failed to register job type 1.\n"); 00060 exit(1); 00061 } 00062 err = js.Register(1, jobA, NULL); 00063 if (err) { 00064 printf("Failed to register job type 1.\n"); 00065 exit(1); 00066 } 00067 err = js.Register(2, jobB, NULL); 00068 if (err) { 00069 printf("Failed to register job type 2.\n"); 00070 exit(1); 00071 } 00072 00073 JobScheduler::JobType *jt; 00074 jt = js.GetJob(1); 00075 if (jt == NULL) { 00076 printf("Failed to find job type 1.\n"); 00077 exit(1); 00078 } 00079 jt = js.GetJob(2); 00080 if (jt == NULL) { 00081 printf("Failed to find job type 2.\n"); 00082 exit(1); 00083 } 00084 jt = js.GetJob(3); 00085 if (jt == NULL) { 00086 printf("Failed to find job type 2.\n"); 00087 exit(1); 00088 } 00089 00090 scheduler.Start(); 00091 00092 time_t nowSecs = time(NULL); 00093 JobScheduler::Response<JobScheduler::JobID> res = scheduler.JobAdd(1, new JobScheduler::RunOnceSchedule(nowSecs + 2), NULL); 00094 printf("job A add response error: %d, jobID: %d\n", res.error, res.data); 00095 00096 printJobs(scheduler); 00097 wait(5); 00098 00099 printf("periodic with 2 sec period and limit 3\n"); 00100 res = scheduler.JobAdd(2, new JobScheduler::RunPeriodicSchedule(2, 3), NULL); 00101 printf("job B add response error: %d, jobID: %d\n", res.error, res.data); 00102 printJobs(scheduler); 00103 wait(10); 00104 printJobs(scheduler); 00105 scheduler.Stop(); 00106 scheduler.WaitToStop(); 00107 } 00108 00109 int main() 00110 { 00111 Serial pc(USBTX, USBRX); 00112 pc.baud(115200); 00113 00114 printf("\nJob Scheduler Demo\n"); 00115 runScheduler(); 00116 printf("done\n"); 00117 00118 exit(0); 00119 } 00120
Generated on Sat Jul 16 2022 01:38:20 by
1.7.2