コード例 #1
0
ファイル: error.c プロジェクト: CardonaPinball/freewpc
void process_check_rtt (void)
{
#ifdef __m6809__
	if (task_getpid () >= (task_t *)0x2000)
		fatal (ERR_TASK_LOCKUP);
#endif
}
コード例 #2
0
ファイル: task_pthread.c プロジェクト: Curbfeeler/freewpc
void task_init (void)
{
	memset (task_data_table, 0, sizeof (task_data_table));

	struct sched_param sched_param;
	sched_param.sched_priority = 1;
	sched_setscheduler (0, SCHED_FIFO, &sched_param);

	task_data_table[0].pid = task_getpid ();
	task_data_table[0].gid = GID_FIRST_TASK;
	task_data_table[0].duration = TASK_DURATION_INF;

	pthread_attr_init (&attr_default);

	attr_task = attr_default;
	pthread_attr_setdetachstate (&attr_task, PTHREAD_CREATE_DETACHED);
	pthread_attr_setinheritsched (&attr_task, PTHREAD_EXPLICIT_SCHED);
	pthread_attr_setschedpolicy (&attr_task, SCHED_FIFO);
	sched_param.sched_priority = 1;
	pthread_attr_setschedparam (&attr_task, &sched_param);

	attr_input = attr_task;
	sched_param.sched_priority = 2;
	pthread_attr_setschedparam (&attr_input, &sched_param);

	attr_interrupt = attr_task;
	sched_param.sched_priority = 8;
	pthread_attr_setschedparam (&attr_interrupt, &sched_param);
}
コード例 #3
0
ファイル: task_pth.c プロジェクト: Dave2084/freewpc
void task_init (void)
{
	memset (task_data_table, 0, sizeof (task_data_table));
	
	pth_init ();

	task_data_table[0].pid = task_getpid ();
	task_data_table[0].gid = GID_FIRST_TASK;
	task_data_table[0].duration = TASK_DURATION_INF;
}
コード例 #4
0
ファイル: task_pth.c プロジェクト: Dave2084/freewpc
task_gid_t task_getgid (void)
{
	int i;
	for (i=0; i < NUM_TASKS; i++)
	{
		if (task_data_table[i].pid == task_getpid ())
			return task_data_table[i].gid;
	}
	return 255;
}
コード例 #5
0
ファイル: task_pth.c プロジェクト: Dave2084/freewpc
void *task_get_pointer_arg (void)
{
	int i;
	for (i=0; i < NUM_TASKS; i++)
	{
		if (task_data_table[i].pid == task_getpid ())
			return task_data_table[i].arg.ptr;
	}
	fatal (ERR_CANT_GET_HERE);
}
コード例 #6
0
ファイル: task_pth.c プロジェクト: Dave2084/freewpc
__noreturn__ 
void task_exit (void)
{
	int i;
#ifdef PTHDEBUG
	printf ("task_exit: pid=%p\n", task_getpid ());
#endif
	for (i=0; i < NUM_TASKS; i++)
		if (task_data_table[i].pid == task_getpid ())
		{
			task_data_table[i].pid = 0;
#ifdef CONFIG_UI
			ui_write_task (i, 0);
#endif
			for (;;)
				pth_exit (0);
		}
	fatal (ERR_TASK_KILL_FAILED);
}
コード例 #7
0
ファイル: task_pth.c プロジェクト: Dave2084/freewpc
void task_setgid (task_gid_t gid)
{
	int i;
	for (i=0; i < NUM_TASKS; i++)
		if (task_data_table[i].pid == task_getpid ())
		{
			task_data_table[i].gid = gid;
			break;
		}
}
コード例 #8
0
ファイル: task_pthread.c プロジェクト: Curbfeeler/freewpc
__noreturn__
void task_exit (void)
{
	int i;

	pthread_debug ("task_exit: pid=%u\n", (unsigned)task_getpid ());
	for (i=0; i < NUM_TASKS; i++)
		if (task_data_table[i].pid == task_getpid ())
		{
			task_data_table[i].pid = 0;
#ifdef CONFIG_SIM
			ui_write_task (i, 0);
#endif
			pthread_debug ("pthread_exit: index=%d\n", i);
			for (;;)
				pthread_exit (0);
		}
	fatal (ERR_TASK_KILL_FAILED);
}
コード例 #9
0
ファイル: task_pth.c プロジェクト: Dave2084/freewpc
void task_remove_duration (U8 flags)
{
	int i;
	for (i=0; i < NUM_TASKS; i++)
	{
		if (task_data_table[i].pid == task_getpid ())
		{
			task_data_table[i].duration &= ~flags;
			break;
		}
	}
}
コード例 #10
0
ファイル: db.c プロジェクト: Curbfeeler/freewpc
void bpt_display (void)
{
#if (MACHINE_DMD == 1)
	dmd_alloc_low_clean ();

	sprintf ("%p", bpt_mem_addr);
	font_render_string_left (&font_bitmap8, 0, 0, sprintf_buffer);

	sprintf ("%02X %02X %02X %02X",
		bpt_mem_addr[0], bpt_mem_addr[1], bpt_mem_addr[2], bpt_mem_addr[3]);
	font_render_string_left (&font_bitmap8, 40, 0, sprintf_buffer);

	if (new_fatal_error)
	{
		sprintf ("ERR %d GID %d",
			(U8)system_audits.lockup1_addr, (U8)system_audits.lockup1_pid_lef);
		font_render_string_left (&font_bitmap8, 0, 8, sprintf_buffer);
	}
	else if (task_getpid ())
	{

		sprintf ("PID %p GID %d", task_getpid (), task_getgid ());
		font_render_string_left (&font_bitmap8, 0, 8, sprintf_buffer);
		sprintf ("%02X%02X %02X", bpt_addr[0], bpt_addr[1]-2, bpt_addr[2]);
		font_render_string_left (&font_bitmap8, 0, 16, sprintf_buffer);
	}
	else
	{
		font_render_string_left (&font_bitmap8, 0, 8, "BREAK");
	}

	sprintf ("C%04lX", prev_log_callset);
	font_render_string_left (&font_bitmap8, 0, 24, sprintf_buffer);
	dmd_show_low ();
#endif
}
コード例 #11
0
ファイル: task_pth.c プロジェクト: Dave2084/freewpc
bool task_kill_gid (task_gid_t gid)
{
	int i;
	bool rc = FALSE;

	for (i=0; i < NUM_TASKS; i++)
	{
		if ((task_data_table[i].gid == gid) &&
			 (task_data_table[i].pid != 0) &&
			 (task_data_table[i].pid != task_getpid ()))
		{
			task_kill_pid (task_data_table[i].pid);
			rc = TRUE;
		}
	}
	return (rc);
}
コード例 #12
0
ファイル: task_pth.c プロジェクト: Dave2084/freewpc
void task_dump (void)
{
	int i;

	dbprintf ("PID         GID   ARG    FLAGS\n");
	for (i=0; i < NUM_TASKS; i++)
	{
		aux_task_data_t *td = &task_data_table[i];

		if (td->pid != 0)
		{
			dbprintf ("%p%c   %d    %08X   %02X\n",
				td->pid, 
				(td->pid == task_getpid ()) ? '*' : ' ', 
				td->gid, td->arg.u16, td->duration);
		}
	}
}