tweak waters data dependencies
This commit is contained in:
parent
4bb52ce75f
commit
76e7014eee
@ -29,7 +29,7 @@
|
||||
#include <queue.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define LOCAL_WCET_MULT 15 // Multiplier to increase all waiting periods to make the schedule more tight an force preemptions
|
||||
#define LOCAL_WCET_MULT 14 // Multiplier to increase all waiting periods to make the schedule more tight an force preemptions
|
||||
#define NUM_TASKS 10
|
||||
#include "fuzzhelper.c"
|
||||
|
||||
@ -399,9 +399,9 @@ static void prvTaskC11( void * pvParameters ) {
|
||||
// Output: g(x) = x % 8
|
||||
// WC Input: x = 629760
|
||||
uint32_t x = INPUT_LONG_NEXT;
|
||||
xTaskNotify(xTaskC12, DEBUG_VAL(x % 8 + 1, 1), eSetValueWithOverwrite);
|
||||
volatile int torun = (x>>8) & 0x0fff;
|
||||
WCET_CLAMP(torun*LOCAL_WCET_MULT, 500*LOCAL_WCET_MULT, 2460*LOCAL_WCET_MULT, TASK_579_MESSAGE)
|
||||
xTaskNotify(xTaskC12, DEBUG_VAL(x % 8, 0), eSetValueWithOverwrite);
|
||||
// ---------------------------------------------
|
||||
trigger_job_done();
|
||||
xTaskDelayUntil( &xLastWakeTime, xFrequency );}
|
||||
@ -419,7 +419,8 @@ static void prvTaskC12( void * pvParameters ) {
|
||||
// Output: g(x) = x % 8 == y
|
||||
// WC Input: x = 12000, y = 0
|
||||
uint16_t x = INPUT_SHORT_NEXT;
|
||||
int y = ulTaskNotifyTake(pdTRUE, 0);
|
||||
int y = ulTaskNotifyTake(pdTRUE, portMAX_DELAY)-1;
|
||||
xTaskNotify(xTaskC13, DEBUG_VAL((x % 8 == y) + 1, 2), eSetValueWithOverwrite);
|
||||
volatile int torun = 0;
|
||||
if (x % 8 == y) {
|
||||
torun = 40000 + x;
|
||||
@ -427,7 +428,6 @@ static void prvTaskC12( void * pvParameters ) {
|
||||
torun = CLAMP(x, 0, 40000);
|
||||
}
|
||||
WCET_CLAMP(torun*LOCAL_WCET_MULT, 0, 51485*LOCAL_WCET_MULT, TASK_1009_MESSAGE)
|
||||
xTaskNotify(xTaskC13, DEBUG_VAL(x % 8 == y, 1), eSetValueWithOverwrite);
|
||||
// ---------------------------------------------
|
||||
trigger_job_done();
|
||||
xTaskDelayUntil( &xLastWakeTime, xFrequency );}
|
||||
@ -447,18 +447,25 @@ static void prvTaskC13( void * pvParameters ) {
|
||||
// Output: g(x) = y && rng(x)
|
||||
// longmax - shortmax: 39505
|
||||
// most likely long case, which causes a short case in next task
|
||||
// WC Input: x = , y = 1
|
||||
// WC Input: x = 65535 , y = 0 for "long" run
|
||||
// WC Input: x = 65535 , y = 1 for "short" run
|
||||
// globally, short runs consume more time in subsequent jobs
|
||||
volatile uint32_t x = INPUT_SHORT_NEXT;
|
||||
int y = ulTaskNotifyTake(pdTRUE, 0);
|
||||
int y = ulTaskNotifyTake(pdTRUE, portMAX_DELAY)-1;
|
||||
volatile int do_short_run = (y + ((x%100)<=5)) == 1; // XOR
|
||||
xTaskNotify(xTaskC14, DEBUG_VAL(do_short_run+1, 2), eSetValueWithOverwrite);
|
||||
int torun = 0;
|
||||
if (do_short_run > 0) {
|
||||
torun = 40000 + x;
|
||||
} else {
|
||||
torun = 80000 + x;
|
||||
}
|
||||
#ifdef INSERT_WC
|
||||
WCET_CLAMP(torun*LOCAL_WCET_MULT, 0, 145040*LOCAL_WCET_MULT, TASK_1129_MESSAGE)
|
||||
xTaskNotify(xTaskC14, do_short_run, eSetValueWithOverwrite);
|
||||
#else
|
||||
// to reach the global wcrt, take the shorter case
|
||||
WCET_CLAMP(torun*LOCAL_WCET_MULT, 0, (40000+0xFFFF)*LOCAL_WCET_MULT, TASK_1129_MESSAGE)
|
||||
#endif
|
||||
// ---------------------------------------------
|
||||
trigger_job_done();
|
||||
xTaskDelayUntil( &xLastWakeTime, xFrequency );}
|
||||
@ -475,7 +482,7 @@ static void prvTaskC14( void * pvParameters ) {
|
||||
// Exectime: f(x,y) = if y ? c1+2*x : c2-x
|
||||
// longmax - shortmax: 76955
|
||||
volatile uint32_t x = INPUT_SHORT_NEXT;
|
||||
int y = ulTaskNotifyTake(pdTRUE, 0);
|
||||
int y = ulTaskNotifyTake(pdTRUE, portMAX_DELAY)-1;
|
||||
volatile int torun = 0;
|
||||
if (y) {
|
||||
torun = x*3;
|
||||
|
Loading…
x
Reference in New Issue
Block a user