On 11 November 2016 at 10:17, Juri Lelli juri.lelli@arm.com wrote:
Add a new phase called 'delay' with which the initial starting time of a task can be delayed. Parameter is expressed in usec.
Could you add a description of the command in the tutorial.txt document ?
Usage is:
"phases": { "p0": { "delay": 1500000
}, ... other phases ...
}
This delay seems to be more a thread's properties than a event : It should be called only once in a dedicated phase You should better parse it and set t_first in the parse_thread_data
Signed-off-by: Juri Lelli juri.lelli@arm.com
src/rt-app.c | 9 +++++++++ src/rt-app_parse_config.c | 6 +++++- src/rt-app_types.h | 1 + src/rt-app_utils.c | 5 +++++ 4 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/rt-app.c b/src/rt-app.c index 77d682acf3db..76a5c11b365c 100644 --- a/src/rt-app.c +++ b/src/rt-app.c @@ -297,6 +297,15 @@ static int run_event(event_data_t *event, int dry_run, *duration += timespec_to_usec(&t_end); } break;
case rtapp_delay:
{
struct timespec delay = usec_to_timespec(event->duration);
log_debug("delay %d ", event->duration);
*t_first = timespec_add(t_first, &delay);
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, t_first, NULL);
}
break; case rtapp_timer: { struct timespec t_period, t_now, t_wu, t_slack;
diff --git a/src/rt-app_parse_config.c b/src/rt-app_parse_config.c index c59b56290bbf..f8d0f52f3ab9 100644 --- a/src/rt-app_parse_config.c +++ b/src/rt-app_parse_config.c @@ -339,7 +339,8 @@ parse_thread_event_data(char *name, struct json_object *obj, int i;
if (!strncmp(name, "run", strlen("run")) ||
!strncmp(name, "sleep", strlen("sleep"))) {
!strncmp(name, "sleep", strlen("sleep")) ||
!strncmp(name, "delay", strlen("delay"))) { if (!json_object_is_type(obj, json_type_int)) goto unknown_event;
@@ -350,6 +351,8 @@ parse_thread_event_data(char *name, struct json_object *obj, data->type = rtapp_sleep; else if (!strncmp(name, "runtime", strlen("runtime"))) data->type = rtapp_runtime;
else if (!strncmp(name, "delay", strlen("delay")))
data->type = rtapp_delay; else data->type = rtapp_run;
@@ -562,6 +565,7 @@ static char *events[] = { "sleep", "runtime", "run",
"delay", "timer", "suspend", "resume",
diff --git a/src/rt-app_types.h b/src/rt-app_types.h index 0570e7b5ad3e..cb7c9242f82e 100644 --- a/src/rt-app_types.h +++ b/src/rt-app_types.h @@ -58,6 +58,7 @@ typedef enum resource_t rtapp_signal, rtapp_broadcast, rtapp_sleep,
rtapp_delay, rtapp_run, rtapp_sig_and_wait, rtapp_lock,
diff --git a/src/rt-app_utils.c b/src/rt-app_utils.c index 45cf26a964e2..eeb8e7b04e91 100644 --- a/src/rt-app_utils.c +++ b/src/rt-app_utils.c @@ -215,6 +215,8 @@ string_to_resource(const char *name, resource_t *resource) *resource = rtapp_sig_and_wait; else if (strcmp(name, "sleep") == 0) *resource = rtapp_sleep;
else if (strcmp(name, "delay") == 0)
*resource = rtapp_delay; else if (strcmp(name, "run") == 0) *resource = rtapp_run; else if (strcmp(name, "timer") == 0)
@@ -246,6 +248,9 @@ resource_to_string(resource_t resource, char *resource_name) case rtapp_sleep: strcpy(resource_name, "sleep"); break;
case rtapp_delay:
strcpy(resource_name, "delay");
break; case rtapp_run: strcpy(resource_name, "run"); break;
-- 2.10.0