diff --git a/Debug/ps7/start_amp_session.sh b/Debug/ps7/start_amp_session.sh index 80ac39a..3933fd6 100755 --- a/Debug/ps7/start_amp_session.sh +++ b/Debug/ps7/start_amp_session.sh @@ -24,7 +24,7 @@ P1_PORT=$((10000+$RANDOM)) P2_TITLE=ARM_AMP_CORE0 P3_TMP=/tmp P4_SYS=/tools/lauterbach/r_2018_02 -P9_TCF="$((20000+$USER_ID_SUFFIX))" +P9_TCF="$((20000+$RANDOM))" if [[ ! ${1} ]]; then echo "Please specify lauterbach hostname" diff --git a/skript.pdf b/skript.pdf index 81b4f18..e858368 100644 Binary files a/skript.pdf and b/skript.pdf differ diff --git a/src/Modules/genericTaskset/src/gt_core.c b/src/Modules/genericTaskset/src/gt_core.c index 5e54810..c7c4a6b 100644 --- a/src/Modules/genericTaskset/src/gt_core.c +++ b/src/Modules/genericTaskset/src/gt_core.c @@ -36,6 +36,7 @@ static void _GT_RunableLoop (GT_TASK_T *pMyOwnTask) __attribute__ ((always_inlin /** * Weak functions for hooks that are not implemented */ +__attribute__((weak)) void GT_TaskActivationHook(GT_TASK_T *pMyOwnTask) {(void)pMyOwnTask;return;} __attribute__((weak)) void GT_TaskStartHook(GT_TASK_T *pMyOwnTask) {(void)pMyOwnTask;return;} __attribute__((weak)) void GT_TaskEndHook(GT_TASK_T *pMyOwnTask){return;} __attribute__((weak)) void GT_RunableStartHook(GT_TASK_T *pMyOwnTask){(void)pMyOwnTask;return;} @@ -43,6 +44,7 @@ __attribute__((weak)) void GT_RunableEndHook(GT_TASK_T *pMyOwnTask){return;} __attribute__((weak)) void GT_TaskSwHook (GT_TASK_T *pMyOwnTask){return;} __attribute__((weak)) void GT_InitHook(GT_INIT_T * pInit){return;} __attribute__((weak)) void GT_StopHook(void){return;} +__attribute__((weak)) void GT_TaskMissHook(GT_TASK_T *pMyOwnTask) {(void)pMyOwnTask;return;} __attribute__((weak)) volatile void GT_CalibrateStartHook(void){return;} __attribute__((weak)) volatile void GT_CalibrateEndHook(void){return;} @@ -83,7 +85,9 @@ inline static void _GT_TaskLoop(GT_TASK_T *pMyOwnTask) /* * Call task start hook */ + OS_ENTER_CRITICAL(); GT_TaskStartHook(pMyOwnTask); + OS_EXIT_CRITICAL(); /* * Determine CET */ @@ -95,7 +99,9 @@ inline static void _GT_TaskLoop(GT_TASK_T *pMyOwnTask) /* * Call task end hook */ + OS_ENTER_CRITICAL(); GT_TaskEndHook(pMyOwnTask); + OS_EXIT_CRITICAL(); /* * Increment sequence number */ @@ -347,9 +353,19 @@ void GT_Stop(void) } void GT_ActivateTask(CPU_INT08U id){ + CPU_SR cpu_sr; + GT_RT_VAL_T *internal = >_TaskTable[id].Internal; if(GT_TaskTable[id].ActivationType != GT_ACT_OFF){ - OSQPost(GT_TaskTable[id].Internal.pActQ,(void *)0); - GT_TaskTable[id].Internal.ActCounter++; + OS_ENTER_CRITICAL(); + GT_TaskActivationHook(>_Tasks[id]); + OS_EXIT_CRITICAL(); + if(internal->ActCounter != internal->SeqNr){ + OS_ENTER_CRITICAL(); + GT_TaskMissHook(>_Tasks[id]); + OS_EXIT_CRITICAL(); + } + OSQPost(internal->pActQ,(void *)0); + internal->ActCounter++; } }