Esempio n. 1
0
int main( int argc, char *argv[] )
{
	int retval, i = 1, k;

	printf("begin semaphore_test_posix\n");

	// do not share semaphores, initial value = 0
	sem_init(&sem_a, 0, 0);
	sem_init(&sem_b, 0, 0);

	printf("creating hw thread... ");
	
	POSIX_HWT_CREATE(0, 0, thread_resources);
	printf("ok\n");
	
	// loop 10 times
	for (k = 0; k < 10; k++) {
		retval = sem_post(&sem_a);
		printf("post semaphore A (retval = %d)\n",retval);

		printf("wait for semaphore B\n");
		retval = sem_wait(&sem_b);
		printf("semaphore B aquired (retval = %d)\n", retval);
		i++;
	}

	printf("semaphore_test_posix done.\n");
	
	return 0;
}
Esempio n. 2
0
int main( int argc, char *argv[] )
{
	int i;
	HAL_DCACHE_ENABLE();
	
	printf("begin mutex_test_posix\n");

	
	// initialize mutex with default attributes
	pthread_mutex_init(&mutex, NULL);
	pthread_mutex_lock(&mutex);
	
	printf("creating hw thread... ");
	POSIX_HWT_CREATE(0,0,thread_resources);
	
	printf("ok\n");
	cyg_thread_delay(50);

	for(i = 0; i < 10; i++){
		unsigned long ticks = cyg_current_time();
		//printf("current time = %ld ticks\n",ticks); // XXX remove
		pthread_mutex_unlock(&mutex);
		while(cyg_current_time() - ticks < 10); // wait for 0.1 seconds
		pthread_mutex_lock(&mutex);
		ticks = cyg_current_time() - ticks;
		//printf("delta t = %ld ticks\n", ticks); // XXX remove
		
		printf("mutex lock and release by hwthread: ");
		if(ticks > 20 && ticks < 40){
			printf("success\n");
		}
		else if(ticks <= 20){
			printf("too early\n"); // should not happen
		}
		else {
			printf("too late\n"); // should not happen
		}
		cyg_thread_delay(50);
	}
	
	printf("mutex_test_posix done.\n");
	
	return 0;
}
Esempio n. 3
0
int main( int argc, char *argv[] )
{
	int i;
	//int s, msg, retval;
	volatile int * src = (volatile int*)(((int)mem/16 + 1)*16 + 4); // align to 8 + 4 bytes
	volatile int * dst = src + MEMSIZE/4;
	
	XCache_DisableDCache();
	
	args[0] = (int)src;
	args[1] = (int)dst;
	args[2] = (int)MEMSIZE;
	
	printf("begin memcopy_test_posix\n");
	/*
	printf("args = 0x%08X\n",(unsigned int)args);
	
	for(i = 0; i < 3; i++){
		printf("args[%d] = 0x%08X\n",i,args[i]);
	}
	*/
	for(i = 0; i < MEMSIZE/4; i++){
		src[i] = i + 1;
		dst[i] = 0;
	}
	/*
	// set message queue attributes to non-blocking, 10 messages with 4 bytes each
	mbox_attr.mq_flags = 0;
	mbox_attr.mq_maxmsg = 10000;
	mbox_attr.mq_msgsize = 4;
	mbox_attr.mq_curmsgs = 0;
	// create mailboxes
	mbox = mq_open("/mbox", O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &mbox_attr);
	if (mbox == (mqd_t)-1) {
		perror("unable to create mbox");
	}
	*/
	// create hardware thread
	printf("creating hw thread... ");
	POSIX_HWT_CREATE(0,(unsigned int)args,thread_resources);
	printf("ok\n");

	cyg_thread_delay(100);

	/*
	retval = mq_receive(mbox, (char*)&msg, 4, NULL);
	printf("init_data: 0x%08X (retval %d)\n", msg, retval);

	i = 0; s = (unsigned int)src;
	while(1){
		retval = mq_receive(mbox, (char*)&msg, 4, NULL);
		if(msg == 0x0112358D) break; 

		switch(i){
			case 0: printf("SRC"); break;
			case 1: printf("DST"); break;
			case 2: printf("SIZE"); break;
		}

		printf(": 0x%08X (retval %d)", msg, retval);
		if(i == 0){
			int d = (unsigned int)msg - s;
			if(d == 4) printf(" SINGLE");
			else if(d == 128) printf(" *** BURST ***");
			else printf(" chunk size = %u bytes", d);
			s = msg;
		}
		printf("\n");

		i = (i + 1) % 3;
	}
	
	for(i = 0; i < MEMSIZE/4; i++){
		printf("dst[0x%08X] = %d\n", i, dst[i]);
	}
	*/
	for(i = 0; i < MEMSIZE/4; i++){
		if(src[i] != dst[i]){
			printf("memcopy failed.\n");
			printf("error: destination[%d] = %d, should be %d\n",i,dst[i],src[i]);
			return 1;
		}
	}
	
	printf("memcopy ok. (%d bytes copied correctly)\n",MEMSIZE);
	
	printf("memcopy_test_posix done.\n");
	
	return 0;
}