コード例 #1
0
ファイル: ccom.cpp プロジェクト: jafo2128/_CANcrusher_ARM
/**
 * \brief Periodic process which will send any data currently loaded for transmission
 */
void CCOM_Task(void)
{
	uint32_t u32GetAddr;
	uint8_t *pu8Data;
	uint8_t i;

	if(!rbuf_empty(&ccomBuf))
	{
		rbuf_get(&ccomBuf,&u32GetAddr);

		pu8Data = (uint8_t *)u32GetAddr;
		//if(USB_isReady()){ USB.write(pu8Data,MAX_FRAME_SIZE); }
		usb_rawhid_send(pu8Data, MAX_FRAME_SIZE);

		//for(i=0;i<MAX_FRAME_SIZE;i++){ printf("%02x,",*pu8Data++); } printf("\n\r");
	}
	//else{ printf("No Data...\n\r"); }
}
コード例 #2
0
ファイル: semaphore_server.c プロジェクト: mercurycc/cs452
void sem_server()
{
    Sem_request request;
    Semaphore* sem;
    int tid;
    int status;

    status = RegisterAs( SEMAPHORE_SERVER_NAME );
    assert( status == REGISTER_AS_SUCCESS );

    while( 1 ) {
        status = Receive( &tid, ( char* )&request, sizeof( request ) );
        assert( status == sizeof( request ) );

        sem = request.sem;

        switch( request.type ) {
        case SEM_RELEASE:
            sem->count += 1;
            status = Reply( tid, ( char* )&status, sizeof( status ) );
            assert( status == SYSCALL_SUCCESS );
            break;
        case SEM_AC_ALL:
            if( sem->count > 0 ) {
                sem->count = 1;
            }
        // Fall through
        case SEM_ACQUIRE:
            status = rbuf_put( &sem->wait_queue, ( uchar* )&tid );
            assert( status == ERR_NONE );
            break;
        }

        while( sem->count > 0 && ! rbuf_empty( &sem->wait_queue ) ) {
            sem->count -= 1;
            rbuf_get( &sem->wait_queue, ( uchar* )&tid );
            status = Reply( tid, ( char* )&status, sizeof( status ) );
            assert( status == SYSCALL_SUCCESS );
        }
    }
}