mirror of
https://github.com/kenshineto/kern.git
synced 2025-04-10 12:37:26 +00:00
52 lines
1.1 KiB
C
52 lines
1.1 KiB
C
#include <common.h>
|
|
|
|
/**
|
|
** Idle process: write, getpid, gettime, exit
|
|
**
|
|
** Reports itself, then loops forever delaying and printing a character.
|
|
** MUST NOT SLEEP, as it must always be available in the ready queue
|
|
** when there is no other process to dispatch.
|
|
**
|
|
** Invoked as: idle
|
|
*/
|
|
|
|
USERMAIN(main)
|
|
{
|
|
// this is the character we will repeatedly print
|
|
char ch = '.';
|
|
|
|
// ignore the command-line arguments
|
|
(void)argc;
|
|
(void)argv;
|
|
|
|
// get some current information
|
|
uint_t pid = getpid();
|
|
uint32_t now = gettime();
|
|
enum priority_e prio = getprio();
|
|
|
|
char buf[128];
|
|
sprint(buf, "Idle [%d], started @ %u\n", pid, prio, now);
|
|
cwrites(buf);
|
|
|
|
// report our presence on the console
|
|
cwrites("Idle started\n");
|
|
|
|
write(CHAN_SIO, &ch, 1);
|
|
|
|
// idle() should never block - it must always be available
|
|
// for dispatching when we need to pick a new current process
|
|
|
|
for (;;) {
|
|
DELAY(LONG);
|
|
write(CHAN_SIO, &ch, 1);
|
|
}
|
|
|
|
// we should never reach this point!
|
|
now = gettime();
|
|
sprint(buf, "Idle [%d] EXITING @ %u!?!?!\n", pid, now);
|
|
cwrites(buf);
|
|
|
|
exit(1);
|
|
|
|
return (42);
|
|
}
|