// // Interprocess communications example // #include #include #include #include "mmkernel.h" TASK_INFO task_info; void task1(void); void task2(void); int pid1, pid2; //------------------------------------------------------------------- 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; pid1 = mK_create_task(&task_info); task_info.name = "2nd task"; task_info.code = task2; pid2 = mK_create_task(&task_info); mK_start(); } // fin de main //----------------------------------------- void task1(void) { int i; int result; if(mK_local_init()) { return; } for(i=0;i<1000;++i) { if(!(i%100)) { result = mK_non_blocking_send(mKLOCAL_MACHINE, pid2 , "|||||||||||||||", 7); } else { mK_yield(); } } mK_end(); } //----------------------------------------------------------- void task2(void) { int result; int sender_machine; int sender_pid; static char buffer[20]; int length; int reply_requested; if(mK_local_init()) { return; } while(1) { result = mK_receive(&sender_machine, &sender_pid, buffer, &length, &reply_requested, mKNOWAIT); if(result == mKRECEIVE_NOTHING) { printf("_"); } else // there's something in the message queue { buffer[length] = 0; printf("%s", buffer); } mK_yield(); } } // fin de proceso2