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; }
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; }
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; }