예제 #1
0
void StartBattleIntroAnim(u8 a)
{
    u8 taskId;

    if (gBattleTypeFlags & BATTLE_TYPE_LINK)
    {
        taskId = CreateTask(BattleIntroTask_80E4C34, 0);
    }
    else if ((gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) && gGameVersion != VERSION_RUBY)
    {
        a = 3;
        taskId = CreateTask(BattleIntroTask_FadeScenery, 0);
    }
    else
    {
        taskId = CreateTask(sBattleIntroTaskFuncs[a], 0);
    }

    gTasks[taskId].tState = 0;
    gTasks[taskId].data[1] = a;
    gTasks[taskId].tBgXOffset = 0;
    gTasks[taskId].tFramesUntilBg1Slide = 0;
    gTasks[taskId].data[4] = 0;
    gTasks[taskId].data[5] = 0;
    gTasks[taskId].data[6] = 0;
}
예제 #2
0
int main()
{
    std::vector<int> input{ 1,2,3,4,5,6 };
    
    auto add = CreateTask([](int x, int y) { return x + y; });
    auto mul = CreateTask([](int x, int y) { return x * y; });

    auto y = input | add(2) | mul(5);
}
예제 #3
0
void parallel_for(TaskPool& pool, 
                  const DELEGATE_CBK<void, const Task&, U32, U32>& cbk,
                  U32 count,
                  U32 partitionSize,
                  TaskPriority priority,
                  bool noWait,
                  bool useCurrentThread)
{
    if (count > 0) {

        const U32 crtPartitionSize = std::min(partitionSize, count);
        const U32 partitionCount = count / crtPartitionSize;
        const U32 remainder = count % crtPartitionSize;

        U32 adjustedCount = partitionCount;
        if (useCurrentThread) {
            adjustedCount -= 1;
        }

        std::atomic_uint jobCount = adjustedCount + (remainder > 0 ? 1 : 0);

        for (U32 i = 0; i < adjustedCount; ++i) {
            const U32 start = i * crtPartitionSize;
            const U32 end = start + crtPartitionSize;
            CreateTask(pool,
                       nullptr,
                       [&cbk, &jobCount, start, end](const Task& parentTask) {
                           cbk(parentTask, start, end);
                           jobCount.fetch_sub(1);
                       }).startTask(priority);
        }
        if (remainder > 0) {
            CreateTask(pool,
                       nullptr,
                       [&cbk, &jobCount, count, remainder](const Task& parentTask) {
                           cbk(parentTask, count - remainder, count);
                           jobCount.fetch_sub(1);
                       }).startTask(priority);
        }

        if (useCurrentThread) {
            TaskHandle threadTask = CreateTask(pool, [](const Task& parentTask) {ACKNOWLEDGE_UNUSED(parentTask); });
            const U32 start = adjustedCount * crtPartitionSize;
            const U32 end = start + crtPartitionSize;
            cbk(*threadTask._task, start, end);
        }
        if (!noWait) {
            while (jobCount.load() > 0) {
                pool.threadWaiting();
            }
        }
    }
}
예제 #4
0
void APP_Start (void) {
  //hardware_init();
  /* turn off LEDs */
  gpio_set_pin_output(LED_RED);
  gpio_set_pin_output(LED_GREEN);
  gpio_set_pin_output(LED_BLUE);
  //gpio_toggle_pin_output(LED_RED);
	//gpio_toggle_pin_output(LED_GREEN);
	//gpio_toggle_pin_output(LED_BLUE);

  /* enable trace */
#if 1
  if(RTOSTRC1_uiTraceStart()!=1) {
    for(;;){} /* failure? */
  }
#endif
	/* create tasks */
	CreateTask(); /* normal FreeRTOS tasks */
#if USE_SDK_RTOS
	SDK_CreateTask(); /* using SDK API */
#endif

	/* start the scheduler */
  vTaskStartScheduler(); /* does usually not return! */
}
예제 #5
0
void ItemStorage_ReturnToMenuAfterDeposit(void)
{
    Menu_DisplayDialogueFrame();
    InitItemStorageMenu(ITEMPC_MENU_DEPOSIT);
    CreateTask(ItemStorage_HandleReturnToProcessInput, 0);
    pal_fill_black();
}
예제 #6
0
// called at update check TOD, on each user logout in case update is pending or on demand by admin UI
void check_for_update(update_check_e type, conn_t *conn)
{
	bool force = (type != WAIT_UNTIL_NO_USERS);
	
	if (no_net) {
		lprintf("UPDATE: not checked because no-network-mode set\n");
		return;
	}

	if (!force && admcfg_bool("update_check", NULL, CFG_REQUIRED) == false) {
		lprintf("UPDATE: exiting because admin update check not enabled\n");
		return;
	}
	
	if (force) {
		lprintf("UPDATE: force %s by admin\n", (type == FORCE_CHECK)? "update check" : "build");
		assert(conn != NULL);
		if (update_task_running) {
			lprintf("UPDATE: update task already running\n");
			report_result(conn);
			return;
		} else {
			conn->update_check = type;
		}
	}

	if ((force || (update_pending && rx_count_server_conns(EXTERNAL_ONLY) == 0)) && !update_task_running) {
		update_task_running = true;
		CreateTask(update_task, TO_VOID_PARAM(conn), ADMIN_PRIORITY);
	}
}
예제 #7
0
static void CreateBattleStartTask(u8 transition, u16 song)
{
    u8 taskId = CreateTask(Task_BattleStart, 1);

    gTasks[taskId].tTransition = transition;
    current_map_music_set__default_for_battle(song);
}
예제 #8
0
tERROR cTmProfile::LockTask()
{
	if( m_lockRef++ )
		return errOK;

	AddRef();
	LockTaskReports(true);

	tERROR err = errOK;
	if( !m_remoteTask )
	{
		err = CreateTask();
		if( PR_SUCC(err) )
			err = SetTaskSettings();

		if( PR_SUCC(err) && m_taskObj && (m_stateFlags & dfTaskRestarted) )
			m_taskObj->SetSettings(m_statistics);
	}
	else if( !m_bTaskGroup )
		err = AttachTask(m_remoteTask);

	if( PR_FAIL(err) )
		StateChanged(PROFILE_STATE_FAILED, err);

	return err;
}
예제 #9
0
int 
main(void)
{
	char buf[200];
	Task_t *cons;

	dos = CreateMutex("dos");

	Ready(cons =
		CreateTask(consumer, 2000, "consumer", "consumer", DEFAULT_PRIO));

	while ( true )
	{
		EnterMutex(dos);
		if ( !kbhit() )
		{
			LeaveMutex(dos);
			continue;
		}
		gets(buf);
		if ( !strlen(buf) )
			return 0;
		LeaveMutex(dos);
		Send(cons, buf, strlen(buf)+1);
	}
}
예제 #10
0
파일: USB.c 프로젝트: summerkaka/axio_mcb
void
SendUsbMsg(tMSG *pMsg)
{
    Task *pNewTask;
    UsbTxTask *pusbobj;
    uint8_t WriteIndex;
    uint8_t buffer[255];
    uint8_t length = pMsg->Length;

    pusbobj = malloc(sizeof(UsbTxTask));
    pusbobj->MemProd = 1;

    WriteIndex = 0;
    WriteIndex += MsgCoding(buffer, (const uint8_t*)pMsg, 5);
    WriteIndex += MsgCoding(buffer + WriteIndex, (const uint8_t*)pMsg->pPayload, length);

    pusbobj->Len = length = WriteIndex + 4;  // for sof and eof
    pusbobj->pBuf = malloc(pusbobj->Len);
    pusbobj->MemProd++;

    memcpy(pusbobj->pBuf + 2, buffer, WriteIndex);
    *(pusbobj->pBuf) = 0x10;
    *(pusbobj->pBuf + 1) = 0x02;
    *(pusbobj->pBuf + length - 2) = 0x10;
    *(pusbobj->pBuf + length - 1) = 0x03;

    // create task
    pNewTask = CreateTask(NORMAL);
    pNewTask->Name = USBTRANSMIT;
    pNewTask->Status = TASKSTS_ONGOING;
    pNewTask->pfn = (TASKSTATUS (*)(void *))UsbTxTaskMgr;
    pNewTask->pTaskObj = pusbobj;
}
예제 #11
0
static struct Task *createCycleTask(void)
{
    viewerDisplay.cycleTaskMustStop = FALSE;
    viewerDisplay.cycleTaskTerminated = FALSE;
    viewerDisplay.cycleModeEnabled = FALSE;
    
    return CreateTask("amiilbmCycleTask", 0, AMI_ILBM_cycleTask, 4000L);
}
예제 #12
0
int main(void)
{
	IOInit();
	
	#if defined UART_AVAILABLE
		UARTInit(UART_BAUDRATE);			// 9600
	#endif									// UART_AVAILABLE
	
	InitSysTimer(SYS_TICK_PERIOD);			// 500 ms
	CreateTask(Task_1, 0, IDLE);
	CreateTask(Task_2, 4, SUSPEND);
	CreateTask(Task_3, 2, SUSPEND);
	while(1)								// general cycle
	{
		Run();
	}
}
예제 #13
0
static void
send_car(DIRECTION dir)
{
	static DIRECTION left = LEFTBOUND, right = RIGHTBOUND;

	Ready(CreateTask(car, 0, dir == LEFTBOUND ? &left : &right, 
			"car", DEFAULT_PRIO));
}
예제 #14
0
파일: init.c 프로젝트: AEUG/400plus
void my_taskcreate_Startup() {
	CreateMainHeap(0x200000, 0x800000 - 0x20000); // in end of MainHeap - own code - 128 Kb

	sub_FFB0FF74();
	sub_FFB2E108(0x386D4380);

	EnableDispatch();
	CreateTask("Startup", 0x19, 0x2000, my_task_Startup, 0);
}
예제 #15
0
static void ReshowPCMenuAfterHallOfFamePC(void)
{
    ScriptContext2_Enable();
    Overworld_PlaySpecialMapMusic();
    BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
    ScrSpecial_CreatePCMenu();
    ScriptMenu_DisplayPCStartupPrompt();
    CreateTask(Task_WaitForPaletteFade, 10);
}
예제 #16
0
bool UmcFramework::Create(apt_dir_layout_t* pDirLayout, apr_pool_t* pool)
{
	m_pDirLayout = pDirLayout;
	m_pPool = pool;

	m_pSessionTable = apr_hash_make(m_pPool);
	m_pScenarioTable = apr_hash_make(m_pPool);
	return CreateTask();
}
예제 #17
0
static void sub_80A2198(u8 priority)
{
    u8 taskId;
    u8 i;

    taskId = CreateTask(Task_80A244C, priority);
    for (i = 1; i < 16; i++)
        gTasks[taskId].data[i] = 0xFFFF;
}
float CreateNewInstance(Station*** stations, Task*** tasks, unsigned int seed)
{

    int nbStations;
	int nbTasks;
	float A = 0; // to calculate the cycle time bound
	int i = 0;
	int j = 0;
	int k = 0;
	float timeBound;

    srand(seed);
	nbStations = (rand() % STATION_NB_VALUES) * STATION_STEP + STATION_MIN;
	nbTasks = (rand() % OPERATION_NB_VALUES) * OPERATION_STEP + OPERATION_MIN;

    // init stations
    free(*stations);
    *stations = (Station**)malloc(nbStations * sizeof(Station*));
    for (i = 0; i < nbStations; i++)
    {
        (*stations)[i] = CreateStation(i);
    }

    // init tasks
	free(*tasks);
	*tasks = (Task**)malloc(nbTasks * sizeof(Task*));
	for (i = 0; i < nbTasks; i++)
	{
		int processingTime = (rand() % PROC_TIME_NB_VALUES) * PROC_TIME_STEP + PROC_TIME_MIN;
		int workersLB = (rand() % WORKERS_LB_NB_VALUES) * WORKERS_LB_STEP + WORKERS_LB_MIN;
		int workersUB = workersLB * 2;
		(*tasks)[i] = CreateTask(i, (float)processingTime, (*stations)[rand() % nbStations], workersLB, workersUB);
		A += processingTime * (workersLB + workersUB) / 2;
	}

	// init time bound
	A /= nbStations;
	timeBound = rand() % (int)(0.5 * A) + A;

	// init precedences
	for (i = 0; i < nbStations; i++)
	{
		for (j = (*stations)[i]->nbTasks - 1; j >= 0; j--)
		{
			for (k = j - 1; k >= 0; k--)
			{
				if (rand() / RAND_MAX <= PRECEDENCE_PROBABILITY)
				{
				    AddPredecessor((*stations)[i]->tasks[j], (*stations)[i]->tasks[k]);
				}
			}
		}
	}

	return timeBound;
}
예제 #19
0
void gps_main(int argc, char *argv[])
{
    assert(GPS_CHANS <= 16);	// verilog limitation, see gps.v: "cmd_chan"

	printf("GPS starting..\n");
    SearchParams(argc, argv);

	SearchInit();

    for(int i=0; i<gps_chans; i++) {
    	char *tname;
    	asprintf(&tname, "GPSchan-%02d", i+1);
    	CreateTaskSP(ChanTask, tname, GPS_PRIORITY, (void *) (long) i);
    }

    CreateTask(SolveTask, GPS_PRIORITY);

    if (!background_mode && print_stats) CreateTask(StatTask, GPS_PRIORITY);
}
예제 #20
0
파일: keyboard.c 프로젝트: contiver/mtask
void
mt_kbd_init(void){
    keymap = keymaps[0];
    kbd_name = names[0];
    scan_mq = CreateMsgQueue("Scan code", KBDBUFSIZE, 1, false, false);
    key_mq = CreateMsgQueue("Input key", KBDBUFSIZE, 1, true, false);
    Ready(CreateTask(input_task, 0, NULL, "Input task", INPUTPRIO));
    mt_set_int_handler(KBDINT, kbdint);
    mt_enable_irq(KBDINT);
}
예제 #21
0
void APP_Start (void) {
  hardware_init(); /* initialize the hardware */
  /* create tasks */
#if USE_SDK_RTOS
  SDK_CreateTask(); /* create a task with the Kinetis SDK API */
  OSA_Start();
#else
  CreateTask(); /* create a task with the 'traditional' FreeRTOS API */
  vTaskStartScheduler(); /* start FreeRTOS scheduler, does usually not return! */
#endif
}
예제 #22
0
파일: credits.c 프로젝트: huderlem/pokeruby
void task_a_8143D04(u8 taskIdA)
{
    switch (gMain.state)
    {
    default:
    case 0:
    {
        u16 i;

        ResetSpriteData();
        FreeAllSpritePalettes();
        gReservedSpritePaletteCount = 8;
        LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM);
        LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800));
        LoadPalette(gBirchBagGrassPal[0] + 1, 1, 31 * 2);

        for (i = 0; i < 0x800; i++)
            HALL_OF_FAME_SHEET_0[i] = 0x11;
        for (i = 0; i < 0x800; i++)
            HALL_OF_FAME_SHEET_1[i] = 0x22;
        for (i = 0; i < 0x800; i++)
            HALL_OF_FAME_SHEET_2[i] = 0x33;

        EWRAM_1F800[0] = 0;
        EWRAM_1F800[1] = 0x53FF; // light yellow
        EWRAM_1F800[2] = 0x529F; // light red
        EWRAM_1F800[3] = 0x7E94; // light blue

        LoadSpriteSheet(gUnknown_0840CAA0);
        LoadSpritePalette(gUnknown_0840CAB0);

        gMain.state += 1;
        break;
    }
    case 1:
        gTasks[taskIdA].data[TDA_TASK_D_ID] = CreateTask(task_d_8144514, 0);
        gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_STATE] = 1;
        gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_TASK_A_ID] = taskIdA;
        gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_2] = gTasks[taskIdA].data[TDA_7];

        BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
        REG_BG3HOFS = 0;
        REG_BG3VOFS = 32;
        REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256;
        REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;

        gMain.state = 0;
        gUnknown_0203935C = 0;
        gTasks[taskIdA].func = task_a_8143B38;
        break;
    }
}
예제 #23
0
파일: rom6.c 프로젝트: huderlem/pokeruby
static void sub_810B634(void)
{
    u8 taskId;

    FieldEffectActiveListRemove(FLDEFF_USE_DIG);
    if (ShouldDoBrailleDigEffect())
    {
        DoBrailleDigEffect();
    }
    else
    {
        taskId = CreateTask(task08_080A1C44, 8);
        gTasks[taskId].data[0] = 0;
    }
}
예제 #24
0
static void Mailbox_UpdateMailListAfterDeposit(void)
{
    u8 taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0);
    u8 oldCount = eMailboxInfo.count;

    eMailboxInfo.count = GetMailboxMailCount();
    Mailbox_UpdateMailList();

    if(oldCount != eMailboxInfo.count && eMailboxInfo.count < eMailboxInfo.pageItems + eMailboxInfo.itemsAbove && eMailboxInfo.itemsAbove != 0) // did the count update?
        eMailboxInfo.itemsAbove--;

    ItemStorage_SetItemAndMailCount(taskId);
    Mailbox_DrawMailboxMenu(taskId);
    pal_fill_black();
}
예제 #25
0
  /** 
   * Create our tasks.  
   * 
   * @param mgr 
   */
  void CreateTasks(AliAnalysisManager* mgr)
  {
    AliAnalysisTaskSE* task = CreateTask(mgr);
    if (!task) {
      Fatal("", "Failed to create the task");
      return;
    }

#if 0
    gSystem->RedirectOutput("settings.txt");
    Printf("=== Settings for %s train === ", mc ? "mc" : "dt");
    task->Dump();
    gSystem->RedirectOutput(0);
#endif

  }
예제 #26
0
int
camino_ns_main(int argc, char **argv)
{
	bool cursor;
	unsigned c;

	ncars = 0;
	pass_max = argc > 1 ? atoi(argv[1]): PASS_MAX;

	mt_cons_clear();
	cursor = mt_cons_cursor(false);

	init_road();

	Ready(ctl = CreateTask(control, 0, NULL, "control", DEFAULT_PRIO));

	mprint(OFFSET, MSGLINE,		"I: auto hacia la izquierda");
	mprint(OFFSET, MSGLINE+1,	"D: auto hacia la derecha");
	mprint(OFFSET, MSGLINE+2,	"S: salir");

	do
		switch ( c = mgetch() )
		{
			case 'I':
			case 'i':
				send_car(LEFTBOUND);
				break;
			case 'D':
			case 'd':
				send_car(RIGHTBOUND);
				break;
			default:
				break;
		}
	while ( c != 's' && c != 'S' ); 

	mprint(OFFSET, MSGLINE + 3, "Esperando que terminen los autos...");
	while ( ncars )
		Yield();

	DeleteTask(ctl);

	mt_cons_clear();
	mt_cons_cursor(cursor);

	return 0;
}
예제 #27
0
void ParticleSource::emit(const U64 deltaTimeUS, std::shared_ptr<ParticleData> p) {
    ParticleData& data = *p;

    const F32 dt = Time::MicrosecondsToSeconds<F32>(deltaTimeUS);
    const U32 maxNewParticles = to_U32(dt * _emitRate);
    const U32 startID = data.aliveCount();
    const U32 endID = std::min(startID + maxNewParticles, data.totalCount() - 1);

    TaskHandle generateTask = CreateTask(_context.context(), DELEGATE_CBK<void, const Task&>());
    for (std::shared_ptr<ParticleGenerator>& gen : _particleGenerators) {
        gen->generate(generateTask, deltaTimeUS, data, startID, endID);
    }
    generateTask.startTask().wait();

    for (U32 i = startID; i < endID; ++i) {
        p->wake(i);
    }
}
예제 #28
0
void sub_81376B8(void)
{
    bool8 r4 = FALSE;

    if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy)
        r4 = TRUE;
    if (r4 && ewram17810[gActiveBattler].unk1_0 && ewram17810[gActiveBattler ^ 2].unk1_0)
    {
        ewram17810[gActiveBattler].unk0_7 = 0;
        ewram17810[gActiveBattler].unk1_0 = 0;
        ewram17810[gActiveBattler ^ 2].unk0_7 = 0;
        ewram17810[gActiveBattler ^ 2].unk1_0 = 0;
        FreeSpriteTilesByTag(0x27F9);
        FreeSpritePaletteByTag(0x27F9);
        CreateTask(c3_0802FDF4, 10);
        HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
        WallyBufferExecCompleted();
    }
}
예제 #29
0
void CB2_InitResetRtcScreen(void)
{
    REG_DISPCNT = 0;
    SetVBlankCallback(NULL);
    DmaClear16(3, PLTT, PLTT_SIZE);
    DmaFill16Large(3, 0, (u8 *)VRAM, 0x18000, 0x1000);
    ResetOamRange(0, 128);
    LoadOam();
    ScanlineEffect_Stop();
    ScanlineEffect_Clear();
    ResetSpriteData();
    ResetTasks();
    ResetPaletteFade();
    Text_LoadWindowTemplate(&gMenuTextWindowTemplate);
    InitMenuWindow(&gMenuTextWindowTemplate);
    REG_DISPCNT = 4352;
    SetVBlankCallback(VBlankCB_ResetRtcScreen);
    SetMainCallback2(CB2_ResetRtcScreen);
    CreateTask(Task_ResetRtcScreen, 80);
}
예제 #30
0
파일: pmon.c 프로젝트: joseignaciosg/tpeSO2
int 
main(void)
{
	mon = CreateMonitor("dos");
	cond = CreateCondition("key", mon);

	Ready(CreateTask(consumer, 2000, "consumer", "consumer", DEFAULT_PRIO));

	while ( true )
	{
		EnterMonitor(mon);
		while ( key )
			WaitCondition(cond);
		key = getch();
		if ( key == 'S' || key == 's' )
			return 0;
		SignalCondition(cond);
		LeaveMonitor(mon);
	}
}