information on interrupt thread convention

Jason Phillips mored1759 at gmail.com
Sat May 7 02:47:34 CEST 2011


this code give:

#include <l4/kip.h>
#include <l4/thread.h>
#include <l4/schedule.h>
#include <l4/ipc.h>
#include <l4io.h>
#include <l4/sigma0.h>

L4_ThreadId_t INT_THREAD;

void IRH1(void)
{
	while(1)
	{
		L4_Msg_t msg;
		printf("the interrupt is raise\n");
		L4_Clear(&msg);
		L4_Append(&msg,(L4_Word_t)0);
		L4_Load(&msg);
		L4_Send(INT_THREAD, L4_TimePeriod(2000000));
		printf("result:   [%d]\n", (int)L4_ErrorCode());
		}
}

int main()
{
	L4_Word_t sp, ip, utcb_b, utcb_n;
	L4_ThreadId_t me, h1, mylocal;
	void* kip;
	char stack[1024];
	L4_Msg_t msg;
	
	kip = L4_KernelInterface();
	me = L4_MyGlobalId();
	mylocal = L4_MyLocalId();
	h1 = L4_GlobalId(L4_ThreadNo(me)+1, 2);
	utcb_b = *(L4_Word_t*)&mylocal;
	utcb_b &= ~(L4_UtcbAreaSize(kip) -1);
	utcb_n = utcb_b + (L4_UtcbSize(kip) * (L4_ThreadNo(h1) - 
L4_ThreadIdUserBase(kip)));
	sp = (L4_Word_t)&stack[1025];
	ip = (L4_Word_t)IRH1;
	
	INT_THREAD = L4_GlobalId(1,1);
	
	L4_ThreadControl(h1, me, me, me, (void*)utcb_n);
	
	L4_Clear(&msg);
	L4_Append(&msg, ip);
	L4_Append(&msg, sp);
	L4_Load(&msg);
	L4_Send(h1, L4_TimePeriod(3000000));
	printf("error code    [%d]\n", (int)L4_ErrorCode());
	L4_AssociateInterrupt(INT_THREAD,h1);
	while(1)
	{
		L4_Wait(L4_TimePeriod(3000000), &INT_THREAD);
	}
	return 0;
} 

give me a endless loop where a error code of 1 arise first then it loop
endless with a error code of 2, this happen when keyboard is not press. 
Just to be clear by error code i mean the 'e' field of register.
And if use 'sleep' instead wait it do not work when keyboard is press.
as well how do i know if the interrupt is calling thread? I try if 
statement to compare the label to -1 but it it is not a legal compare
because label is unsigned. how do i know?





More information about the l4-hackers mailing list