// // Example of semaphore use // #include #include #include "mmkernel.h" TASK_INFO task_info; mKTIME timedate; int mutex; void task1(void); void task2(void); //------------------------------------------------------------------- void main() { // microkernel initialization mK_init(); // task_creation task_info.stack_size = 4000; task_info.default_priority = 0; task_info.current_priority = 0; task_info.name = "1st task"; task_info.code = task1; mK_create_task(&task_info); task_info.name = "2nd task"; task_info.code = task2; mK_create_task(&task_info); // creation of a binary semaphore mutex = mK_create_semaphore(1,1); mK_start(); } //----------------------------------------- void task1(void) { static int i; if(mK_local_init()) { return; } for(i=0;i<1000;++i) { mK_wait_semaphore(mutex); printf("I'm the first task.\n"); mK_signal_semaphore(mutex); } mK_end(); } //----------------------------------------------------------- void task2(void) { if(mK_local_init()) { return; } while(1) { mK_wait_semaphore(mutex); printf("I'm the second task.\n"); mK_signal_semaphore(mutex); } }