/* TASK 3 */ static void vHookTask3( void *pvParameters ) { portTickType xLastExecutionTime = xTaskGetTickCount(); unsigned int i; for( ;; ) { /* Enforce task frequency */ vTaskDelayUntil( &xLastExecutionTime, TASK3_DELAY ); uputs("Task3 "); uputs("knob: "); uputi(task3_knob); uputs(" inst: "); uputi(getMiscVal()); uputs("\n"); for( i=0; i<task3_knob; i++){__asm__("nop");} } }
static void readPowTemp ( void *pvParameters ){ portTickType xLastExecutionTime = xTaskGetTickCount(); vemu_sensors s; for( ;; ) { // Enforce task frequency vTaskDelayUntil( &xLastExecutionTime, READPOWTEMP_DELAY ); // read sensors vemu_read_sensors(&s); PowerModel.temps[PowerModel.num] = s.t; PowerModel.ps[PowerModel.num] = s.sp; PowerModel.pa[PowerModel.num] = s.ap; // if points are collected, fit the models if( ++PowerModel.num == POWER_MODEL_POINTS ){ // fit sleep power model fitPsModel(); // fit active power model fitPaModel(); // print results uputs("\n\n<<< slope / offset : >>>\n"); uputi((int)(1000*PowerModel.psslope)); uputs("\n"); uputi((int)(1000*PowerModel.psoffset)); uputs("\n"); uputi((int)(1000*PowerModel.paslope)); uputs("\n"); uputi((int)(1000*PowerModel.paoffset)); uputs("\n"); // find optimal DC PowerModel.optimalDC = findOptimalDC( PowerModel.lifetime_hours, PowerModel.energy_joules ); uputs("optimal DC x 1000\n"); uputi((int)(1000*PowerModel.optimalDC)); uputs("\n"); // reset power model PowerModel.num = 0; // suspend our own operation until someone wakes us up vTaskSuspend( NULL ); } } }
/* TASK 2 */ static void vHookTask2( void *pvParameters ) { portTickType xLastExecutionTime = xTaskGetTickCount(); unsigned int i; char led_status = 0; vemu_regs d,p,c; vemu_regs *dp,*pp,*cp,*tp; vemu_sensors s; dp = &d; pp = &p; cp = &c; vemu_read_registers(cp); for( ;; ) { /* Enforce task frequency */ vTaskDelayUntil( &xLastExecutionTime, TASK3_DELAY ); tp = cp; cp = pp; pp = tp; vemu_read_registers(cp); vemu_read_sensors(&s); vemu_delta(dp, cp, pp); /* uputs("Task2 "); uputs("knob: "); uputi(task2_knob); uputs(" inst: "); uputi(getMiscVal()); uputs("\n"); */ led_status = !led_status; GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, led_status); uputs("\n--TASK3--\n"); uputs("\nA t: "); uputi(dp->at); uputs("\nA e: "); uputi(dp->ae); uputs("\nS t: "); uputi(dp->st); uputs("\nS e: "); uputi(dp->se); uputs("\nT : "); uputi(s.t); uputs("\nPa : "); uputi(s.ap); uputs("\nPs : "); uputi(s.sp); uputs("\ncounter : "); uputi(getMiscVal()); } }
/* TASK 2 */ static void vHookTask2( void *pvParameters ) { portTickType xLastExecutionTime = xTaskGetTickCount(); unsigned int i; char led_status = 0; for( ;; ) { /* Enforce task frequency */ vTaskDelayUntil( &xLastExecutionTime, TASK2_DELAY ); uputs("Task2 "); uputs("knob: "); uputi(task2_knob); uputs(" inst: "); uputi(getMiscVal()); uputs("\n"); for( i=0; i<task2_knob; i++){__asm__("nop");} led_status = !led_status; GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, led_status); } }
/* TASK 2 */ static void vHookTask2( void *pvParameters ) { portTickType xLastExecutionTime = xTaskGetTickCount(); unsigned int i; char led_status = 0; unsigned long long old_time = vGetTimerValue(); vemu_regs d,p,c; vemu_regs *dp,*pp,*cp,*tp; vemu_sensors s; dp = &d; pp = &p; cp = &c; vemu_read_registers(cp); for( ;; ) { /* Enforce task frequency */ vTaskDelayUntil( &xLastExecutionTime, TASK2_DELAY ); uputs("Task2 "); tp = pp; pp = cp; cp = tp; vemu_read_registers(cp); vemu_delta(dp, cp, pp); led_status = !led_status; GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, led_status); uputs("\nA t: "); uputi(dp->at); uputs("\nA e: "); uputi(dp->ae); uputs("\nS t: "); uputi(dp->st); uputs("\nS e: "); uputi(dp->se); uputs("\nT : "); uputi(s.t); uputs("\nPa : "); uputi(s.ap); uputs("\nPs : "); uputi(s.sp); } }
/* TASK 1 */ static void vHookTask1( void *pvParameters ) { int taskid = *(int *)pvParameters; portTickType xLastExecutionTime = xTaskGetTickCount(); vemu_regs curr, prev, delta; //memset(&curr, 0, sizeof(vemu_regs)); //memset(&prev, 0, sizeof(vemu_regs)); //memset(&delta, 0, sizeof(vemu_regs)); vemu_regs *cp, *pp, *tp, *dp; cp = &curr; pp = &prev; dp = δ for( ;; ) { /* Enforce task frequency */ vTaskDelayUntil( &xLastExecutionTime, TASK1_DELAY ); /* Update varEMU stats */ tp = pp; pp = cp; cp = tp; vemu_read_state(cp); vemu_delta(dp, cp, pp); uputs("vVemuTask "); uputi(taskid); uputs(" "); unsigned long long number = cp->total_cycles; uputs("C: "); uputi(number); uputs(" "); uputs("D: "); uputi(dp->total_cycles); uputs(" "); uputs("S: "); uputi(cp->slp_time); uputs(" "); uputs("D: "); uputi(dp->slp_time); uputs(" "); uputs("AE: "); uputi(cp->total_act_energy); uputs(" "); uputs("D: "); uputi(dp->total_act_energy); uputs(" "); uputs("SE: "); uputi(cp->slp_energy); uputs(" "); uputs("D: "); uputi(dp->slp_energy); uputs("\n"); } }