mov.w r4,#LC_PATTERN\r
str r4,[sp,#C_CONTEXT_OFFS] \r
mov r0,sp // stack as first arg\r
+ \r
+// When at interrupt nest count = 0, load interrupt stack \r
+ ldr r4,=os_sys\r
+ ldr r5,[r4,#SYS_INT_NEST_CNT]\r
+ cmp r5, #0\r
+ bgt arggg\r
+ \r
+ ldr sp,[r4,#SYS_INT_STACK] \r
+ \r
+arggg: \r
bl Irq_Entry\r
mov sp, r0 // pop from returned stack\r
\r
.type _start,@function\r
\r
// Good information about the E500 is freescale doc: E500ABIUG.pdf\r
+ \r
+\r
+.global _redled\r
+_redled:\r
+ // mpc5567qrtech: light up led K2 \r
+ li r0, 0x0202\r
+ lis r3, 0xC3F9013A@h\r
+ ori r3, r3, 0xC3F90130@l\r
+ stw r0, 8(r3)\r
+ b _exit\r
+\r
_start:\r
// Set up the reserved registers in EABI: r1,r2 and r13\r
\r
\r
// make space for initial backchain..\r
subi r1,r1,16\r
-\r
+ \r
+\r
+ # Clear all SRAM\r
+init_RAM:\r
+ lis r11,0x4000 # base address of the SRAM, 64-bit word aligned\r
+ ori r11,r11,0 # not needed for this address but could be for others\r
+ li r12,640 # loop counter to get all of SRAM;\r
+ # 80k/4 bytes/32 GPRs = 640\r
+ mtctr r12\r
+\r
+init_ram_loop:\r
+ stmw r0,0(r11) # write all 32 GPRs to SRAM\r
+ addi r11,r11,128 # inc the ram ptr; 32 GPRs * 4 bytes = 128\r
+ bdnz init_ram_loop # loop for 80k of SRAM\r
+ \r
// Copy initialized data from ROM to RAM\r
lis r3,__DATA_ROM@h\r
ori r3,r3,__DATA_ROM@l\r
cmplw r3,r4\r
bne+ 2b\r
3:\r
-\r
# Call main() with argc set to 1 and argv ignored\r
li r3,1\r
bl main\r
VPATH += $(ROOTDIR)/common\r
\r
\r
+#TCF\r
+obj-$(USE_TCF) += tcf.o\r
+obj-$(USE_TCF) += Tcf_Cfg.o\r
+obj-$(USE_TCF) += sys_monitor.o\r
+obj-$(USE_TCF) += streams.o\r
+inc-$(USE_TCF) += $(ROOTDIR)/common/tcf\r
+vpath-$(USE_TCF) += $(ROOTDIR)/common/tcf\r
+\r
# Newlib overrides (overridden by default)\r
ifneq ($(CFG_STANDARD_NEWLIB),y)\r
obj-y += xtoa.o\r
# default or private\r
MOD_AVAIL+=ADC MCU PWM \r
# System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
# Additional\r
-MOD_AVAIL+= RAMLOG \r
+MOD_AVAIL+=RAMLOG \r
\r
# Needed by us\r
MOD_USE=KERNEL MCU\r
# default or private (These become MOD_XXX=y )
MOD_AVAIL+=MCU GPT
# System + Communication + Diagnostic
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE
# Additional
-MOD_AVAIL+= RAMLOG
+MOD_AVAIL+=RAMLOG
# Needed by us (These become USE_XXX=y and def-y += USE_XXX )
\r
# What buildable modules does this board have, \r
# default or private\r
-MOD_AVAIL+=COM PDUR DET DCM DEM COMM CANSM CANTP CANIF CANNM NM\r
+MOD_AVAIL+=COM PDUR DET DCM DEM COMM CANSM CANTP CANIF CANNM NM RTE\r
\r
# Needed by us\r
MOD_USE=\r
# Memory + Peripherals\r
MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG \r
# System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
# Additional\r
MOD_AVAIL+= RAMLOG \r
# Memory + Peripherals\r
MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG \r
# System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
# Additional\r
-MOD_AVAIL+= RAMLOG \r
+MOD_AVAIL+=RAMLOG \r
# Memory + Peripherals\r
MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG \r
# System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
# Additional\r
-MOD_AVAIL+= RAMLOG \r
+MOD_AVAIL+=RAMLOG \r
# Memory + Peripherals\r
MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG \r
# System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
# Additional\r
-MOD_AVAIL+= RAMLOG \r
+MOD_AVAIL+=RAMLOG \r
\r
\r
# Memory + Peripherals
MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG
# System + Communication + Diagnostic
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE
# Additional
-MOD_AVAIL+= RAMLOG
+MOD_AVAIL+=RAMLOG
\r
MOD_AVAIL+=ADC CAN DIO MCU FLS PORT PWM \r
# System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
# Additional\r
MOD_AVAIL+= RAMLOG \r
\r
\r
MOD_AVAIL+=ADC CAN DIO MCU FLS PORT PWM \r
# System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
# Additional\r
-MOD_AVAIL+= RAMLOG \r
+MOD_AVAIL+=RAMLOG TCF LWIP\r
\r
#\r
# Extra defines \r
#\r
\r
-# Use little heap\r
-def-y += HEAPSIZE=25000\r
# Select the right device in ST header files.\r
# [ STM32F10X_LD | STM32F10X_MD | STM32F10X_HD |STM32F10X_CL ]\r
def-y += STM32F10X_CL\r
/** Allow Pin mode changes during runtime (not avail on this CPU) */\r
#define PORT_SET_PIN_MODE_API STD_ON\r
\r
-/** @req PORT124 */\r
-typedef uint8 Port_PinModeType;\r
-\r
/** HW specific symbolic names of pins */\r
/** @req PORT013 */\r
typedef enum{\r
int CirqBuffDynPush( CirqBufferDynType *cPtr, void *dataPtr ) {
uint32_t flags;
+ Irq_Save(flags);
if( (cPtr->currCnt == cPtr->maxCnt) || (cPtr==NULL) ) {
+ Irq_Restore(flags);
return 1; /* No more room */
}
- Irq_Save(flags);
MEMCPY(cPtr->head,dataPtr,cPtr->dataSize);
cPtr->head = (char *)cPtr->head + cPtr->dataSize;
if( cPtr->head == cPtr->bufEnd) {
int CirqBuffDynPop(CirqBufferDynType *cPtr, void *dataPtr ) {
uint32_t flags;
+ Irq_Save(flags);
if( (cPtr->currCnt == 0) || (cPtr==NULL) ) {
+ Irq_Restore(flags);
return 1;
}
- Irq_Save(flags);
MEMCPY(dataPtr,cPtr->tail,cPtr->dataSize);
cPtr->tail = (char *)cPtr->tail + cPtr->dataSize;
if( cPtr->tail == cPtr->bufEnd) {
*/\r
int Arc_MBoxPost( Arc_MBoxType *mPtr, void *msg ) {\r
int rv;\r
- rv = CirqBuffDynPush(mPtr->cirqPtr,msg);\r
+ rv = CirqBuffPush(mPtr->cirqPtr,msg);\r
if( rv != 0) {\r
return 1;\r
}\r
int Arc_MBoxFetch(Arc_MBoxType *mPtr, void *msg)\r
{\r
int rv;\r
- rv = CirqBuffDynPop(mPtr->cirqPtr,msg);\r
+ rv = CirqBuffPop(mPtr->cirqPtr,msg);\r
if(rv != 0) {\r
return 1;\r
}\r
#include "core_cm3.h"\r
#endif\r
\r
+#ifdef USE_TTY_TCF_STREAMS\r
+#include "streams.h"\r
+#endif\r
+\r
\r
#if defined(CFG_ARM)\r
#define open _open\r
}\r
#endif\r
\r
-#if defined(USE_RAMLOG)\r
+#ifdef USE_TTY_TCF_STREAMS\r
char *buf = (char *)_buf;\r
for (int i = 0; i < nbytes; i++) {\r
- ramlog_chr (*(buf + i));\r
+ TCF_TTY_SendChar(*(buf + i));\r
+ }\r
+#endif\r
+\r
+#if defined(USE_RAMLOG)\r
+ {\r
+ char *buf = (char *)_buf;\r
+ for (int i = 0; i < nbytes; i++) {\r
+ ramlog_chr (*(buf + i));\r
+ }\r
}\r
#endif\r
\r
* snprintf(buf,) -> vsnprintf(buf,)\r
*\r
* IMPLEMENTATION NOTE:\r
- * If printing more than the limit, e.g. using vsnprintf() then\r
- * the emit function will only stop printing, but not interrupted\r
- * (The code will get more complicated that way)\r
+ * - If printing more than the limit, e.g. using vsnprintf() then\r
+ * the emit function will only stop printing, but not interrupted\r
+ * (The code will get more complicated that way)\r
+ * - ANSI-C and POSIX, streams and POSIX filenumbers.\r
+ * POSIX file-numbers exist in unistd.h and are only to be used by the porting\r
+ * newlib interface i.e. newlib_port.c.\r
+ * The filenumber is actually just a cast of the steampointer and save in the member\r
+ * _cookie in FILE.\r
+ *\r
*/\r
\r
#include <unistd.h>\r
\r
//#define HOST_TEST 1\r
\r
-#ifdef HOST_TEST\r
-#define _STDOUT stdout\r
-#define _STDIN stdin\r
-#define _STDERR stderr\r
-#else\r
-#define _STDOUT (FILE *)STDOUT_FILENO\r
-#define _STDINT STDIN_FILENO\r
-#define _STDERR (FILE *)STDERR_FILENO\r
-#endif\r
-\r
-\r
int arc_putchar(int fd, int c);\r
int print(FILE *file, char **buffer, size_t n, const char *format, va_list ap);\r
\r
int rv;\r
\r
va_start(ap, format);\r
- rv = vfprintf(_STDOUT, format, ap);\r
+ rv = vfprintf(stdout, format, ap);\r
va_end(ap);\r
return rv;\r
}\r
}\r
\r
int vprintf(const char *format, va_list ap) {\r
- return vfprintf(_STDOUT, format, ap);\r
+ return vfprintf(stdout, format, ap);\r
}\r
\r
int vsprintf(char *buffer, const char *format, va_list ap) {\r
\r
int vfprintf(FILE *file, const char *format, va_list ap) {\r
int rv;\r
- /* Just print to _STDOUT */\r
+ /* Just print to stdout */\r
rv = print(file,NULL,~(size_t)0, format,ap);\r
return rv;\r
}\r
--(*left);\r
if( buf == NULL ) {\r
#if HOST_TEST\r
- putc(c, _STDOUT);\r
- fflush(_STDOUT);\r
+ putc(c, stdout);\r
+ fflush(stdout);\r
#else\r
- arc_putchar((int)file, c);\r
+ arc_putchar(file->_cookie, c);\r
#endif\r
} else {\r
**buf = c;\r
#define FL_ALIGN_LEFT (1<<4)\r
#define FL_TYPE_SIGNED_INT (1<<5)\r
#define FL_TYPE_UNSIGNED_INT (1<<6)\r
-\r
+#define FL_TYPE_POINTER (1<<7)\r
\r
static void emitString( FILE *file, char **buffer, char *string, int width, int flags, int *left) {\r
char pad;\r
flags |= FL_TYPE_UNSIGNED_INT;\r
emitInt(file,buffer,va_arg( ap, int ),16,width,flags,&left);\r
break;\r
+ case 'p':\r
+ flags |= FL_TYPE_POINTER;\r
+ emitInt(file,buffer,va_arg( ap, int ),16,width,flags,&left);\r
+ break;\r
case 's':\r
str = (char *)va_arg( ap, int );\r
\r
\r
printf("decimal: 00c000 = %06x \n", 0xc000);\r
\r
- fprintf(_STDOUT, "string: %s = foobar \n", "foobar");\r
+ fprintf(stdout, "string: %s = foobar \n", "foobar");\r
sprintf(buff, "string: %s = foobar \n", "foobar");\r
printf("%s",buff);\r
\r
* -------------------------------- Arctic Core ------------------------------*/\r
\r
#include "sleep.h"\r
+#include "Mcu.h"\r
+#include "Os.h"\r
\r
struct timeoutlist_t{\r
uint32_t timeout;\r
\r
void Sleep(uint32_t nofTicks, TaskType TaskID, EventMaskType Mask )\r
{\r
- timeoutlist[TaskID].timeout = ticks + nofTicks;\r
- timeoutlist[TaskID].active = TRUE;\r
- timeoutlist[TaskID].mask = Mask;\r
+ uint32 pval = McuE_EnterCriticalSection();\r
+ if(nofTicks == 0){\r
+ nofTicks=1;\r
+ }\r
+ if(TaskID < OS_TASK_CNT){\r
+ timeoutlist[TaskID].timeout = ticks + nofTicks;\r
+ timeoutlist[TaskID].active = TRUE;\r
+ timeoutlist[TaskID].mask = Mask;\r
+ }else{\r
+ /* Error */\r
+ ErrorHook(E_OS_LIMIT);\r
+ }\r
+ McuE_ExitCriticalSection(pval);\r
}\r
\r
\r
uint32_t i;\r
for(;;) {\r
// Alarms every tick\r
- WaitEvent(EVENT_MASK_EVENT_SLEEP_ALARM_TASK);\r
- ClearEvent(EVENT_MASK_EVENT_SLEEP_ALARM_TASK);\r
+ WaitEvent(EVENT_MASK_SLEEP_ALARM_TASK);\r
+ ClearEvent(EVENT_MASK_SLEEP_ALARM_TASK);\r
\r
ticks++;\r
\r
--- /dev/null
+/*\r
+ * tcf_cfg.c\r
+ *\r
+ * Created on: 15 sep 2010\r
+ * Author: jcar\r
+ */\r
+#include "Tcf_Cfg.h"\r
+\r
+//Service includes\r
+#include "sys_monitor.h"\r
+#include "streams.h"\r
+\r
+const char locator_hello[] = "E\0Locator\0Hello\0[\"Locator\",\"SysMonitor\",\"AsciiStreams\",\"FileSystem\"]\0\x03\x01";\r
+\r
+const TCF_Service_Info tcfServiceCfgList[] = {\r
+ {"Locator", handle_LocatorCommand, handle_LocatorEvent},\r
+ {"FileSystem", handle_FileSystemCommand, handle_FileSystemEvent},\r
+ {"SysMonitor", handle_SysMonCommand, handle_SysMonEvent},\r
+ {"AsciiStreams", handle_StreamsCommand, handle_StreamsEvent},\r
+ {"NULL", NULL},\r
+};\r
--- /dev/null
+/*\r
+ * Tcf_Cfg.h\r
+ *\r
+ * Created on: 15 sep 2010\r
+ * Author: jcar\r
+ */\r
+\r
+#ifndef TCF_CFG_H_\r
+#define TCF_CFG_H_\r
+\r
+#include "tcf.h"\r
+\r
+typedef struct {\r
+ char name[16];\r
+ TCF_Service_CommandHandler commandHandler;\r
+ TCF_Service_EventHandler eventHandler;\r
+} TCF_Service_Info;\r
+\r
+extern const TCF_Service_Info tcfServiceCfgList[];\r
+\r
+extern const char locator_hello[];\r
+\r
+#endif /* TCF_CFG_H_ */\r
--- /dev/null
+/*\r
+ * streams.c\r
+ *\r
+ * Created on: 15 sep 2010\r
+ * Author: jcar\r
+ */\r
+\r
+#include "Std_Types.h"\r
+#include "streams.h"\r
+#include "tcf.h"\r
+#include <string.h>\r
+#include "internal.h"\r
+#include "xtoa.h"\r
+#include "cirq_buffer.h"\r
+\r
+const char Streams_PID[] = "\"PID\":";\r
+const char Streams_Read[] = "read";\r
+const char Streams_Write[] = "write";\r
+const char Streams_Subscribe[] = "subcribe";\r
+const char Streams_Unsubscribe[] = "unsubscribe";\r
+const char Streams_Connect[] = "connect";\r
+const char Streams_Disconnect[] = "disconnect";\r
+const char Streams_EndofStream[] = "eos";\r
+\r
+const char Streams_LostSize[] = "\"lost size\":";\r
+const char Streams_EOS[] = "\"EOS\":";\r
+const char Streams_true[] = "true";\r
+const char Streams_false[] = "false";\r
+\r
+typedef struct {\r
+ char* id;\r
+ char* size;\r
+ char* data;\r
+} TCF_Streams_Command;\r
+\r
+#define TCF_TTY_SIZE 800\r
+\r
+static boolean tty_initialized = FALSE;\r
+static CirqBufferType cirqBuf;\r
+char tty_buffer[TCF_TTY_SIZE] = "";\r
+\r
+void init_streams()\r
+{\r
+ cirqBuf = CirqBuffStatCreate(tty_buffer, TCF_TTY_SIZE, sizeof(char));\r
+ tty_initialized = TRUE;\r
+}\r
+\r
+uint8_t TCF_TTY_SendChar (uint8_t ch)\r
+{\r
+ int rv = 1;\r
+ if(tty_initialized == TRUE){\r
+ rv = CirqBuffPush(&cirqBuf,&ch);\r
+ }\r
+\r
+ return rv;\r
+}\r
+uint32_t TCF_TTY_ReadString(char *str, uint16_t max_len)\r
+{\r
+ char ch;\r
+ int rv;\r
+ int len = 0;\r
+ if(tty_initialized == TRUE){\r
+ do{\r
+ rv = CirqBuffPop(&cirqBuf,&ch);\r
+ if(rv==0){\r
+ len++;\r
+ *str++=ch;\r
+ if(ch == '\0'){\r
+ rv = 1;\r
+ }\r
+ }\r
+ }while((rv == 0) && (len < max_len));\r
+ }\r
+\r
+ return len;\r
+}\r
+\r
+\r
+uint16_t handle_StreamsEvent(TCF_Event* event, char* buf){\r
+ return 0;\r
+}\r
+\r
+static Std_ReturnType parse_read(char* msg, TCF_Streams_Command* command, uint16_t len){\r
+ char* curr = msg;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->id = curr;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->size = curr;\r
+\r
+ return E_OK;\r
+}\r
+\r
+static Std_ReturnType parse_write(char* msg, TCF_Streams_Command* command, uint16_t len){\r
+ char* curr = msg;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->id = curr;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->size = curr;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->data = curr;\r
+\r
+ return E_OK;\r
+}\r
+\r
+static Std_ReturnType parse_id(char* msg, TCF_Streams_Command* command, uint16_t len){\r
+ char* curr = msg;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->id = curr;\r
+\r
+ return E_OK;\r
+}\r
+\r
+uint16_t handle_StreamsCommand(TCF_Command* command, char* buf) {\r
+ char tmp[200] = "";\r
+ TCF_Streams_Command streams_cmd;\r
+\r
+ /* Start building return message */\r
+ start_tcf_field(buf, (char *)TCF_S_R); /* Start */\r
+ append_tcf_field(buf, command->token); /* Token */\r
+\r
+ if (strcmp(command->commandName, Streams_Read) == 0) {\r
+ /* C \95 <token> \95 Streams \95 read \95 <string: stream ID> \95 <int: size> \95 */\r
+ /* R \95 <token> \95 <string: data> \95 <error report> \95 <int: lost size> \95 <boolean: EOS> */\r
+ if(parse_read(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+ return 0;\r
+ }\r
+\r
+ /* Add data field */\r
+ strcat(buf, JSON_Stringify);\r
+ int len = TCF_TTY_ReadString(tmp, 199);\r
+ tmp[len] = '\0'; /* Terminate to be sure */\r
+ strcat(buf, tmp);\r
+ strcat(buf, JSON_Stringify);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+ /* Add error field */\r
+ strcat(buf, JSON_null);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+ //strcat(buf, Streams_LostSize);\r
+ ultoa(0,tmp,10);\r
+ strcat(buf,tmp);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+ //strcat(buf, Streams_EOS);\r
+ strcat(buf, Streams_false);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+ } else if (strcmp(command->commandName, Streams_Write) == 0) {\r
+ /* C \95 <token> \95 Streams \95 write \95 <string: stream ID> \95 <int: size> \95 <string: data> \95 */\r
+ /* R \95 <token> \95 <error report> */\r
+ if(parse_write(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+ return 0;\r
+ }\r
+\r
+ /* Add error field */\r
+ strcat(buf, JSON_null);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+ } else if (strcmp(command->commandName, Streams_Subscribe) == 0) {\r
+ /* R \95 <token> \95 <error report> */\r
+ if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+ return 0;\r
+ }\r
+ /* Add error field */\r
+ strcat(buf, JSON_null);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+ }else if (strcmp(command->commandName, Streams_Unsubscribe) == 0) {\r
+ /* R \95 <token> \95 <error report> */\r
+ if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+ return 0;\r
+ }\r
+ /* Add error field */\r
+ strcat(buf, JSON_null);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+ }else if (strcmp(command->commandName, Streams_Connect) == 0) {\r
+ /* R \95 <token> \95 <error report> */\r
+ if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+ return 0;\r
+ }\r
+ /* Add error field */\r
+ strcat(buf, JSON_null);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+ }else if (strcmp(command->commandName, Streams_Disconnect) == 0) {\r
+ /* R \95 <token> \95 <error report> */\r
+ if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+ return 0;\r
+ }\r
+ /* Add error field */\r
+ strcat(buf, JSON_null);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+ }\r
+\r
+ convert_to_tcf_message(buf);\r
+ uint16_t len = message_length(buf, TCF_MAX_FIELD_LENGTH);\r
+\r
+ return len;\r
+}\r
--- /dev/null
+/*\r
+ * streams.h\r
+ *\r
+ * Created on: 15 sep 2010\r
+ * Author: jcar\r
+ */\r
+\r
+#ifndef STREAMS_H_\r
+#define STREAMS_H_\r
+\r
+#include "Std_Types.h"\r
+#include "tcf.h"\r
+\r
+uint8_t TCF_TTY_SendChar (uint8_t ch);\r
+void init_streams();\r
+\r
+uint16_t handle_StreamsCommand(TCF_Command* command, char* buf);\r
+uint16_t handle_StreamsEvent(TCF_Event* event, char* buf);\r
+\r
+#endif /* STREAMS_H_ */\r
--- /dev/null
+/*\r
+ * sys_monitor.c\r
+ *\r
+ * Created on: 15 sep 2010\r
+ * Author: jcar\r
+ */\r
+\r
+#include "Std_Types.h"\r
+#include "sys_monitor.h"\r
+#include "tcf.h"\r
+#include <string.h>\r
+#include "internal.h"\r
+#include "xtoa.h"\r
+\r
+const char SysMon_PID[] = "\"PID\":";\r
+const char SysMon_Prio[] = "\"Priority\":";\r
+const char SysMon_Stackstart[] = "\"StackStart\":";\r
+const char SysMon_Stackend[] = "\"StackEnd\":";\r
+const char SysMon_Stackcurr[] = "\"StackCurr\":";\r
+const char SysMon_State[] = "\"State\":";\r
+\r
+static void AddState(char *buf, state_t state)\r
+{\r
+ /* "RSDZTW" where\r
+ R is running,\r
+ S is sleeping in an interruptible wait,\r
+ D is waiting in uninterruptible disk sleep,\r
+ Z is zombie,\r
+ T is traced or stopped (on a signal), and\r
+ W is paging */\r
+ switch(state)\r
+ {\r
+ case ST_READY:\r
+ strcat(buf,"\"D\"");\r
+ break;\r
+ case ST_WAITING:\r
+ strcat(buf,"\"S\"");\r
+ break;\r
+ case ST_SUSPENDED:\r
+ strcat(buf,"\"T\"");\r
+ break;\r
+ case ST_RUNNING:\r
+ strcat(buf,"\"R\"");\r
+ break;\r
+ case ST_NOT_STARTED:\r
+ strcat(buf,"\"T\"");\r
+ break;\r
+ }\r
+}\r
+\r
+uint16_t handle_SysMonEvent(TCF_Event* event, char* buf){\r
+ return 0;\r
+}\r
+\r
+\r
+uint16_t handle_SysMonCommand(TCF_Command* command, char* buf) {\r
+ OsPcbType *iterPcbPtr;\r
+\r
+ /* Start building return message */\r
+ start_tcf_field(buf, (char *)TCF_S_R); /* Start */\r
+ append_tcf_field(buf, command->token); /* Token */\r
+\r
+ if (strcmp(command->commandName, TCF_getChildren) == 0) {\r
+ boolean first = TRUE;\r
+\r
+ /* Add error field */\r
+ strcat(buf, JSON_null);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+ /* Add data field */\r
+ strcat(buf, JSON_ListStart);\r
+ TAILQ_FOREACH(iterPcbPtr,& os_sys.pcb_head,pcb_list) {\r
+ if(iterPcbPtr->proc_type < 4)\r
+ {\r
+ if(first){\r
+ first = FALSE;\r
+ }else{\r
+ strcat(buf, JSON_Separator);\r
+ }\r
+ strcat(buf, JSON_Stringify);\r
+ strcat(buf, iterPcbPtr->name);\r
+ strcat(buf, JSON_Stringify);\r
+ }\r
+ }\r
+ strcat(buf, JSON_ListEnd);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+ } else if (strcmp(command->commandName, TCF_getContext) == 0) {\r
+ char tmp[20] = "";\r
+\r
+ /* Add error field */\r
+ strcat(buf, JSON_null);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+ /* Add data field */\r
+ char *arg = command->arguments + 1; /* add 1 for " */\r
+ TAILQ_FOREACH(iterPcbPtr,& os_sys.pcb_head,pcb_list) {\r
+ if(strncmp(arg, iterPcbPtr->name, strlen(command->arguments)-2) == 0)\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ strcat(buf, JSON_ObjStart);\r
+ strcat(buf, TCF_ID);\r
+ strcat(buf, command->arguments);\r
+\r
+ strcat(buf, JSON_Separator);\r
+ strcat(buf, TCF_File);\r
+ strcat(buf, command->arguments);\r
+\r
+ strcat(buf, JSON_Separator);\r
+ strcat(buf, SysMon_PID);\r
+ ultoa(iterPcbPtr->pid,tmp,10);\r
+ strcat(buf, tmp);\r
+\r
+ strcat(buf, JSON_Separator);\r
+ strcat(buf, SysMon_Prio);\r
+ ultoa(iterPcbPtr->prio,tmp,10);\r
+ strcat(buf, tmp);\r
+\r
+ strcat(buf, JSON_Separator);\r
+ strcat(buf, SysMon_Stackstart);\r
+ ultoa((uint32_t)iterPcbPtr->stack.top,tmp,10);\r
+ strcat(buf, tmp);\r
+\r
+/* strcat(buf, JSON_Separator);\r
+ strcat(buf, SysMon_Stackend);\r
+ ultoa((uint32_t)iterPcbPtr->stack.top + iterPcbPtr->stack.size,tmp,10);\r
+ strcat(buf, tmp);\r
+\r
+ strcat(buf, JSON_Separator);\r
+ strcat(buf, SysMon_Stackcurr);\r
+ ultoa((uint32_t)iterPcbPtr->stack.curr,tmp,10);\r
+ strcat(buf, tmp);\r
+*/\r
+ strcat(buf, JSON_Separator);\r
+ strcat(buf, SysMon_State);\r
+ AddState(buf,iterPcbPtr->state);\r
+\r
+ strcat(buf, JSON_ObjEnd);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+ }\r
+\r
+ convert_to_tcf_message(buf);\r
+ uint16_t len = message_length(buf, TCF_MAX_FIELD_LENGTH);\r
+\r
+ return len;\r
+}\r
--- /dev/null
+/*\r
+ * sys_monitor.h\r
+ *\r
+ * Created on: 15 sep 2010\r
+ * Author: jcar\r
+ */\r
+\r
+#ifndef SYSMONITOR_H_\r
+#define SYSMONITOR_H_\r
+\r
+#include "Std_Types.h"\r
+#include "tcf.h"\r
+\r
+uint16_t handle_SysMonCommand(TCF_Command* command, char* buf);\r
+uint16_t handle_SysMonEvent(TCF_Event* event, char* buf);\r
+\r
+#endif /* SYSMONITOR_H_ */\r
--- /dev/null
+/*\r
+ * tcf.c\r
+ *\r
+ * Created on: 15 sep 2010\r
+ * Author: jcar\r
+ */\r
+\r
+#define USE_LDEBUG_PRINTF\r
+#include "debug.h"\r
+\r
+#include "Std_Types.h"\r
+#include <string.h>\r
+#ifdef USE_LWIP\r
+#include "lwip/tcp.h"\r
+#include "lwip/udp.h"\r
+#include "tcp_handler.h"\r
+#endif\r
+#include "tcf.h"\r
+#include "Tcf_Cfg.h"\r
+#include "xtoa.h"\r
+#include "streams.h"\r
+\r
+\r
+#define TCF_TCP_PORT 1534\r
+\r
+const char TCF_getChildren[] = "getChildren";\r
+const char TCF_getContext[] = "getContext";\r
+const char TCF_ID[] = "\"ID\":";\r
+const char TCF_File[] = "\"File\":";\r
+const char TCF_Service[] = "\"Service\":";\r
+const char TCF_Code[] = "\"Code\":";\r
+\r
+\r
+const char JSON_ObjStart[] = "{";\r
+const char JSON_ObjEnd[] = "}";\r
+const char JSON_null[] = "null";\r
+const char JSON_Separator[] = ",";\r
+\r
+const char JSON_Stringify[] = "\"";\r
+const char JSON_ListStart[] = "[";\r
+const char JSON_ListEnd[] = "]";\r
+\r
+struct tcf_tcp_state\r
+{\r
+ int num;\r
+};\r
+\r
+uint16_t message_length(const char* msg, uint16_t max_length) {\r
+ uint16_t i;\r
+ for (i = 0; i < max_length; ++i) {\r
+ if (msg[i] == '\x01') {\r
+ return i+1;\r
+ }\r
+ }\r
+ return max_length;\r
+}\r
+\r
+void start_tcf_field(char* start, char* field) {\r
+ strcpy(start, field);\r
+ strcat(start, TCF_S_EOFIELD_MARKER);\r
+}\r
+\r
+void append_tcf_field(char* start, char* field) {\r
+ strcat(start, field);\r
+ strcat(start, TCF_S_EOFIELD_MARKER);\r
+}\r
+\r
+void convert_to_tcf_message(char* start) {\r
+ strcat(start, TCF_S_EOM);\r
+ size_t length = strlen(start);\r
+ int i;\r
+ for (i = 0; i < length; ++i) {\r
+ if (start[i] == TCF_C_EOFIELD_MARKER) {\r
+ start[i] = TCF_C_EOFIELD;\r
+ }\r
+ }\r
+}\r
+\r
+char* get_next_tcf_field(char* chars, uint16_t maxlen) {\r
+ int i;\r
+ for(i = 0; i < maxlen; i++) {\r
+ if (chars[i] == TCF_FIELD_DELIMITER) {\r
+ return &chars[i+1];\r
+ }\r
+ }\r
+ return (char*) NULL;\r
+}\r
+\r
+char* get_next_tcf_msg(char* chars, uint16_t *len) {\r
+ int i;\r
+ for(i = 0; i < *len-1; i++) {\r
+ if (chars[i] == '\x03' && chars[i+1] == '\x01') {\r
+ *len -= (i + 1);\r
+ return &chars[i+2];\r
+ }\r
+ }\r
+ *len= 0;\r
+ return (char*) NULL;\r
+}\r
+\r
+static Std_ReturnType parse_command(char* msg, TCF_Command* command, uint16_t len){\r
+ char* curr = msg;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->token = curr;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->serviceName = curr;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->commandName = curr;\r
+\r
+ curr = get_next_tcf_field(curr, len);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ command->arguments = curr;\r
+\r
+ command->args_len = len -((uint32_t)curr - (uint32_t)msg);\r
+ return E_OK;\r
+}\r
+\r
+Std_ReturnType parse_event(char* msg, TCF_Event* event){\r
+ char* curr = msg;\r
+\r
+ curr = get_next_tcf_field(curr, TCF_MAX_FIELD_LENGTH);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ event->serviceName = curr;\r
+\r
+ curr = get_next_tcf_field(curr, TCF_MAX_FIELD_LENGTH);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ event->eventName = curr;\r
+\r
+ curr = get_next_tcf_field(curr, TCF_MAX_FIELD_LENGTH);\r
+ if (curr == NULL) return E_NOT_OK;\r
+ event->eventData = curr;\r
+\r
+ return E_OK;\r
+}\r
+\r
+uint16_t handle_LocatorCommand(TCF_Command* command, char* buf) {\r
+ return 0;\r
+}\r
+\r
+uint16_t handle_LocatorEvent(TCF_Event* event, char* buf) {\r
+ uint16_t len = 0;\r
+ if(strcmp(event->eventName, "Hello") == 0)\r
+ {\r
+ len = message_length(locator_hello, TCF_MAX_FIELD_LENGTH);\r
+ memcpy(buf,locator_hello,len);\r
+ }else if(strcmp(event->eventName, "peerHeartBeat") == 0){\r
+\r
+ }\r
+\r
+ return len;\r
+}\r
+\r
+uint16_t handle_FileSystemCommand(TCF_Command* command, char* buf) {\r
+ char tmp[20] = "";\r
+\r
+ /* Start building return message */\r
+ start_tcf_field(buf, (char *)TCF_S_R); /* Start */\r
+ append_tcf_field(buf, command->token); /* Token */\r
+\r
+ /* Add error field */\r
+ strcat(buf, JSON_ObjStart);\r
+\r
+ strcat(buf, TCF_Code);\r
+ ultoa(TCF_UNSUPPORTED,tmp,10);\r
+ strcat(buf, tmp);\r
+\r
+ strcat(buf, JSON_ObjEnd);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+ /* Add data field */\r
+ strcat(buf, JSON_null);\r
+ strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+ convert_to_tcf_message(buf);\r
+ uint16_t len = message_length(buf, TCF_MAX_FIELD_LENGTH);\r
+\r
+ return len;\r
+}\r
+\r
+uint16_t handle_FileSystemEvent(TCF_Event* event, char* buf) {\r
+ return 0;\r
+}\r
+\r
+/* Not reentrant so buffers can be static */\r
+static char outbuf[TCF_MAX_FIELD_LENGTH] = "";\r
+\r
+static void handle_event(char *buf, uint16_t len)\r
+{\r
+ char *msg = (char *)buf;\r
+ uint8 index;\r
+ uint16_t outlen = 0;\r
+ TCF_Event event;\r
+\r
+ if (parse_event(msg, &event) == E_OK) {\r
+ /* Find and call the requested agent */\r
+ index = 0;\r
+ while(tcfServiceCfgList[index].eventHandler != NULL){\r
+ if(strcmp(event.serviceName, tcfServiceCfgList[index].name) == 0){\r
+ outlen = tcfServiceCfgList[index].eventHandler(&event, outbuf);\r
+ break;\r
+ }\r
+ index++;\r
+ }\r
+ }\r
+\r
+ if(outlen > 0){\r
+#ifdef USE_LWIP\r
+ TcpSendData(outbuf, outlen);\r
+#endif\r
+ }\r
+}\r
+\r
+static void handle_command(char *buf, uint16_t len)\r
+{\r
+ char *msg = (char *)buf;\r
+ uint8 index;\r
+ uint16_t outlen = 0;\r
+ TCF_Command command;\r
+\r
+ if (parse_command(msg, &command, len) == E_OK) {\r
+ //LDEBUG_PRINTF("C %s\n\r", command.token);\r
+ /* Find and call the requested agent */\r
+ index = 0;\r
+ while(tcfServiceCfgList[index].commandHandler != NULL){\r
+ if(strcmp(command.serviceName, tcfServiceCfgList[index].name) == 0){\r
+ outlen = tcfServiceCfgList[index].commandHandler(&command, outbuf);\r
+ break;\r
+ }\r
+ index++;\r
+ }\r
+\r
+ if(outlen > 0){\r
+#ifdef USE_LWIP\r
+ //LDEBUG_PRINTF("R %s\n\r", command.token);\r
+ TcpSendData(outbuf, outlen);\r
+#endif\r
+ }else{\r
+ LDEBUG_PRINTF("TCF: len=0:%s\n\r", command.token);\r
+ }\r
+ }else{\r
+ LDEBUG_PRINTF("TCF: Parse failed:%s\n\r", command.token);\r
+ }\r
+}\r
+\r
+static void handle_incoming(const void* buf, uint16_t len) {\r
+ char *msg = (char *)buf;\r
+\r
+ if(len > 0){\r
+ do{\r
+ char c = msg[0];\r
+ if (c == 'C') {\r
+ handle_command(msg, len);\r
+ } else if (c == 'E') {\r
+ handle_event(msg, len);\r
+ }\r
+\r
+ /* Check if more than one message in buffer */\r
+ msg = get_next_tcf_msg(msg, &len);\r
+ }while((msg != NULL) && (len > 0));\r
+ }\r
+}\r
+\r
+void InitTcf(void){\r
+#ifdef USE_LWIP\r
+ CreateTcpSocket(TCF_TCP_PORT, handle_incoming);\r
+#endif\r
+ init_streams();\r
+}\r
--- /dev/null
+/*\r
+ * tcf.h\r
+ *\r
+ * Created on: 15 sep 2010\r
+ * Author: jcar\r
+ */\r
+\r
+#ifndef TCF_H_\r
+#define TCF_H_\r
+\r
+#include "Std_Types.h"\r
+\r
+#define TCF_C_EOFIELD '\x00'\r
+#define TCF_C_EOFIELD_MARKER '\x04'\r
+\r
+#define TCF_S_EOFIELD "\x00"\r
+#define TCF_S_EOFIELD_MARKER "\x04"\r
+#define TCF_S_R "R"\r
+#define TCF_S_EOM "\x03\x01"\r
+\r
+#define TCF_FIELD_DELIMITER ('\x00')\r
+#define TCF_MAX_FIELD_LENGTH (1400)\r
+\r
+extern const char TCF_getChildren[];\r
+extern const char TCF_getContext[];\r
+extern const char TCF_ID[];\r
+extern const char TCF_File[];\r
+extern const char TCF_Service[];\r
+extern const char TCF_Code[];\r
+\r
+extern const char JSON_ObjStart[];\r
+extern const char JSON_ObjEnd[];\r
+extern const char JSON_null[];\r
+extern const char JSON_Separator[];\r
+\r
+extern const char JSON_Stringify[];\r
+extern const char JSON_ListStart[];\r
+extern const char JSON_ListEnd[];\r
+\r
+/* Standard error codes: */\r
+\r
+typedef enum{\r
+ TCF_OTHER = 1,\r
+ TCF_JSON_SYNTAX = 2,\r
+ TCF_PROTOCOL = 3,\r
+ TCF_BUFFER_OVERFLOW = 4,\r
+ TCF_CHANNEL_CLOSED = 5,\r
+ TCF_COMMAND_CANCELLED = 6,\r
+ TCF_UNKNOWN_PEER = 7,\r
+ TCF_BASE64 = 8,\r
+ TCF_EOF = 9,\r
+ TCF_ALREADY_STOPPED = 10,\r
+ TCF_ALREADY_EXITED = 11,\r
+ TCF_ALREADY_RUNNING = 12,\r
+ TCF_ALREADY_ATTACHED = 13,\r
+ TCF_IS_RUNNING = 14,\r
+ TCF_INV_DATA_SIZE = 15,\r
+ TCF_INV_CONTEXT = 16,\r
+ TCF_INV_ADDRESS = 17,\r
+ TCF_INV_EXPRESSION = 18,\r
+ TCF_INV_FORMAT = 19,\r
+ TCF_INV_NUMBER = 20,\r
+ TCF_INV_DWARF = 21,\r
+ TCF_SYM_NOT_FOUND = 22,\r
+ TCF_UNSUPPORTED = 23,\r
+ TCF_INV_DATA_TYPE = 24,\r
+ TCF_INV_COMMAND = 25,\r
+} TCF_ErrorCode_t;\r
+\r
+\r
+typedef struct {\r
+ char* serviceName;\r
+ char* eventName;\r
+ char* eventData;\r
+} TCF_Event;\r
+\r
+typedef struct {\r
+ char* token;\r
+ char* serviceName;\r
+ char* commandName;\r
+ char* arguments;\r
+ uint16_t args_len;\r
+} TCF_Command;\r
+\r
+typedef struct {\r
+ char* token;\r
+ char* error;\r
+ char* data;\r
+} TCF_Result;\r
+\r
+typedef uint16_t (*TCF_Service_CommandHandler)(TCF_Command* command, char* buf);\r
+typedef uint16_t (*TCF_Service_EventHandler)(TCF_Event* command, char* buf);\r
+\r
+void InitTcf(void);\r
+uint16_t message_length(const char* msg, uint16_t max_length);\r
+char* get_next_tcf_field(char* chars, uint16_t maxlen);\r
+void start_tcf_field(char* start, char* field);\r
+void append_tcf_field(char* start, char* field);\r
+void convert_to_tcf_message(char* start);\r
+void tcf_compile_result(TCF_Result* result, char* buffer);\r
+\r
+/* Locator and Filesystem handlers are in tcf.c file. To be moved */\r
+uint16_t handle_LocatorCommand(TCF_Command* command, char* buf);\r
+uint16_t handle_LocatorEvent(TCF_Event* event, char* buf);\r
+uint16_t handle_FileSystemCommand(TCF_Command* command, char* buf);\r
+uint16_t handle_FileSystemEvent(TCF_Event* event, char* buf);\r
+\r
+#endif /* TCF_H_ */\r
Det_ReportError(MODULE_ID_CANIF, 0, _api, _err); \\r
return; \\r
}\r
-#undef DET_REPORTERROR\r
#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x, _y, _z, _q)\r
\r
#else\r
#define VALIDATE(_exp,_api,_err )\r
#define VALIDATE_NO_RV(_exp,_api,_err )\r
-#undef DET_REPORTERROR\r
#define DET_REPORTERROR(_x,_y,_z,_q)\r
#endif\r
\r
#include "CanIf.h" /**< @req CANSM017 */\r
#include "CanSM_Internal.h"\r
\r
+static CanSM_Internal_NetworkType CanSM_InternalNetworks[CANSM_NETWORK_COUNT];\r
+\r
static CanSM_InternalType CanSM_Internal = {\r
.InitStatus = CANSM_STATUS_UNINIT,\r
+ .Networks = CanSM_InternalNetworks,\r
};\r
\r
static const CanSM_ConfigType* CanSM_Config;\r
/*\r
* General requirements\r
*/\r
+\r
+/** @req CANTP001 */\r
+/** @req CANTP019 */\r
+/** @req CANTP020 */\r
/** @req CANTP156.Partially */\r
/** @req CANTP150 */\r
/** @req CANTP151 */\r
/** @req CANTP158 */\r
/** @req CANTP003 */\r
/** @req CANTP216 */\r
+/** @req CANTP217 */\r
+\r
+/*\r
+ * Environmental requirements
+ */\r
+/** @req CANTP164 */\r
+/** @req CANTP199 */\r
+\r
\r
#include "CanTp.h" /** @req CANTP219 */\r
#include "CanTp_Cbk.h" /** @req CANTP233 */\r
Det_ReportError(MODULE_ID_CANTP, 0, _api, _err); \\r
return; \\r
}\r
-#undef DET_REPORTERROR\r
#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x, _y, _z, _q)\r
\r
#else\r
#define VALIDATE(_exp,_api,_err )\r
#define VALIDATE_NO_RV(_exp,_api,_err )\r
-#undef DET_REPORTERROR\r
#define DET_REPORTERROR(_x,_y,_z,_q)\r
#endif\r
\r
// - - - - - - - - - - - - - -\r
\r
\r
-void CanTp_Init() /** @req CANTP208 */\r
+void CanTp_Init()\r
{\r
CanTp_ChannelPrivateType *runtimeData;\r
const CanTp_TxNSduType *txConfigParams;\r
#include <string.h>\r
#include "Com.h"\r
#include "Com_Arc_Types.h"\r
+#include "Com_Internal.h"\r
#include "Com_misc.h"\r
#include "debug.h"\r
\r
-#ifdef COM_DEV_ERROR_DETECT\r
-#include "Det.h"\r
-#endif\r
-\r
const Com_ConfigType * ComConfig;\r
\r
Com_Arc_IPdu_type Com_Arc_IPdu[COM_N_IPDUS];\r
for (int i = 0; !ComConfig->ComIPdu[i].Com_Arc_EOL; i++) {\r
Com_Arc_Config.ComNIPdu++;\r
\r
- ComGetIPdu(i);\r
- ComGetArcIPdu(i);\r
+ GET_IPdu(i);\r
+ GET_ArcIPdu(i);\r
\r
if (i >= COM_N_IPDUS) {\r
DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, 0x01, COM_E_TOO_MANY_IPDU);\r
//Arc_IPdu->NComIPduSignalRef = 0;\r
for (int j = 0; IPdu->ComIPduSignalRef != NULL && IPdu->ComIPduSignalRef[j] != NULL; j++) {\r
Signal = IPdu->ComIPduSignalRef[j];\r
- ComGetArcSignal(Signal->ComHandleId);\r
+ GET_ArcSignal(Signal->ComHandleId);\r
\r
// If this signal already has been configured this is most likely an error.\r
if (Arc_Signal->ComIPduDataPtr != NULL) {\r
\r
// Clear update bits\r
if (Signal->ComSignalArcUseUpdateBit) {\r
- clearBit(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
+ CLEARBIT(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
}\r
\r
// If this signal is a signal group\r
// For each group signal of this signal group.\r
for(int h = 0; Signal->ComGroupSignal[h] != NULL; h++) {\r
GroupSignal = Signal->ComGroupSignal[h];\r
- ComGetArcGroupSignal(GroupSignal->ComHandleId);\r
+ GET_ArcGroupSignal(GroupSignal->ComHandleId);\r
// Set pointer to shadow buffer\r
Arc_GroupSignal->Com_Arc_ShadowBuffer = Arc_Signal->Com_Arc_ShadowBuffer;\r
// Initialize group signal data.\r
// Configure per I-PDU based deadline monitoring.\r
for (int j = 0; IPdu->ComIPduSignalRef != NULL && IPdu->ComIPduSignalRef[j] != NULL; j++) {\r
Signal = IPdu->ComIPduSignalRef[j];\r
- ComGetArcSignal(Signal->ComHandleId);\r
+ GET_ArcSignal(Signal->ComHandleId);\r
\r
if (Signal->ComTimeoutFactor > 0 && !Signal->ComSignalArcUseUpdateBit) {\r
Arc_Signal->ComTimeoutFactor = earliestDeadline;\r
#include <string.h>\r
#include "Com_Arc_Types.h"\r
#include "Com.h"\r
+#include "Com_Internal.h"\r
#include "Com_misc.h"\r
#include "debug.h"\r
#include "PduR.h"\r
extern Com_Arc_Config_type Com_Arc_Config;\r
\r
uint8 Com_SendSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {\r
- COM_VALIDATE_SIGNAL(SignalId, 0x0a, E_NOT_OK);\r
+ VALIDATE_SIGNAL(SignalId, 0x0a, E_NOT_OK);\r
// Store pointer to signal for easier coding.\r
- ComGetSignal(SignalId);\r
- ComGetArcSignal(SignalId);\r
- ComGetIPdu(Arc_Signal->ComIPduHandleId);\r
- ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+ GET_Signal(SignalId);\r
+ GET_ArcSignal(SignalId);\r
+ GET_IPdu(Arc_Signal->ComIPduHandleId);\r
+ GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
\r
//DEBUG(DEBUG_LOW, "Com_SendSignal: id %d, nBytes %d, BitPosition %d, intVal %d\n", SignalId, nBytes, signal->ComBitPosition, (uint32)*(uint8 *)SignalDataPtr);\r
\r
\r
// If the signal has an update bit. Set it!\r
if (Signal->ComSignalArcUseUpdateBit) {\r
- setBit(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
+ SETBIT(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
}\r
\r
/*\r
}\r
\r
uint8 Com_ReceiveSignal(Com_SignalIdType SignalId, void* SignalDataPtr) {\r
- COM_VALIDATE_SIGNAL(SignalId, 0x0b, E_NOT_OK);\r
+ VALIDATE_SIGNAL(SignalId, 0x0b, E_NOT_OK);\r
DEBUG(DEBUG_LOW, "Com_ReceiveSignal: SignalId %d\n", SignalId);\r
\r
// Com_CopyFromSignal(&ComConfig->ComSignal[SignalId], SignalDataPtr);\r
}\r
\r
Std_ReturnType Com_TriggerTransmit(PduIdType ComTxPduId, uint8 *SduPtr) {\r
- PduIdCheck(ComTxPduId, 0x13, E_NOT_OK);\r
+ PDU_ID_CHECK(ComTxPduId, 0x13, E_NOT_OK);\r
/*\r
* COM260: This function must not check the transmission mode of the I-PDU\r
* since it should be possible to use it regardless of the transmission mode.\r
/*\r
* COM395: This function must override the IPdu callouts used in Com_TriggerIPduTransmit();\r
*/\r
- ComGetIPdu(ComTxPduId);\r
- ComGetArcIPdu(ComTxPduId);\r
+ GET_IPdu(ComTxPduId);\r
+ GET_ArcIPdu(ComTxPduId);\r
\r
memcpy(SduPtr, Arc_IPdu->ComIPduDataPtr, IPdu->ComIPduSize);\r
return E_OK;\r
\r
\r
void Com_TriggerIPduSend(PduIdType ComTxPduId) {\r
- PduIdCheck(ComTxPduId, 0x17);\r
+ PDU_ID_CHECK(ComTxPduId, 0x17);\r
\r
//DEBUG(DEBUG_MEDIUM, "Com_TriggerIPduSend sending IPdu %d... ", ComTxPduId);\r
- ComGetIPdu(ComTxPduId);\r
- ComGetArcIPdu(ComTxPduId);\r
+ GET_IPdu(ComTxPduId);\r
+ GET_ArcIPdu(ComTxPduId);\r
\r
// Is the IPdu ready for transmission?\r
if (Arc_IPdu->Com_Arc_TxIPduTimers.ComTxIPduMinimumDelayTimer == 0) {\r
for (int i = 0; IPdu->ComIPduSignalRef != NULL && IPdu->ComIPduSignalRef[i] != NULL; i++) {\r
//for (int i = 0; i < Arc_IPdu->NComIPduSignalRef; i++) {\r
if (IPdu->ComIPduSignalRef[i]->ComSignalArcUseUpdateBit) {\r
- clearBit(Arc_IPdu->ComIPduDataPtr, IPdu->ComIPduSignalRef[i]->ComUpdateBitPosition);\r
+ CLEARBIT(Arc_IPdu->ComIPduDataPtr, IPdu->ComIPduSignalRef[i]->ComUpdateBitPosition);\r
}\r
}\r
}\r
}\r
\r
Std_ReturnType Com_RxIndication(PduIdType ComRxPduId, const uint8* SduPtr) {\r
- PduIdCheck(ComRxPduId, 0x14, E_NOT_OK);\r
+ PDU_ID_CHECK(ComRxPduId, 0x14, E_NOT_OK);\r
\r
- ComGetIPdu(ComRxPduId);\r
- ComGetArcIPdu(ComRxPduId);\r
+ GET_IPdu(ComRxPduId);\r
+ GET_ArcIPdu(ComRxPduId);\r
\r
// If Ipdu is stopped\r
if (!Arc_IPdu->Com_Arc_IpduStarted) {\r
const ComSignal_type *signal;\r
for (int i = 0; IPdu->ComIPduSignalRef[i] != NULL; i++) {\r
signal = IPdu->ComIPduSignalRef[i];\r
- ComGetArcSignal(signal->ComHandleId);\r
+ GET_ArcSignal(signal->ComHandleId);\r
\r
// If this signal uses an update bit, then it is only considered if this bit is set.\r
if (!signal->ComSignalArcUseUpdateBit ||\r
- (signal->ComSignalArcUseUpdateBit && testBit(Arc_IPdu->ComIPduDataPtr, signal->ComUpdateBitPosition))) {\r
+ (signal->ComSignalArcUseUpdateBit && TESTBIT(Arc_IPdu->ComIPduDataPtr, signal->ComUpdateBitPosition))) {\r
\r
if (signal->ComTimeoutFactor > 0) { // If reception deadline monitoring is used.\r
// Reset the deadline monitoring timer.\r
}\r
\r
void Com_TxConfirmation(PduIdType ComTxPduId) {\r
- PduIdCheck(ComTxPduId, 0x15);\r
+ PDU_ID_CHECK(ComTxPduId, 0x15);\r
}\r
\r
\r
Std_ReturnType Com_SendSignalGroup(Com_SignalGroupIdType SignalGroupId) {\r
//#warning Com_SendSignalGroup should be performed atomically. Should we disable interrupts here?\r
- ComGetSignal(SignalGroupId);\r
- ComGetArcSignal(SignalGroupId);\r
- ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
- ComGetIPdu(Arc_Signal->ComIPduHandleId);\r
+ GET_Signal(SignalGroupId);\r
+ GET_ArcSignal(SignalGroupId);\r
+ GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
+ GET_IPdu(Arc_Signal->ComIPduHandleId);\r
\r
\r
// Copy shadow buffer to Ipdu data space\r
\r
// If the signal has an update bit. Set it!\r
if (Signal->ComSignalArcUseUpdateBit) {\r
- setBit(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
+ SETBIT(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
}\r
\r
/*\r
\r
Std_ReturnType Com_ReceiveSignalGroup(Com_SignalGroupIdType SignalGroupId) {\r
//#warning Com_ReceiveSignalGroup should be performed atomically. Should we disable interrupts here?\r
- ComGetSignal(SignalGroupId);\r
- ComGetArcSignal(SignalGroupId);\r
+ GET_Signal(SignalGroupId);\r
+ GET_ArcSignal(SignalGroupId);\r
\r
// Copy Ipdu data buffer to shadow buffer.\r
const ComGroupSignal_type *groupSignal;\r
}\r
\r
void Com_UpdateShadowSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {\r
- ComGetArcGroupSignal(SignalId);\r
+ GET_ArcGroupSignal(SignalId);\r
// TODO: CopyData\r
// Com_CopyData(Arc_GroupSignal->Com_Arc_ShadowBuffer, SignalDataPtr, GroupSignal->ComBitSize, GroupSignal->ComBitPosition, 0);\r
Com_WriteSignalDataToPduBuffer(SignalId, TRUE, SignalDataPtr, (void *)Arc_GroupSignal->Com_Arc_ShadowBuffer);\r
}\r
\r
void Com_ReceiveShadowSignal(Com_SignalIdType SignalId, void *SignalDataPtr) {\r
- ComGetArcGroupSignal(SignalId);\r
+ GET_ArcGroupSignal(SignalId);\r
// TODO: CopyData\r
// Com_CopyData(SignalDataPtr, Arc_GroupSignal->Com_Arc_ShadowBuffer, GroupSignal->ComBitSize, 0, GroupSignal->ComBitPosition);\r
Com_ReadSignalDataFromPduBuffer(SignalId, TRUE, SignalDataPtr, (void *)Arc_GroupSignal->Com_Arc_ShadowBuffer);\r
--- /dev/null
+/* -------------------------------- Arctic Core ------------------------------\r
+ * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
+ *\r
+ * Copyright (C) 2009 ArcCore AB <contact@arccore.com>\r
+ *\r
+ * This source code is free software; you can redistribute it and/or modify it\r
+ * under the terms of the GNU General Public License version 2 as published by the\r
+ * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\r
+ * for more details.\r
+ * -------------------------------- Arctic Core ------------------------------*/\r
+\r
+/*\r
+ * NB! This file is for COM internal use only and may only be included from COM C-files!\r
+ */\r
+\r
+\r
+\r
+#ifndef COM_INTERNAL_H_\r
+#define COM_INTERNAL_H_\r
+\r
+\r
+extern const Com_ConfigType * ComConfig;\r
+\r
+\r
+\r
+#ifdef COM_DEV_ERROR_DETECT\r
+#include "Det.h"\r
+\r
+#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x,_y,_z,_q)\r
+\r
+\r
+// Define macro for parameter check.\r
+#define PDU_ID_CHECK(PduId,ApiId,...) \\r
+ if (PduId >= Com_Arc_Config.ComNIPdu) { \\r
+ DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, ApiId, COM_INVALID_PDU_ID); \\r
+ return __VA_ARGS__; \\r
+ } \\r
+\r
+#define VALIDATE_SIGNAL(SignalId, ApiId, ...) \\r
+ if (ComConfig->ComSignal[SignalId].Com_Arc_IsSignalGroup) { \\r
+ DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, ApiId, COM_ERROR_SIGNAL_IS_SIGNALGROUP); \\r
+ return __VA_ARGS__; \\r
+ } \\r
+\r
+\r
+#else\r
+\r
+#define DET_REPORTERROR(_x,_y,_z,_q)\r
+\r
+#define PDU_ID_CHECK(PduId,ApiId,...)\r
+#define VALIDATE_SIGNAL(PduId, ApiId, ...)\r
+#endif\r
+\r
+\r
+#define TESTBIT(source,bit) (*((uint8 *)source + (bit / 8)) & (1 << (bit % 8)))\r
+#define SETBIT(dest,bit) *((uint8 *)dest + (bit / 8)) |= (1 << (bit % 8))\r
+#define CLEARBIT(dest,bit) *((uint8 *)dest + (bit / 8)) &= ~(1 << (bit % 8))\r
+\r
+#define GET_Signal(SignalId) \\r
+ const ComSignal_type * Signal = &ComConfig->ComSignal[SignalId]\\r
+\r
+#define GET_ArcSignal(SignalId) \\r
+ Com_Arc_Signal_type * Arc_Signal = &Com_Arc_Config.ComSignal[SignalId]\\r
+\r
+#define GET_IPdu(IPduId) \\r
+ const ComIPdu_type *IPdu = &ComConfig->ComIPdu[IPduId]\\r
+\r
+#define GET_ArcIPdu(IPduId) \\r
+ Com_Arc_IPdu_type *Arc_IPdu = &Com_Arc_Config.ComIPdu[IPduId]\\r
+\r
+#define GET_GroupSignal(GroupSignalId) \\r
+ const ComGroupSignal_type *GroupSignal = &ComConfig->ComGroupSignal[GroupSignalId]\\r
+\r
+#define GET_ArcGroupSignal(GroupSignalId) \\r
+ Com_Arc_GroupSignal_type *Arc_GroupSignal = &Com_Arc_Config.ComGroupSignal[GroupSignalId]\\r
+\r
+\r
+\r
+#endif /* COM_INTERNAL_H_ */\r
\r
#include "Com_Arc_Types.h"\r
#include "Com.h"\r
+#include "Com_Internal.h"\r
#include "Com_misc.h"\r
#include <string.h>\r
#include "debug.h"\r
const ComSignal_type *signal;\r
for (int i = 0; !ComConfig->ComSignal[i].Com_Arc_EOL; i++) {\r
signal = &ComConfig->ComSignal[i];\r
- ComGetArcSignal(signal->ComHandleId);\r
- ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+ GET_ArcSignal(signal->ComHandleId);\r
+ GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
\r
// Monitor signal reception deadline\r
if (Arc_IPdu->Com_Arc_IpduStarted && Arc_Signal->ComTimeoutFactor > 0) {\r
const ComIPdu_type *IPdu;\r
for (int i = 0; !ComConfig->ComIPdu[i].Com_Arc_EOL; i++) {\r
IPdu = &ComConfig->ComIPdu[i];\r
- ComGetArcIPdu(i);\r
+ GET_ArcIPdu(i);\r
\r
// Is this a IPdu that should be transmitted?\r
if (IPdu->ComIPduDirection == SEND && Arc_IPdu->Com_Arc_IpduStarted) {\r
\r
#include "Com_Arc_Types.h"\r
#include "Com.h"\r
+#include "Com_Internal.h"\r
#include "Com_misc.h"\r
\r
extern Com_Arc_Config_type Com_Arc_Config;\r
void *signalData) {\r
\r
// Get PDU\r
- ComGetSignal(signalId);\r
- ComGetArcSignal(Signal->ComHandleId);\r
- ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+ GET_Signal(signalId);\r
+ GET_ArcSignal(Signal->ComHandleId);\r
+ GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
\r
// Get data\r
Com_ReadSignalDataFromPduBuffer(\r
void *signalData) {\r
\r
// Get PDU\r
- ComGetSignal(parentSignalId);\r
- ComGetArcSignal(Signal->ComHandleId);\r
- ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+ GET_Signal(parentSignalId);\r
+ GET_ArcSignal(Signal->ComHandleId);\r
+ GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
\r
// Get data\r
Com_ReadSignalDataFromPduBuffer(\r
uint8 bitSize;\r
\r
if (!isGroupSignal) {\r
- ComGetSignal(signalId);\r
+ GET_Signal(signalId);\r
signalType = Signal->ComSignalType;\r
signalEndianess = Signal->ComSignalEndianess;\r
signalLength = Signal->ComBitSize / 8;\r
bitPosition = Signal->ComBitPosition;\r
bitSize = Signal->ComBitSize;\r
} else {\r
- ComGetGroupSignal(signalId);\r
+ GET_GroupSignal(signalId);\r
signalType = GroupSignal->ComSignalType;\r
signalEndianess = GroupSignal->ComSignalEndianess;\r
signalLength = GroupSignal->ComBitSize / 8;\r
const void *signalData) {\r
\r
// Get PDU\r
- ComGetSignal(signalId);\r
- ComGetArcSignal(Signal->ComHandleId);\r
- ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+ GET_Signal(signalId);\r
+ GET_ArcSignal(Signal->ComHandleId);\r
+ GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
\r
// Get data\r
Com_WriteSignalDataToPduBuffer(\r
const void *signalData) {\r
\r
// Get PDU\r
- ComGetSignal(parentSignalId);\r
- ComGetArcSignal(Signal->ComHandleId);\r
- ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+ GET_Signal(parentSignalId);\r
+ GET_ArcSignal(Signal->ComHandleId);\r
+ GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
\r
// Get data\r
Com_WriteSignalDataToPduBuffer(\r
uint8 bitSize;\r
\r
if (!isGroupSignal) {\r
- ComGetSignal(signalId);\r
+ GET_Signal(signalId);\r
signalType = Signal->ComSignalType;\r
signalLength = Signal->ComBitSize / 8;\r
bitPosition = Signal->ComBitPosition;\r
bitSize = Signal->ComBitSize;\r
} else {\r
- ComGetGroupSignal(signalId);\r
+ GET_GroupSignal(signalId);\r
signalType = GroupSignal->ComSignalType;\r
signalLength = GroupSignal->ComBitSize / 8;\r
bitPosition = GroupSignal->ComBitPosition;\r
\r
#if (COM_ARC_FILTER_ENABLED == STD_ON)\r
uint8 Com_Filter(ComSignal_type *signal) {\r
- ComGetArcSignal(signal->ComHandleId);\r
+ GET_ArcSignal(signal->ComHandleId);\r
const ComFilter_type * filter = &signal->ComFilter;\r
uint8 success = 0;\r
if (filter->ComFilterAlgorithm == ALWAYS) {\r
/** Set user data for NM messages transmitted next on the bus.\r
* For that purpose <BusNm>_SetUserData shall be called\r
* (e.g. CanNm_SetUserData function is called if channel is configured as CAN). */\r
+#if (NM_USER_DATA_ENABLED == STD_ON)\r
Nm_ReturnType Nm_SetUserData( const NetworkHandleType NetworkHandle, const uint8 * const nmUserDataPtr ){\r
const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
NM_CALL_BUSNM(SetUserData, ChannelConf, nmUserDataPtr)\r
}\r
+#endif\r
\r
/** Get user data out of the last successfully received NM message.\r
* For that purpose <BusNm>_GetUserData shall be called\r
* (e.g. CanNm_GetUserData function is called if channel is configured as CAN). */\r
+#if (NM_USER_DATA_ENABLED == STD_ON)\r
Nm_ReturnType Nm_GetUserData( const NetworkHandleType NetworkHandle, uint8 * const nmUserDataPtr, uint8 * const nmNodeIdPtr ){\r
/* For some reason the signature of this service differs from its busNm equivalents... */\r
const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
default: return NM_E_NOT_OK;\r
}\r
}\r
+#endif\r
\r
/** Get the whole PDU data out of the most recently received NM message.\r
* For that purpose CanNm_GetPduData shall be called. */\r
+#if ((NM_NODE_ID_ENABLED == STD_ON) || (NM_NODE_DETECTION_ENABLED == STD_ON) || (NM_USER_DATA_ENABLED == STD_ON))\r
Nm_ReturnType Nm_GetPduData( const NetworkHandleType NetworkHandle, uint8 * const nmPduData ){\r
const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
NM_CALL_BUSNM(GetPduData, ChannelConf, nmPduData)\r
}\r
+#endif\r
\r
/** Set Repeat Message Request Bit for NM messages transmitted next on the bus.\r
* For that purpose <BusNm>_RepeatMessageRequest shall be called\r
\r
/** Get node identifier out of the last successfully received NM-message.\r
* The function <BusNm>_GetNodeIdentifier shall be called. */\r
+#if (NM_NODE_ID_ENABLED == STD_ON)\r
Nm_ReturnType Nm_GetNodeIdentifier( const NetworkHandleType NetworkHandle, uint8 * const nmNodeIdPtr ){\r
const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
NM_CALL_BUSNM(GetNodeIdentifier, ChannelConf, nmNodeIdPtr)\r
const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
NM_CALL_BUSNM(GetLocalNodeIdentifier, ChannelConf, nmNodeIdPtr)\r
}\r
+#endif\r
\r
/** Check if remote sleep indication takes place or not. This in turn calls the\r
* <BusNm>_CheckRemoteSleepIndication for the bus specific NM layer\r
// Otherwise raise an error.\r
if (PduRState != PDUR_UNINIT) {\r
// Raise error and return.\r
- DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, 0x00, PDUR_E_INVALID_REQUEST);\r
+ PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, 0x00, PDUR_E_INVALID_REQUEST);\r
return;\r
}\r
\r
if (ConfigPtr == NULL) {\r
- DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, 0x00, PDUR_E_CONFIG_PTR_INVALID);\r
+ PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, 0x00, PDUR_E_CONFIG_PTR_INVALID);\r
return;\r
} else {\r
PduRConfig = ConfigPtr;\r
#endif\r
\r
uint32 PduR_GetConfigurationId () {\r
- //DevCheck(0,1,0x18,E_NOT_OK);\r
+ //PduR_DevCheck(0,1,0x18,E_NOT_OK);\r
return PduRConfig->PduRConfigurationId;\r
}\r
#endif // End of not Zero Cost Operation Mode\r
\r
void PduR_CanIfRxIndication(PduIdType CanRxPduId,const uint8* CanSduPtr) {\r
#if (PDUR_CANIF_SUPPORT == STD_ON)\r
- DevCheck(CanRxPduId,CanSduPtr,0x0e);\r
+ PduR_DevCheck(CanRxPduId,CanSduPtr,0x0e);\r
\r
DEBUG(DEBUG_LOW,"----------------------\n");\r
DEBUG(DEBUG_LOW,"PduR_CanIfRxIndication: received indication with id %d and data %d\n", CanRxPduId, *CanSduPtr);\r
\r
void PduR_CanIfTxConfirmation(PduIdType CanTxPduId) {\r
#if (PDUR_CANIF_SUPPORT == STD_ON)\r
- DevCheck(CanTxPduId,1,0x0f);\r
+ PduR_DevCheck(CanTxPduId,1,0x0f);\r
\r
DEBUG(DEBUG_LOW,"----------------------\n");\r
DEBUG(DEBUG_LOW,"PduR_CanIfTxConfirmation: received confirmation with id %d\n", CanTxPduId);\r
\r
void PduR_CanTpTxConfirmation(PduIdType CanTpTxPduId, NotifResultType Result) {\r
#if (PDUR_CANTP_SUPPORT == STD_ON)\r
- DevCheck(CanTpTxPduId,1,0x0f);\r
+ PduR_DevCheck(CanTpTxPduId,1,0x0f);\r
\r
DEBUG(DEBUG_LOW,"----------------------\n");\r
DEBUG(DEBUG_LOW,"PduR_CanIfTxConfirmation: received confirmation with id %d\n", CanTxPduId);\r
Std_ReturnType PduR_ComTransmit(PduIdType ComTxPduId, const PduInfoType* PduInfoPtr) {\r
BufReq_ReturnType retVal = BUFREQ_NOT_OK;\r
#if (PDUR_COM_SUPPORT == STD_ON)\r
- DevCheck(ComTxPduId,PduInfoPtr,0x15, E_NOT_OK);\r
+ PduR_DevCheck(ComTxPduId,PduInfoPtr,0x15, E_NOT_OK);\r
\r
//DEBUG(DEBUG_LOW,"PduR_ComTransmit: received transmit request with id %d and data %d\n", ComTxPduId, *PduInfoPtr->SduDataPtr);\r
PduRRoutingPath_type *route = &PduRConfig->PduRRoutingTable->PduRRoutingPath[ComTxPduId];\r
Std_ReturnType PduR_DcmTransmit(PduIdType DcmTxPduId, const PduInfoType* PduInfoPtr) {\r
BufReq_ReturnType retVal = BUFREQ_NOT_OK;\r
#if (PDUR_DCM_SUPPORT == STD_ON)\r
- DevCheck(DcmTxPduId,PduInfoPtr,0x15, E_NOT_OK);\r
+ PduR_DevCheck(DcmTxPduId,PduInfoPtr,0x15, E_NOT_OK);\r
\r
//DEBUG(DEBUG_LOW,"PduR_ComTransmit: received transmit request with id %d and data %d\n", ComTxPduId, *PduInfoPtr->SduDataPtr);\r
\r
\r
void PduR_LinIfRxIndication(PduIdType LinRxPduId, const uint8* LinSduPtr) {\r
#if (PDUR_LINIF_SUPPORT == STD_ON)\r
- DevCheck(LinRxPduId,LinSduPtr,0x0e);\r
+ PduR_DevCheck(LinRxPduId,LinSduPtr,0x0e);\r
\r
DEBUG(DEBUG_LOW,"----------------------\n");\r
DEBUG(DEBUG_LOW,"PduR_LinIfRxIndication: received indication with id %d and data %d\n", LinRxPduId, *LinSduPtr);\r
\r
void PduR_LinIfTxConfirmation(PduIdType LinTxPduId) {\r
#if (PDUR_LINIF_SUPPORT == STD_ON)\r
- DevCheck(LinTxPduId,1,0x0f);\r
+ PduR_DevCheck(LinTxPduId,1,0x0f);\r
\r
DEBUG(DEBUG_LOW,"----------------------\n");\r
DEBUG(DEBUG_LOW,"PduR_LinIfTxConfirmation: received confirmation with id %d\n", LinTxPduId);\r
\r
void PduR_LinIfTriggerTransmit(PduIdType LinTxPduId, uint8* LinSduPtr) {\r
#if (PDUR_LINIF_SUPPORT == STD_ON)\r
- DevCheck(LinTxPduId,LinSduPtr,0x10);\r
+ PduR_DevCheck(LinTxPduId,LinSduPtr,0x10);\r
\r
DEBUG(DEBUG_LOW,"----------------------\n");\r
DEBUG(DEBUG_LOW,"PduR_LinIfTriggerTransmit: received request with id %d\n", LinTxPduId);\r
* General requirements\r
*/\r
/** @req DCM054.Partially */ /** @req DCM055.Partially */ /** @req DCM110 */ /** @req DCM107 */ /** @req DCM332 */\r
-/** @req DCM012 */ /** @req DCM044 */ /** @req DCM364 */ /** @req DCM040 */ /** @req DCM041 */\r
+/** @req DCM012 */ /** @req DCM044 */ /** @req DCM364 */ /** @req DCM041 */\r
/** @req DCM042 */ /** @req DCM049 */\r
/** @req DCM033 */\r
/** @req DCM171 */\r
/** @req DCM333 */ /** @req DCM334 */\r
+/** @req DCM018 */\r
+/** @req DCM048 */\r
+ /** @req DCM040.Uninit */\r
+ /** @req DCM040.Param */\r
+ /** @req DCM043 */\r
+ /** @req DCM048 */\r
\r
#include <string.h>\r
#include "Dcm.h"\r
#include "Dcm_Internal.h"\r
#include "Dem.h"\r
-#include "Det.h"\r
#include "MemMap.h"\r
//#include "SchM_Dcm.h"\r
#include "ComM_Dcm.h"\r
*/\r
void Dcm_Init(void) /** @req DCM037 */\r
{\r
- if ((DCM_Config.Dsl == NULL) || (DCM_Config.Dsd == NULL) || (DCM_Config.Dsp == NULL)) {\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DCM, 0, DCM_INIT_ID, DCM_E_CONFIG_INVALID);\r
-#endif\r
+ VALIDATE_NO_RV((DCM_Config.Dsl != NULL) && (DCM_Config.Dsd != NULL) && (DCM_Config.Dsp != NULL), DCM_INIT_ID, DCM_E_CONFIG_INVALID);\r
\r
- }\r
- else {\r
- DslInit();\r
- DsdInit();\r
- DspInit();\r
+ DslInit();\r
+ DsdInit();\r
+ DspInit();\r
\r
- dcmState = DCM_INITIALIZED;\r
- }\r
+ dcmState = DCM_INITIALIZED;\r
\r
return;\r
}\r
*/\r
void Dcm_MainFunction(void) /** @req DCM362 */\r
{\r
+ VALIDATE_NO_RV(dcmState == DCM_INITIALIZED, DCM_MAIN_ID, DCM_E_UNINIT);\r
+\r
DsdMain();\r
DspMain();\r
DslMain();\r
{\r
BufReq_ReturnType returnCode = BUFREQ_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_PROVIDE_RX_BUFFER_ID, DCM_E_UNINIT, BUFREQ_NOT_OK);\r
+ VALIDATE_RV(dcmRxPduId < DCM_DSL_RX_PDU_ID_LIST_LENGTH, DCM_PROVIDE_RX_BUFFER_ID, DCM_E_PARAM, BUFREQ_NOT_OK);\r
+\r
returnCode = DslProvideRxBufferToPdur(dcmRxPduId, tpSduLength, (const PduInfoType**)pduInfoPtr);\r
\r
return returnCode;\r
\r
void Dcm_RxIndication(PduIdType dcmRxPduId, NotifResultType result)\r
{\r
+ VALIDATE_NO_RV(dcmState == DCM_INITIALIZED, DCM_RX_INDICATION_ID, DCM_E_UNINIT);\r
+ VALIDATE_NO_RV(dcmRxPduId < DCM_DSL_RX_PDU_ID_LIST_LENGTH, DCM_RX_INDICATION_ID, DCM_E_PARAM);\r
+\r
DslRxIndicationFromPduR(dcmRxPduId, result);\r
}\r
\r
{\r
Std_ReturnType returnCode = E_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_GET_ACTIVE_PROTOCOL_ID, DCM_E_UNINIT, E_NOT_OK);\r
+\r
returnCode = DslGetActiveProtocol(protocolId);\r
\r
return returnCode;\r
{\r
Std_ReturnType returnCode = E_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_GET_SECURITY_LEVEL_ID, DCM_E_UNINIT, E_NOT_OK);\r
+\r
returnCode = DslGetSecurityLevel(secLevel);\r
\r
return returnCode;\r
{\r
Std_ReturnType returnCode = E_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_GET_SES_CTRL_TYPE_ID, DCM_E_UNINIT, E_NOT_OK);\r
+\r
returnCode = DslGetSesCtrlType(sesCtrlType);\r
\r
return returnCode;\r
{\r
BufReq_ReturnType returnCode = BUFREQ_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_PROVIDE_TX_BUFFER_ID, DCM_E_UNINIT, BUFREQ_NOT_OK);\r
+ VALIDATE_RV(dcmTxPduId < DCM_DSL_TX_PDU_ID_LIST_LENGTH, DCM_PROVIDE_TX_BUFFER_ID, DCM_E_PARAM, BUFREQ_NOT_OK);\r
+\r
returnCode = DslProvideTxBuffer(dcmTxPduId, (const PduInfoType**)pduInfoPtr, length);\r
\r
return returnCode;\r
\r
void Dcm_TxConfirmation(PduIdType dcmTxPduId, NotifResultType result)\r
{\r
+ VALIDATE_NO_RV(dcmState == DCM_INITIALIZED, DCM_TX_CONFIRMATION_ID, DCM_E_UNINIT);\r
+ VALIDATE_NO_RV(dcmTxPduId < DCM_DSL_TX_PDU_ID_LIST_LENGTH, DCM_TX_CONFIRMATION_ID, DCM_E_PARAM);\r
+\r
DslTxConfirmation(dcmTxPduId, result);\r
}\r
\r
/*\r
* General requirements\r
*/\r
+/** @req DCM600 */ // Generated by BSW builder\r
\r
\r
#include <string.h>\r
#include "Dcm.h"\r
#include "Dcm_Internal.h"\r
-#include "Det.h"\r
#include "MemMap.h"\r
\r
typedef struct {\r
#include "McuExtensions.h"\r
#include "Dcm.h"\r
#include "Dcm_Internal.h"\r
-#include "Det.h"\r
#include "MemMap.h"\r
#include "ComM_Dcm.h"\r
#include "PduR_Dcm.h"\r
// This function implements the requirement DCM139 when\r
// transition from one session to another.\r
//\r
-static void changeDiagnosticSession(Dcm_DslRunTimeProtocolParametersType *runtime,\r
- Dcm_SesCtrlType newSession) {\r
+static void changeDiagnosticSession(Dcm_DslRunTimeProtocolParametersType *runtime, Dcm_SesCtrlType newSession) {\r
\r
/** @req DCM139 */\r
\r
break;\r
\r
default:\r
- // TODO: Log this error.\r
+ DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_CHANGE_DIAGNOSTIC_SESSION_ID, DCM_E_PARAM);\r
DEBUG(DEBUG_MEDIUM, "Old session invalid");\r
break;\r
}\r
break;\r
\r
default:\r
- // TODO: Log this error.\r
+ DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_CHANGE_DIAGNOSTIC_SESSION_ID, DCM_E_PARAM);\r
DEBUG(DEBUG_MEDIUM, "New session invalid");\r
break;\r
}\r
#include "Dcm.h"\r
#include "Dcm_Internal.h"\r
#include "Dem.h"\r
-#include "Det.h"\r
#include "MemMap.h"\r
#if defined(USE_MCU)\r
#include "Mcu.h"\r
\r
default:\r
setDtcFilterResult = DEM_WRONG_FILTER;\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DCM, 0, DCM_UDS_READ_DTC_INFO, DCM_E_UNEXPECTED_PARAM);\r
-#endif\r
break;\r
}\r
\r
\r
default:\r
setDtcFilterResult = DEM_WRONG_FILTER;\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DCM, 0, DCM_UDS_READ_DTC_INFO, DCM_E_UNEXPECTED_PARAM);\r
-#endif\r
break;\r
}\r
\r
default:\r
responseCode = DCM_E_SUBFUNCTIONNOTSUPPORTED;\r
dtcOrigin = 0;\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DCM, 0, DCM_UDS_READ_DTC_INFO, DCM_E_UNEXPECTED_PARAM);\r
-#endif\r
break;\r
}\r
\r
if ((pduRxData->SduDataPtr[1] >= 0x01) && (pduRxData->SduDataPtr[1] <= 0x42)) {\r
boolean isRequestSeed = pduRxData->SduDataPtr[1] & 0x01;\r
Dcm_SecLevelType requestedSecurityLevel = (pduRxData->SduDataPtr[1]-1)/2;\r
- Std_ReturnType getSeedResult;\r
Dcm_NegativeResponseCodeType getSeedErrorCode;\r
\r
if (isRequestSeed) {\r
}\r
else {\r
// New security level ask for seed\r
- getSeedResult = securityRow->GetSeed(&pduRxData->SduDataPtr[2], &pduTxData->SduDataPtr[2], &getSeedErrorCode); /** @req DCM324.RequestSeed */\r
- if ((getSeedResult == E_OK) && (getSeedErrorCode == E_OK)) {\r
- // Everything ok add sub function to tx message and send it.\r
- pduTxData->SduDataPtr[1] = pduRxData->SduDataPtr[1];\r
- pduTxData->SduLength = 2 + securityRow->DspSecuritySeedSize;\r
-\r
- dspUdsSecurityAccesData.reqSecLevel = requestedSecurityLevel;\r
- dspUdsSecurityAccesData.reqSecLevelRef = securityRow;\r
- dspUdsSecurityAccesData.reqInProgress = TRUE;\r
- }\r
- else {\r
- // GetSeed returned not ok\r
+ if (securityRow->GetSeed != NULL) {\r
+ Std_ReturnType getSeedResult;\r
+ getSeedResult = securityRow->GetSeed(&pduRxData->SduDataPtr[2], &pduTxData->SduDataPtr[2], &getSeedErrorCode); /** @req DCM324.RequestSeed */\r
+ if ((getSeedResult == E_OK) && (getSeedErrorCode == E_OK)) {\r
+ // Everything ok add sub function to tx message and send it.\r
+ pduTxData->SduDataPtr[1] = pduRxData->SduDataPtr[1];\r
+ pduTxData->SduLength = 2 + securityRow->DspSecuritySeedSize;\r
+\r
+ dspUdsSecurityAccesData.reqSecLevel = requestedSecurityLevel;\r
+ dspUdsSecurityAccesData.reqSecLevelRef = securityRow;\r
+ dspUdsSecurityAccesData.reqInProgress = TRUE;\r
+ }\r
+ else {\r
+ // GetSeed returned not ok\r
+ responseCode = DCM_E_INCORRECTMESSAGELENGTHORINVALIDFORMAT;\r
+ }\r
+ } else {\r
responseCode = DCM_E_INCORRECTMESSAGELENGTHORINVALIDFORMAT;\r
}\r
}\r
if (dspUdsSecurityAccesData.reqInProgress) {\r
if (pduRxData->SduLength == (2 + dspUdsSecurityAccesData.reqSecLevelRef->DspSecurityKeySize)) { /** @req DCM321.SendKey */\r
if (requestedSecurityLevel == dspUdsSecurityAccesData.reqSecLevel) {\r
- Std_ReturnType compareKeyResult;\r
- compareKeyResult = dspUdsSecurityAccesData.reqSecLevelRef->CompareKey(&pduRxData->SduDataPtr[2]); /** @req DCM324.SendKey */\r
- if (compareKeyResult == E_OK) {\r
- // Request accepted\r
- // Kill timer\r
- DslSetSecurityLevel(dspUdsSecurityAccesData.reqSecLevelRef->DspSecurityLevel); /** @req DCM325 */\r
- dspUdsSecurityAccesData.reqInProgress = FALSE;\r
- pduTxData->SduDataPtr[1] = pduRxData->SduDataPtr[1];\r
- pduTxData->SduLength = 2;\r
- }\r
- else {\r
+ if (dspUdsSecurityAccesData.reqSecLevelRef->CompareKey != NULL) {\r
+ Std_ReturnType compareKeyResult;\r
+ compareKeyResult = dspUdsSecurityAccesData.reqSecLevelRef->CompareKey(&pduRxData->SduDataPtr[2]); /** @req DCM324.SendKey */\r
+ if (compareKeyResult == E_OK) {\r
+ // Request accepted\r
+ // Kill timer\r
+ DslSetSecurityLevel(dspUdsSecurityAccesData.reqSecLevelRef->DspSecurityLevel); /** @req DCM325 */\r
+ dspUdsSecurityAccesData.reqInProgress = FALSE;\r
+ pduTxData->SduDataPtr[1] = pduRxData->SduDataPtr[1];\r
+ pduTxData->SduLength = 2;\r
+ }\r
+ else {\r
+ responseCode = DCM_E_CONDITIONSNOTCORRECT;\r
+ }\r
+ } else {\r
responseCode = DCM_E_CONDITIONSNOTCORRECT;\r
}\r
}\r
#if defined(USE_MCU) && ( MCU_PERFORM_RESET_API == STD_ON )\r
Mcu_PerformReset();\r
#else\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DCM, 0, DCM_UDS_RESET, DCM_E_NOT_SUPPORTED);\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_UDS_RESET_ID, DCM_E_NOT_SUPPORTED);\r
#endif\r
}\r
}\r
#ifndef DCM_INTERNAL_H_\r
#define DCM_INTERNAL_H_\r
\r
+\r
+#if ( DCM_DEV_ERROR_DETECT == STD_ON )\r
+#include "Det.h"\r
+#define VALIDATE(_exp,_api,_err ) \\r
+ if( !(_exp) ) { \\r
+ Det_ReportError(MODULE_ID_DCM, 0, _api, _err); \\r
+ return E_NOT_OK; \\r
+ }\r
+\r
+#define VALIDATE_RV(_exp,_api,_err,_rv ) \\r
+ if( !(_exp) ) { \\r
+ Det_ReportError(MODULE_ID_DCM, 0, _api, _err); \\r
+ return _rv; \\r
+ }\r
+\r
+#define VALIDATE_NO_RV(_exp,_api,_err ) \\r
+ if( !(_exp) ) { \\r
+ Det_ReportError(MODULE_ID_DCM, 0, _api, _err); \\r
+ return; \\r
+ }\r
+#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x, _y, _z, _q)\r
+\r
+#else\r
+#define VALIDATE(_exp,_api,_err )\r
+#define VALIDATE_RV(_exp,_api,_err,_rv )\r
+#define VALIDATE_NO_RV(_exp,_api,_err )\r
+#define DET_REPORTERROR(_x,_y,_z,_q)\r
+#endif\r
+\r
+\r
// SID table\r
#define SID_DIAGNOSTIC_SESSION_CONTROL 0x10\r
#define SID_ECU_RESET 0x11\r
/** @req DEM113 */ /** @req DEM174 */\r
/** @req DEM286 */\r
/** @req DEM267 */\r
+/** @req DEM364 */\r
+/** @req DEM114 */\r
+/** @req DEM124 */\r
+/** @req DEM370 */\r
+\r
\r
\r
#include <string.h>\r
#include "Dem.h"\r
-#include "Det.h"\r
//#include "Fim.h"\r
//#include "Nvm.h"\r
//#include "SchM_Dem.h"\r
#define DEBOUNCE_FDC_TEST_FAILED 127\r
#define DEBOUNCE_FDC_TEST_PASSED -128\r
\r
+#if ( DEM_DEV_ERROR_DETECT == STD_ON )\r
+#include "Det.h"\r
+/** @req DEM117 */\r
+#define VALIDATE(_exp,_api,_err ) \\r
+ if( !(_exp) ) { \\r
+ Det_ReportError(MODULE_ID_DEM, 0, _api, _err); \\r
+ return E_NOT_OK; \\r
+ }\r
+\r
+#define VALIDATE_RV(_exp,_api,_err,_rv ) \\r
+ if( !(_exp) ) { \\r
+ Det_ReportError(MODULE_ID_DEM, 0, _api, _err); \\r
+ return _rv; \\r
+ }\r
+\r
+#define VALIDATE_NO_RV(_exp,_api,_err ) \\r
+ if( !(_exp) ) { \\r
+ Det_ReportError(MODULE_ID_DEM, 0, _api, _err); \\r
+ return; \\r
+ }\r
+#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x, _y, _z, _q)\r
+\r
+#else\r
+#define VALIDATE(_exp,_api,_err )\r
+#define VALIDATE_RV(_exp,_api,_err,_rv )\r
+#define VALIDATE_NO_RV(_exp,_api,_err )\r
+#define DET_REPORTERROR(_x,_y,_z,_q)\r
+#endif\r
+\r
+\r
/*\r
* Local types\r
*/\r
\r
default:\r
// TODO: What to do with PREFAIL and PREPASSED on no debouncing?\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_PREDEBOUNCE_NONE_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_PREDEBOUNCE_NONE_ID, DEM_E_PARAM_DATA);\r
break;\r
}\r
\r
break;\r
\r
default:\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_PREDEBOUNCE_COUNTER_BASED_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_PREDEBOUNCE_COUNTER_BASED_ID, DEM_E_PARAM_DATA);\r
break;\r
\r
}\r
}\r
else {\r
// Error: Event status buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_UPDATE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_UPDATE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL);\r
}\r
}\r
\r
\r
default:\r
// Don't know how to handle this.\r
- #if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_UPDATE_EVENT_STATUS_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
- #endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_UPDATE_EVENT_STATUS_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
break;\r
}\r
}\r
}\r
else {\r
// Error: Event status buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_MERGE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_MERGE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL);\r
}\r
}\r
\r
}\r
else {\r
// Error: Size of extended data record is bigger than reserved space.\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GET_EXTENDED_DATA_ID, DEM_E_EXT_DATA_TOO_BIG); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GET_EXTENDED_DATA_ID, DEM_E_EXT_DATA_TOO_BIG);\r
break; // Break the loop\r
}\r
}\r
}\r
else {\r
// Error: Pre init extended data buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_STORE_EXT_DATA_PRE_INIT_ID, DEM_E_PRE_INIT_EXT_DATA_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_STORE_EXT_DATA_PRE_INIT_ID, DEM_E_PRE_INIT_EXT_DATA_BUFF_FULL);\r
}\r
}\r
\r
}\r
else {\r
// Error: Pri mem event buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_STORE_EVENT_PRI_MEM_ID, DEM_E_PRI_MEM_EVENT_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_STORE_EVENT_PRI_MEM_ID, DEM_E_PRI_MEM_EVENT_BUFF_FULL);\r
}\r
}\r
\r
case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
// Not yet supported\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
break;\r
default:\r
break;\r
}\r
else {\r
// Error: Pri mem extended data buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_STORE_EXT_DATA_PRI_MEM_ID, DEM_E_PRI_MEM_EXT_DATA_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_STORE_EXT_DATA_PRI_MEM_ID, DEM_E_PRI_MEM_EXT_DATA_BUFF_FULL);\r
}\r
}\r
\r
case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
// Not yet supported\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
break;\r
\r
default:\r
case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
// Not yet supported\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
break;\r
default:\r
break;\r
\r
case DEM_PRE_DEBOUNCE_FREQUENCY_BASED:\r
case DEM_PRE_DEBOUNCE_TIME_BASED:\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
break;\r
\r
default:\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_PARAM_DATA);\r
break;\r
}\r
}\r
}\r
break;\r
default:\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_PARAM_DATA);\r
returnCode = E_NOT_OK;\r
break;\r
}\r
}\r
else {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_PARAM_DATA);\r
returnCode = E_NOT_OK;\r
}\r
\r
/** @req DEM180 */\r
int i, j;\r
\r
- if (DEM_Config.ConfigSet == NULL) {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_PREINIT_ID, DEM_E_CONFIG_PTR_INVALID); /** @req DEM117 */\r
-#endif\r
- return;\r
- } else {\r
- configSet = DEM_Config.ConfigSet;\r
- }\r
+ VALIDATE_NO_RV(DEM_Config.ConfigSet != NULL, DEM_PREINIT_ID, DEM_E_CONFIG_PTR_INVALID);\r
+\r
+ configSet = DEM_Config.ConfigSet;\r
\r
// Initializion of operation cycle states.\r
for (i = 0; i < DEM_OPERATION_CYCLE_ID_ENDMARK; i++) {\r
}\r
else\r
{\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_SETEVENTSTATUS_ID, DEM_E_UNINIT); /** @req DEM124.SetEventStatus */ /** @req DEM117 */\r
-#endif\r
- returnCode = E_NOT_OK; /** @req DEM370.SetEventStatus */\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETEVENTSTATUS_ID, DEM_E_UNINIT);\r
+ returnCode = E_NOT_OK;\r
}\r
\r
return returnCode;\r
}\r
else\r
{\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_RESETEVENTSTATUS_ID, DEM_E_UNINIT); /** @req DEM124.ResetEventStatus */ /** @req DEM117 */\r
-#endif\r
- returnCode = E_NOT_OK; /** @req DEM370.ResetEventStatus */\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_RESETEVENTSTATUS_ID, DEM_E_UNINIT);\r
+ returnCode = E_NOT_OK;\r
}\r
\r
return returnCode;\r
}\r
else\r
{\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GETEVENTSTATUS_ID, DEM_E_UNINIT); /** @req DEM124.GetEventStatus */ /** @req DEM117 */\r
-#endif\r
- returnCode = E_NOT_OK; /** @req DEM370.GetEventStatus */\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEVENTSTATUS_ID, DEM_E_UNINIT);\r
+ returnCode = E_NOT_OK;\r
}\r
\r
return returnCode;\r
}\r
else\r
{\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GETEVENTFAILED_ID, DEM_E_UNINIT); /** @req DEM124.GetEventFailed */ /** @req DEM117 */\r
-#endif\r
- returnCode = E_NOT_OK; /** @req DEM370.GetEventFailed */\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEVENTFAILED_ID, DEM_E_UNINIT);\r
+ returnCode = E_NOT_OK;\r
}\r
\r
return returnCode;\r
}\r
else\r
{\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GETEVENTTESTED_ID, DEM_E_UNINIT); /** @req DEM124.GetEventTested */ /** @req DEM117 */\r
-#endif\r
- returnCode = E_NOT_OK; /** @req DEM370.GetEventTested */\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEVENTTESTED_ID, DEM_E_UNINIT);\r
+ returnCode = E_NOT_OK;\r
}\r
\r
return returnCode;\r
}\r
else\r
{\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_UNINIT); /** @req DEM124.GetFaultDetectionCounter */ /** @req DEM117 */\r
-#endif\r
- returnCode = E_NOT_OK; /** @req DEM370.GetFaultDetectionCounter */\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_UNINIT);\r
+ returnCode = E_NOT_OK;\r
}\r
\r
return returnCode;\r
}\r
else\r
{\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_UNINIT); /** @req DEM124.SetOperationCycleState */ /** @req DEM117 */\r
-#endif\r
- returnCode = E_NOT_OK; /** @req DEM370.SetOperationCycleState */\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_UNINIT);\r
+ returnCode = E_NOT_OK;\r
}\r
\r
return returnCode;\r
Std_ReturnType returnCode = E_NO_DTC_AVAILABLE;\r
const Dem_EventParameterType *eventParam;\r
\r
- lookupEventIdParameter(eventId, &eventParam);\r
+ if (demState == DEM_INITIALIZED) // No action is taken if the module is not started\r
+ {\r
+ lookupEventIdParameter(eventId, &eventParam);\r
\r
- if (eventParam != NULL) {\r
- if (checkDtcKind(dtcKind, eventParam)) {\r
- if (eventParam->DTCClassRef != NULL) {\r
- *dtcOfEvent = eventParam->DTCClassRef->DTC; /** @req DEM269 */\r
- returnCode = E_OK;\r
+ if (eventParam != NULL) {\r
+ if (checkDtcKind(dtcKind, eventParam)) {\r
+ if (eventParam->DTCClassRef != NULL) {\r
+ *dtcOfEvent = eventParam->DTCClassRef->DTC; /** @req DEM269 */\r
+ returnCode = E_OK;\r
+ }\r
}\r
}\r
+ else {\r
+ // Event Id not found\r
+ returnCode = E_NOT_OK;\r
+ }\r
}\r
- else {\r
- // Event Id not found\r
+ else\r
+ {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETDTCOFEVENT_ID, DEM_UNINITIALIZED);\r
returnCode = E_NOT_OK;\r
}\r
\r
case DEM_UNINITIALIZED:\r
default:\r
// Uninitialized can not do anything\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_REPORTERRORSTATUS_ID, DEM_E_UNINIT); /** @req DEM124.ReportErrorStatus */ /** @req DEM364 */ /** @req DEM117 */\r
-#endif\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_REPORTERRORSTATUS_ID, DEM_E_UNINIT);\r
+\r
break;\r
\r
} // switch (demState)\r
Dem_DTCOriginType dtcOrigin,\r
Dem_FilterWithSeverityType filterWithSeverity,\r
Dem_DTCSeverityType dtcSeverityMask,\r
- Dem_FilterForFDCType filterForFaultDetectionCounter) {\r
-\r
- Dem_ReturnSetDTCFilterType returnCode = DEM_WRONG_FILTER;\r
+ Dem_FilterForFDCType filterForFaultDetectionCounter)\r
+{\r
+ Dem_ReturnSetDTCFilterType returnCode = DEM_FILTER_ACCEPTED;\r
\r
- // Check dtcKind parameter\r
- if ((dtcKind == DEM_DTC_KIND_ALL_DTCS) || (dtcKind == DEM_DTC_KIND_EMISSION_REL_DTCS)) {\r
+ if (demState == DEM_INITIALIZED) {\r
+ // Check dtcKind parameter\r
+ VALIDATE_RV((dtcKind == DEM_DTC_KIND_ALL_DTCS) || (dtcKind == DEM_DTC_KIND_EMISSION_REL_DTCS), DEM_SETDTCFILTER_ID, DEM_E_PARAM_DATA, DEM_WRONG_FILTER);\r
\r
// Check dtcOrigin parameter\r
- if ((dtcOrigin == DEM_DTC_ORIGIN_SECONDARY_MEMORY) || (dtcOrigin == DEM_DTC_ORIGIN_PRIMARY_MEMORY)\r
- || (dtcOrigin == DEM_DTC_ORIGIN_PERMANENT_MEMORY) || (dtcOrigin == DEM_DTC_ORIGIN_MIRROR_MEMORY)) {\r
-\r
- // Check filterWithSeverity and dtcSeverityMask parameter\r
- if ((filterWithSeverity == DEM_FILTER_WITH_SEVERITY_NO)\r
- || ((filterWithSeverity == DEM_FILTER_WITH_SEVERITY_YES) && !(dtcSeverityMask & ~(DEM_SEVERITY_MAINTENANCE_ONLY | DEM_SEVERITY_CHECK_AT_NEXT_FALT | DEM_SEVERITY_CHECK_IMMEDIATELY)))){\r
-\r
- // Check filterForFaultDetectionCounter parameter\r
- if ((filterForFaultDetectionCounter == DEM_FILTER_FOR_FDC_YES) || (filterForFaultDetectionCounter == DEM_FILTER_FOR_FDC_NO)) {\r
- // Yes all parameters correct, set the new filters. /** @req DEM057 */\r
- dtcFilter.dtcStatusMask = dtcStatusMask;\r
- dtcFilter.dtcKind = dtcKind;\r
- dtcFilter.dtcOrigin = dtcOrigin;\r
- dtcFilter.filterWithSeverity = filterWithSeverity;\r
- dtcFilter.dtcSeverityMask = dtcSeverityMask;\r
- dtcFilter.filterForFaultDetectionCounter = filterForFaultDetectionCounter;\r
- dtcFilter.faultIndex = DEM_MAX_NUMBER_EVENT;\r
- returnCode = DEM_FILTER_ACCEPTED;\r
- }\r
- }\r
- }\r
+ VALIDATE_RV((dtcOrigin == DEM_DTC_ORIGIN_SECONDARY_MEMORY) || (dtcOrigin == DEM_DTC_ORIGIN_PRIMARY_MEMORY)\r
+ || (dtcOrigin == DEM_DTC_ORIGIN_PERMANENT_MEMORY) || (dtcOrigin == DEM_DTC_ORIGIN_MIRROR_MEMORY), DEM_SETDTCFILTER_ID, DEM_E_PARAM_DATA, DEM_WRONG_FILTER);\r
+\r
+ // Check filterWithSeverity and dtcSeverityMask parameter\r
+ VALIDATE_RV(((filterWithSeverity == DEM_FILTER_WITH_SEVERITY_NO)\r
+ || ((filterWithSeverity == DEM_FILTER_WITH_SEVERITY_YES)\r
+ && !(dtcSeverityMask & ~(DEM_SEVERITY_MAINTENANCE_ONLY | DEM_SEVERITY_CHECK_AT_NEXT_FALT | DEM_SEVERITY_CHECK_IMMEDIATELY)))), DEM_SETDTCFILTER_ID, DEM_E_PARAM_DATA, DEM_WRONG_FILTER);\r
+\r
+ // Check filterForFaultDetectionCounter parameter\r
+ VALIDATE_RV((filterForFaultDetectionCounter == DEM_FILTER_FOR_FDC_YES) || (filterForFaultDetectionCounter == DEM_FILTER_FOR_FDC_NO), DEM_SETDTCFILTER_ID, DEM_E_PARAM_DATA, DEM_WRONG_FILTER);\r
+\r
+ // Yes all parameters correct, set the new filters. /** @req DEM057 */\r
+ dtcFilter.dtcStatusMask = dtcStatusMask;\r
+ dtcFilter.dtcKind = dtcKind;\r
+ dtcFilter.dtcOrigin = dtcOrigin;\r
+ dtcFilter.filterWithSeverity = filterWithSeverity;\r
+ dtcFilter.dtcSeverityMask = dtcSeverityMask;\r
+ dtcFilter.filterForFaultDetectionCounter = filterForFaultDetectionCounter;\r
+ dtcFilter.faultIndex = DEM_MAX_NUMBER_EVENT;\r
+ } else {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETDTCFILTER_ID, DEM_E_UNINIT);\r
+ returnCode = DEM_WRONG_FILTER;\r
}\r
\r
return returnCode;\r
Dem_ReturnGetStatusOfDTCType returnCode = DEM_STATUS_FAILED;\r
EventStatusRecType *eventRec;\r
\r
- if (lookupDtcEvent(dtc, &eventRec)) {\r
- if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
- if (checkDtcOrigin(dtcOrigin,eventRec->eventParamRef)) {\r
- *status = eventRec->eventStatusExtended; /** @req DEM059 */\r
- returnCode = DEM_STATUS_OK;\r
+ if (demState == DEM_INITIALIZED) {\r
+ if (lookupDtcEvent(dtc, &eventRec)) {\r
+ if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
+ if (checkDtcOrigin(dtcOrigin,eventRec->eventParamRef)) {\r
+ *status = eventRec->eventStatusExtended; /** @req DEM059 */\r
+ returnCode = DEM_STATUS_OK;\r
+ }\r
+ else {\r
+ returnCode = DEM_STATUS_WRONG_DTCORIGIN; /** @req DEM171 */\r
+ }\r
}\r
else {\r
- returnCode = DEM_STATUS_WRONG_DTCORIGIN; /** @req DEM171 */\r
+ returnCode = DEM_STATUS_WRONG_DTCKIND;\r
}\r
}\r
else {\r
- returnCode = DEM_STATUS_WRONG_DTCKIND;\r
+ returnCode = DEM_STATUS_WRONG_DTC; /** @req DEM172 */\r
}\r
- }\r
- else {\r
- returnCode = DEM_STATUS_WRONG_DTC; /** @req DEM172 */\r
+ } else {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETSTATUSOFDTC_ID, DEM_E_UNINIT);\r
+ returnCode = DEM_STATUS_FAILED;\r
}\r
\r
return returnCode;\r
Dem_ReturnGetNumberOfFilteredDTCType Dem_GetNumberOfFilteredDtc(uint16 *numberOfFilteredDTC) {\r
uint16 i;\r
uint16 numberOfFaults = 0;\r
+ Dem_ReturnGetNumberOfFilteredDTCType returnCode = DEM_NUMBER_OK;\r
\r
- //Dem_DisableEventStatusUpdate();\r
+ if (demState == DEM_INITIALIZED) {\r
+ //Dem_DisableEventStatusUpdate();\r
\r
- for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
- if (eventStatusBuffer[i].eventId != DEM_EVENT_ID_NULL) {\r
- if (matchEventWithDtcFilter(&eventStatusBuffer[i])) {\r
- if (eventStatusBuffer[i].eventParamRef->DTCClassRef != NULL) {\r
- numberOfFaults++;\r
+ for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
+ if (eventStatusBuffer[i].eventId != DEM_EVENT_ID_NULL) {\r
+ if (matchEventWithDtcFilter(&eventStatusBuffer[i])) {\r
+ if (eventStatusBuffer[i].eventParamRef->DTCClassRef != NULL) {\r
+ numberOfFaults++;\r
+ }\r
}\r
}\r
}\r
- }\r
\r
- //Dem_EnableEventStatusUpdate();\r
+ //Dem_EnableEventStatusUpdate();\r
\r
- *numberOfFilteredDTC = numberOfFaults; /** @req DEM061 */\r
+ *numberOfFilteredDTC = numberOfFaults; /** @req DEM061 */\r
+ } else {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETNUMBEROFFILTEREDDTC_ID, DEM_E_UNINIT);\r
+ returnCode = DEM_NUMBER_FAILED;\r
+ }\r
\r
- return DEM_NUMBER_OK;\r
+ return returnCode;\r
}\r
\r
\r
Dem_ReturnGetNextFilteredDTCType returnCode = DEM_FILTERED_OK;\r
boolean dtcFound = FALSE;\r
\r
- // TODO: This job should be done in an more advanced way according to Dem217\r
- while (!dtcFound && (dtcFilter.faultIndex != 0)) {\r
- dtcFilter.faultIndex--;\r
- if (eventStatusBuffer[dtcFilter.faultIndex].eventId != DEM_EVENT_ID_NULL) {\r
- if (matchEventWithDtcFilter(&eventStatusBuffer[dtcFilter.faultIndex])) {\r
- if (eventStatusBuffer[dtcFilter.faultIndex].eventParamRef->DTCClassRef != NULL) {\r
- *dtc = eventStatusBuffer[dtcFilter.faultIndex].eventParamRef->DTCClassRef->DTC; /** @req DEM216 */\r
- *dtcStatus = eventStatusBuffer[dtcFilter.faultIndex].eventStatusExtended;\r
- dtcFound = TRUE;\r
+ if (demState == DEM_INITIALIZED) {\r
+ // TODO: This job should be done in an more advanced way according to Dem217\r
+ while (!dtcFound && (dtcFilter.faultIndex != 0)) {\r
+ dtcFilter.faultIndex--;\r
+ if (eventStatusBuffer[dtcFilter.faultIndex].eventId != DEM_EVENT_ID_NULL) {\r
+ if (matchEventWithDtcFilter(&eventStatusBuffer[dtcFilter.faultIndex])) {\r
+ if (eventStatusBuffer[dtcFilter.faultIndex].eventParamRef->DTCClassRef != NULL) {\r
+ *dtc = eventStatusBuffer[dtcFilter.faultIndex].eventParamRef->DTCClassRef->DTC; /** @req DEM216 */\r
+ *dtcStatus = eventStatusBuffer[dtcFilter.faultIndex].eventStatusExtended;\r
+ dtcFound = TRUE;\r
+ }\r
}\r
}\r
}\r
- }\r
\r
- if (!dtcFound) {\r
- dtcFilter.faultIndex = DEM_MAX_NUMBER_EVENT;\r
+ if (!dtcFound) {\r
+ dtcFilter.faultIndex = DEM_MAX_NUMBER_EVENT;\r
+ returnCode = DEM_FILTERED_NO_MATCHING_DTC;\r
+ }\r
+ } else {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETNEXTFILTEREDDTC_ID, DEM_E_UNINIT);\r
returnCode = DEM_FILTERED_NO_MATCHING_DTC;\r
}\r
\r
const Dem_EventParameterType *eventParam;\r
uint16 i, j;\r
\r
- // Loop through the event buffer\r
- for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
- eventId = eventStatusBuffer[i].eventId;\r
- if (eventId != DEM_EVENT_ID_NULL) {\r
- eventParam = eventStatusBuffer[i].eventParamRef;\r
- if (eventParam != NULL) {\r
- if (DEM_CLEAR_ALL_EVENTS | (eventParam->DTCClassRef != NULL)) {\r
- if (checkDtcKind(dtcKind, eventParam)) {\r
- if (checkDtcGroup(dtc, eventParam)) {\r
- for (j = 0; (j < DEM_MAX_NR_OF_EVENT_DESTINATION) && (eventParam->EventClass->EventDestination[j] != dtcOrigin); j++);\r
- if (j < DEM_MAX_NR_OF_EVENT_DESTINATION) {\r
- // Yes! All conditions met.\r
- switch (dtcOrigin)\r
- {\r
- case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
- /** @req DEM077 */\r
- deleteEventPriMem(eventParam);\r
- deleteFreezeFrameDataPriMem(eventParam);\r
- deleteExtendedDataPriMem(eventParam);\r
- deleteEventStatusRec(eventParam); // TODO: Shall this be done or just resetting the status?\r
- break;\r
-\r
- case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
- case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
- case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
- // Not yet supported\r
- returnCode = DEM_CLEAR_WRONG_DTCORIGIN;\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
- break;\r
- default:\r
- returnCode = DEM_CLEAR_WRONG_DTCORIGIN;\r
- break;\r
+ if (demState == DEM_INITIALIZED) {\r
+ // Loop through the event buffer\r
+ for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
+ eventId = eventStatusBuffer[i].eventId;\r
+ if (eventId != DEM_EVENT_ID_NULL) {\r
+ eventParam = eventStatusBuffer[i].eventParamRef;\r
+ if (eventParam != NULL) {\r
+ if (DEM_CLEAR_ALL_EVENTS | (eventParam->DTCClassRef != NULL)) {\r
+ if (checkDtcKind(dtcKind, eventParam)) {\r
+ if (checkDtcGroup(dtc, eventParam)) {\r
+ for (j = 0; (j < DEM_MAX_NR_OF_EVENT_DESTINATION) && (eventParam->EventClass->EventDestination[j] != dtcOrigin); j++);\r
+ if (j < DEM_MAX_NR_OF_EVENT_DESTINATION) {\r
+ // Yes! All conditions met.\r
+ switch (dtcOrigin)\r
+ {\r
+ case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
+ /** @req DEM077 */\r
+ deleteEventPriMem(eventParam);\r
+ deleteFreezeFrameDataPriMem(eventParam);\r
+ deleteExtendedDataPriMem(eventParam);\r
+ deleteEventStatusRec(eventParam); // TODO: Shall this be done or just resetting the status?\r
+ break;\r
+\r
+ case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
+ case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
+ case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
+ // Not yet supported\r
+ returnCode = DEM_CLEAR_WRONG_DTCORIGIN;\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
+ break;\r
+ default:\r
+ returnCode = DEM_CLEAR_WRONG_DTCORIGIN;\r
+ break;\r
+ }\r
}\r
}\r
}\r
}\r
}\r
- }\r
- else {\r
- // Fatal error, no event parameters found for the stored event!\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_UNEXPECTED_EXECUTION); /** @req DEM117 */\r
-#endif\r
+ else {\r
+ // Fatal error, no event parameters found for the stored event!\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_UNEXPECTED_EXECUTION);\r
+ }\r
}\r
}\r
+ } else {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_UNINIT);\r
+ returnCode = DEM_CLEAR_FAILED;\r
}\r
\r
return returnCode;\r
*/\r
Dem_ReturnControlDTCStorageType Dem_DisableDTCStorage(Dem_DTCGroupType dtcGroup, Dem_DTCKindType dtcKind) /** @req DEM035 */\r
{\r
- Dem_ReturnControlDTCStorageType returnCode = DEM_CONTROL_DTC_STORAGE_N_OK;\r
-\r
- // Check dtcGroup parameter\r
- if (dtcGroup == DEM_DTC_GROUP_ALL_DTCS) {\r
- // Check dtcKind parameter\r
- if ((dtcKind == DEM_DTC_KIND_ALL_DTCS) || (dtcKind == DEM_DTC_KIND_EMISSION_REL_DTCS)) {\r
- /** @req DEM079 */\r
- disableDtcStorage.dtcGroup = dtcGroup;\r
- disableDtcStorage.dtcKind = dtcKind;\r
- disableDtcStorage.storageDisabled = TRUE;\r
-\r
- returnCode = DEM_CONTROL_DTC_STORAGE_OK;\r
+ Dem_ReturnControlDTCStorageType returnCode = DEM_CONTROL_DTC_STORAGE_OK;\r
+\r
+ if (demState == DEM_INITIALIZED) {\r
+ // Check dtcGroup parameter\r
+ if (dtcGroup == DEM_DTC_GROUP_ALL_DTCS) {\r
+ // Check dtcKind parameter\r
+ if ((dtcKind == DEM_DTC_KIND_ALL_DTCS) || (dtcKind == DEM_DTC_KIND_EMISSION_REL_DTCS)) {\r
+ /** @req DEM079 */\r
+ disableDtcStorage.dtcGroup = dtcGroup;\r
+ disableDtcStorage.dtcKind = dtcKind;\r
+ disableDtcStorage.storageDisabled = TRUE;\r
+ } else {\r
+ returnCode = DEM_CONTROL_DTC_STORAGE_N_OK;\r
+ }\r
+ } else {\r
+ returnCode = DEM_CONTROL_DTC_WRONG_DTCGROUP;\r
}\r
- }\r
- else {\r
- returnCode = DEM_CONTROL_DTC_WRONG_DTCGROUP;\r
+ } else {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_DISABLEDTCSTORAGE_ID, DEM_E_UNINIT);\r
+ returnCode = DEM_CONTROL_DTC_STORAGE_N_OK;\r
}\r
\r
return returnCode;\r
*/\r
Dem_ReturnControlDTCStorageType Dem_EnableDTCStorage(Dem_DTCGroupType dtcGroup, Dem_DTCKindType dtcKind)\r
{\r
- // TODO: Behavior is not defined if group or kind do not match active settings, therefore the filter is just switched off.\r
- disableDtcStorage.storageDisabled = FALSE; /** @req DEM080 */\r
+ Dem_ReturnControlDTCStorageType returnCode = DEM_CONTROL_DTC_STORAGE_OK;\r
\r
- return DEM_CONTROL_DTC_STORAGE_OK;\r
+ if (demState == DEM_INITIALIZED) {\r
+ // TODO: Behavior is not defined if group or kind do not match active settings, therefore the filter is just switched off.\r
+ disableDtcStorage.storageDisabled = FALSE; /** @req DEM080 */\r
+ } else {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_ENABLEDTCSTORAGE_ID, DEM_E_UNINIT);\r
+ returnCode = DEM_CONTROL_DTC_STORAGE_N_OK;\r
+ }\r
+\r
+ return returnCode;\r
}\r
\r
/*\r
ExtDataRecType *extData;\r
uint8 posInExtData = 0;\r
\r
- if (lookupDtcEvent(dtc, &eventRec)) {\r
- if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
- if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
- if (lookupExtendedDataRecNumParam(extendedDataNumber, eventRec->eventParamRef, &extendedDataRecordClass, &posInExtData)) {\r
- if (*bufSize >= extendedDataRecordClass->DataSize) {\r
- switch (dtcOrigin)\r
- {\r
- case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
- if (lookupExtendedDataPriMem(eventRec->eventId, &extData)) {\r
- // Yes all conditions met, copy the extended data record to destination buffer.\r
- memcpy(destBuffer, &extData->data[posInExtData], extendedDataRecordClass->DataSize); /** @req DEM075 */\r
- *bufSize = extendedDataRecordClass->DataSize;\r
- returnCode = DEM_RECORD_OK;\r
- }\r
- else {\r
- // The record number is legal but no record was found for the DTC\r
- *bufSize = 0;\r
- returnCode = DEM_RECORD_OK;\r
+ if (demState == DEM_INITIALIZED) {\r
+ if (lookupDtcEvent(dtc, &eventRec)) {\r
+ if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
+ if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
+ if (lookupExtendedDataRecNumParam(extendedDataNumber, eventRec->eventParamRef, &extendedDataRecordClass, &posInExtData)) {\r
+ if (*bufSize >= extendedDataRecordClass->DataSize) {\r
+ switch (dtcOrigin)\r
+ {\r
+ case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
+ if (lookupExtendedDataPriMem(eventRec->eventId, &extData)) {\r
+ // Yes all conditions met, copy the extended data record to destination buffer.\r
+ memcpy(destBuffer, &extData->data[posInExtData], extendedDataRecordClass->DataSize); /** @req DEM075 */\r
+ *bufSize = extendedDataRecordClass->DataSize;\r
+ returnCode = DEM_RECORD_OK;\r
+ }\r
+ else {\r
+ // The record number is legal but no record was found for the DTC\r
+ *bufSize = 0;\r
+ returnCode = DEM_RECORD_OK;\r
+ }\r
+ break;\r
+\r
+ case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
+ case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
+ case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
+ // Not yet supported\r
+ returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEXTENDEDDATARECORDBYDTC_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
+ break;\r
+ default:\r
+ returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
+ break;\r
}\r
- break;\r
-\r
- case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
- case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
- case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
- // Not yet supported\r
- returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
- Det_ReportError(MODULE_ID_DEM, 0, DEM_GETEXTENDEDDATARECORDBYDTC_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
- break;\r
- default:\r
- returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
- break;\r
+ }\r
+ else {\r
+ returnCode = DEM_RECORD_BUFFERSIZE;\r
}\r
}\r
else {\r
- returnCode = DEM_RECORD_BUFFERSIZE;\r
+ returnCode = DEM_RECORD_NUMBER;\r
}\r
}\r
else {\r
- returnCode = DEM_RECORD_NUMBER;\r
+ returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
}\r
}\r
else {\r
- returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
+ returnCode = DEM_RECORD_DTCKIND;\r
}\r
}\r
- else {\r
- returnCode = DEM_RECORD_DTCKIND;\r
- }\r
+ } else {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEXTENDEDDATARECORDBYDTC_ID, DEM_E_UNINIT);\r
+ returnCode = DEM_RECORD_WRONG_DTC;\r
}\r
\r
return returnCode;\r
Dem_ExtendedDataRecordClassType const *extendedDataRecordClass = NULL;\r
uint8 posInExtData;\r
\r
- if (lookupDtcEvent(dtc, &eventRec)) {\r
- if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
- if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
- if (lookupExtendedDataRecNumParam(extendedDataNumber, eventRec->eventParamRef, &extendedDataRecordClass, &posInExtData)) {\r
- *sizeOfExtendedDataRecord = extendedDataRecordClass->DataSize; /** @req DEM076 */\r
- returnCode = DEM_GET_SIZEOFEDRBYDTC_OK;\r
+ if (demState == DEM_INITIALIZED) {\r
+ if (lookupDtcEvent(dtc, &eventRec)) {\r
+ if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
+ if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
+ if (lookupExtendedDataRecNumParam(extendedDataNumber, eventRec->eventParamRef, &extendedDataRecordClass, &posInExtData)) {\r
+ *sizeOfExtendedDataRecord = extendedDataRecordClass->DataSize; /** @req DEM076 */\r
+ returnCode = DEM_GET_SIZEOFEDRBYDTC_OK;\r
+ }\r
+ else {\r
+ returnCode = DEM_GET_SIZEOFEDRBYDTC_W_RNUM;\r
+ }\r
}\r
else {\r
- returnCode = DEM_GET_SIZEOFEDRBYDTC_W_RNUM;\r
+ returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTCOR;\r
}\r
}\r
else {\r
- returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTCOR;\r
+ returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTCKI;\r
}\r
}\r
- else {\r
- returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTCKI;\r
- }\r
+ } else {\r
+ DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETSIZEOFEXTENDEDDATARECORDBYDTC_ID, DEM_E_UNINIT);\r
+ returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTC;\r
}\r
\r
return returnCode;\r
typedef struct {\r
uint16 RecordNumber; // (1)\r
uint16 DataSize; // (1)\r
- Dem_CallbackGetExtDataRecordFncType CallbackGetExtDataRecord;// (1)\r
+ Dem_CallbackGetExtDataRecordFncType CallbackGetExtDataRecord;// (1) /** @req DEM139 */\r
} Dem_ExtendedDataRecordClassType; /** @req DEM135 */\r
\r
// 10.2.13 DemExtendedDataClass\r
-include ../config/*.mk\r
-include ../config/$(BOARDDIR)/*.mk\r
\r
-MOD_USE+=ECUM KERNEL MCU WDG WDGM PORT DIO \r
+MOD_USE+=ECUM KERNEL MCU WDG WDGM PORT DIO DET\r
\r
SELECT_CONSOLE = RAMLOG\r
SELECT_OS_CONSOLE = RAMLOG\r
obj-y += Hooks.o\r
obj-y += Rte.o\r
\r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
+VPATH += ../\r
+\r
# Board object files\r
include $(ROOTDIR)/boards/board_common.mk\r
\r
inc-y += $(ROOTDIR)/system/kernel/include\r
\r
#TODO: Remove?, Build other way?\r
-VPATH += $(ROOTDIR)/$(SUBDIR)/Rte\r
-inc-y += $(ROOTDIR)/$(SUBDIR)/Rte\r
+VPATH += ../Rte\r
+inc-y += ../Rte\r
VPATH += $(ROOTDIR)/components/blinker\r
inc-y += $(ROOTDIR)/components/blinker\r
\r
-include ../config/*.mk\r
-include ../config/$(BOARDDIR)/*.mk\r
\r
--include ../config/*.mk\r
--include ../config/$(BOARDDIR)/*.mk\r
-\r
-MOD_USE+=KERNEL MCU ECUM DET PORT PWM RAMLOG\r
+MOD_USE+=KERNEL MCU ECUM DET PORT PWM RAMLOG\r
obj-y += Hooks.o\r
obj-y += Rte.o\r
\r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
+VPATH += ../\r
+\r
# Board object files\r
include $(ROOTDIR)/boards/board_common.mk\r
\r
inc-y += $(ROOTDIR)/system/kernel/include\r
\r
#TODO: Remove?, Build other way?\r
-VPATH += $(ROOTDIR)/$(SUBDIR)/Rte\r
-inc-y += $(ROOTDIR)/$(SUBDIR)/Rte\r
+VPATH += ../Rte\r
+inc-y += ../Rte\r
VPATH += $(ROOTDIR)/components/pwm_sine\r
inc-y += $(ROOTDIR)/components/pwm_sine\r
\r
-include ../config/*.mk\r
-include ../config/$(BOARDDIR)/*.mk\r
\r
-MOD_USE+=KERNEL MCU ECUM DET PORT COM CAN CANIF PWM RAMLOG\r
+MOD_USE+=KERNEL MCU ECUM DET PORT COM CAN CANIF PWM RAMLOG\r
inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
inc-y += $(ROOTDIR)/system/kernel/include\r
\r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
+VPATH += ../\r
+\r
# Board object files\r
include $(ROOTDIR)/boards/board_common.mk\r
\r
inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
\r
#TODO: Remove?, Build other way?\r
-VPATH += $(ROOTDIR)/$(SUBDIR)/Rte\r
-inc-y += $(ROOTDIR)/$(SUBDIR)/Rte\r
+VPATH += ../Rte\r
+inc-y += ../Rte\r
VPATH += $(ROOTDIR)/components/fading_led\r
inc-y += $(ROOTDIR)/components/fading_led\r
\r
--include ../config/*.mk\r
--include ../config/$(BOARDDIR)/*.mk\r
\r
-include ../config/*.mk\r
-include ../config/$(BOARDDIR)/*.mk\r
\r
-MOD_USE+= DET ECUM MCU KERNEL RAMLOG \r
+MOD_USE+= DET ECUM MCU KERNEL RAMLOG \r
\r
#def-y += NDEBUG\r
-#def-y += HEAPSIZE=1400
\ No newline at end of file
--- /dev/null
+\r
+\r
+def-y += HEAPSIZE=1000
\ No newline at end of file
\r
# Our object files\r
obj-y += simple_main.o\r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
\r
VPATH += ..\r
VPATH += ../config\r
-include ../config/*.mk\r
-include ../config/$(BOARDDIR)/*.mk\r
\r
-MOD_USE+=KERNEL MCU ADC DMA \r
+MOD_USE+=ADC DET ECUM DMA KERNEL MCU \r
\r
SELECT_CONSOLE = RAMLOG\r
SELECT_OS_CONSOLE = RAMLOG
\ No newline at end of file
inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
inc-y += $(ROOTDIR)/system/kernel/include\r
\r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
+VPATH += ../\r
+\r
# Board object files\r
include $(ROOTDIR)/boards/board_common.mk\r
\r
inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
\r
#TODO: Remove?, Build other way?\r
-VPATH += $(ROOTDIR)/$(SUBDIR)/Rte\r
-inc-y += $(ROOTDIR)/$(SUBDIR)/Rte\r
+VPATH += ../Rte\r
+inc-y += ../Rte\r
VPATH += $(ROOTDIR)/components/switch\r
inc-y += $(ROOTDIR)/components/switch\r
\r
--include ../config/*.mk\r
--include ../config/$(BOARDDIR)/*.mk\r
\r
-include ../config/*.mk\r
-include ../config/$(BOARDDIR)/*.mk\r
\r
-MOD_USE+= DET ECUM MCU KERNEL RAMLOG \r
+MOD_USE+=DET ECUM MCU KERNEL RAMLOG \r
\r
SELECT_CONSOLE = RAMLOG\r
SELECT_OS_CONSOLE = RAMLOG\r
\r
def-y += CFG_RAMLOG_SIZE=1024\r
-#def-y += HEAPSIZE=400\r
--- /dev/null
+\r
+\r
+def-y += HEAPSIZE=1400
\ No newline at end of file
\r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
-\r
+# Our object files\r
+obj-y += tiny.o\r
\r
VPATH += ..\r
VPATH += ../config\r
# Board object files\r
include $(ROOTDIR)/boards/board_common.mk\r
\r
-# Our object files\r
-obj-y += tiny.o\r
-\r
# libs needed by us \r
#libitem-y +=\r
\r
#ifndef CANTP_H_\r
#define CANTP_H_\r
\r
-#define CANTP_MODULE_ID MODULE_ID_CANTP\r
+#define CANTP_MODULE_ID MODULE_ID_CANTP /** @req CANTP115 */\r
#define CANTP_VENDOR_ID 1\r
\r
#define CANTP_SW_MAJOR_VERSION 1\r
* Errors described by CanTp 7.4 Error classification.\r
*\r
****************************/\r
-\r
+/** @req CANTP101 */\r
#define CANTP_E_PARAM_CONFIG 0x01\r
#define CANTP_E_PARAM_ID 0x02\r
#define CANTP_E_PARAM_ADDRESS 0x04\r
#include "ComStack_Types.h"\r
\r
\r
-#ifdef COM_DEV_ERROR_DETECT\r
-#include "Det.h"\r
-#endif\r
-\r
#define COM_SW_MAJOR_VERSION 1\r
#define COM_SW_MINOR_VERSION 0\r
#define COM_SW_PATCH_VERSION 0\r
#include "Com_Com.h"\r
#include "Com_Sched.h"\r
\r
-const Com_ConfigType * ComConfig;\r
-\r
-\r
-\r
-#ifdef COM_DEV_ERROR_DETECT\r
-\r
-#undef DET_REPORTERROR\r
-#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x,_y,_z,_q)\r
-\r
-\r
-// Define macro for parameter check.\r
-#define PduIdCheck(PduId,ApiId,...) \\r
- if (PduId >= Com_Arc_Config.ComNIPdu) { \\r
- DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, ApiId, COM_INVALID_PDU_ID); \\r
- return __VA_ARGS__; \\r
- } \\r
-\r
-#define COM_VALIDATE_SIGNAL(SignalId, ApiId, ...) \\r
- if (ComConfig->ComSignal[SignalId].Com_Arc_IsSignalGroup) { \\r
- DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, ApiId, COM_ERROR_SIGNAL_IS_SIGNALGROUP); \\r
- return __VA_ARGS__; \\r
- } \\r
-\r
-\r
-#else\r
-\r
-#undef DET_REPORTERROR\r
-#define DET_REPORTERROR(_x,_y,_z,_q)\r
-\r
-#define PduIdCheck(PduId,ApiId,...)\r
-#define COM_VALIDATE_SIGNAL(PduId, ApiId, ...)\r
-#endif\r
-\r
-\r
-#define testBit(source,bit) (*((uint8 *)source + (bit / 8)) & (1 << (bit % 8)))\r
-#define setBit(dest,bit) *((uint8 *)dest + (bit / 8)) |= (1 << (bit % 8))\r
-#define clearBit(dest,bit) *((uint8 *)dest + (bit / 8)) &= ~(1 << (bit % 8))\r
-\r
-#define ComGetSignal(SignalId) \\r
- const ComSignal_type * Signal = &ComConfig->ComSignal[SignalId]\\r
-\r
-#define ComGetArcSignal(SignalId) \\r
- Com_Arc_Signal_type * Arc_Signal = &Com_Arc_Config.ComSignal[SignalId]\\r
-\r
-#define ComGetIPdu(IPduId) \\r
- const ComIPdu_type *IPdu = &ComConfig->ComIPdu[IPduId]\\r
-\r
-#define ComGetArcIPdu(IPduId) \\r
- Com_Arc_IPdu_type *Arc_IPdu = &Com_Arc_Config.ComIPdu[IPduId]\\r
-\r
-#define ComGetGroupSignal(GroupSignalId) \\r
- const ComGroupSignal_type *GroupSignal = &ComConfig->ComGroupSignal[GroupSignalId]\\r
-\r
-#define ComGetArcGroupSignal(GroupSignalId) \\r
- Com_Arc_GroupSignal_type *Arc_GroupSignal = &Com_Arc_Config.ComGroupSignal[GroupSignalId]\\r
-\r
//-------------------------------------------------------------------\r
// From OSEK_VDX spec...\r
//\r
\r
\r
// From Autosar\r
-void Com_Init( const Com_ConfigType * ConfigPtr);\r
-void Com_DeInit( void );\r
+void Com_Init(const Com_ConfigType * ConfigPtr);\r
+void Com_DeInit(void);\r
\r
void Com_IpduGroupStart(Com_PduGroupIdType IpduGroupId, boolean Initialize);\r
void Com_IpduGroupStop(Com_PduGroupIdType IpduGroupId);\r
#include "Dcm_Cbk.h"\r
\r
#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
-// Error codes produced by this module\r
-#define DCM_E_CONFIG_INVALID 0x41\r
-#define DCM_E_UNEXPECTED_PARAM 0x42\r
+// Error codes produced by this module defined by Autosar\r
+#define DCM_E_INTERFACE_TIMEOUT 0x01\r
+#define DCM_E_INTERFACE_VALUE_OUT_OF_RANGE 0x02\r
+#define DCM_E_INTERFACE_BUFFER_OVERFLOW 0x03\r
+#define DCM_E_INTERFACE_PROTOCOL_MISMATCH 0x04\r
+#define DCM_E_UNINIT 0x05\r
+#define DCM_E_PARAM 0x06\r
+\r
+// Other error codes reported by this module\r
+#define DCM_E_CONFIG_INVALID 0x40\r
#define DCM_E_NOT_SUPPORTED 0xfe\r
#define DCM_E_NOT_IMPLEMENTED_YET 0xff\r
\r
-// Service ID in this module\r
+// Service IDs in this module defined by Autosar\r
#define DCM_INIT_ID 0x01\r
-#define DCM_HANDLE_RESPONSE_TRANSMISSION 0x80\r
-#define DCM_UDS_READ_DTC_INFO 0x81\r
-#define DCM_UDS_RESET 0x82\r
+#define DCM_PROVIDE_RX_BUFFER_ID 0x02\r
+#define DCM_RX_INDICATION_ID 0x03\r
+#define DCM_PROVIDE_TX_BUFFER_ID 0x04\r
+#define DCM_TX_CONFIRMATION_ID 0x05\r
+#define DCM_GET_SES_CTRL_TYPE_ID 0x06\r
+#define DCM_GET_SECURITY_LEVEL_ID 0x0d\r
+#define DCM_GET_ACTIVE_PROTOCOL_ID 0x0f\r
+#define DCM_COMM_NO_COM_MODE_ENTERED_ID 0x21\r
+#define DCM_COMM_SILENT_COM_MODE_ENTERED_ID 0x22\r
+#define DCM_COMM_FULL_COM_MODE_ENTERED_ID 0x23\r
+#define DCM_MAIN_ID 0x25\r
+\r
+// Other service IDs reported by this module\r
+#define DCM_HANDLE_RESPONSE_TRANSMISSION_ID 0x80\r
+#define DCM_UDS_READ_DTC_INFO_ID 0x81\r
+#define DCM_UDS_RESET_ID 0x82\r
+#define DCM_CHANGE_DIAGNOSTIC_SESSION_ID 0x88\r
#define DCM_GLOBAL_ID 0xff\r
\r
#endif\r
\r
#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
// Error codes reported by this module defined by AUTOSAR /** @req DEM116 */ /** @req DEM173 */\r
-#define DEM_E_CONFIG_PTR_INVALID 0x01\r
#define DEM_E_PARAM_CONFIG 0x10\r
#define DEM_E_PARAM_ADDRESS 0x11\r
#define DEM_E_PARAM_DATA 0x12\r
#define DEM_E_NODATAAVAILABLE 0x30\r
\r
// Other error codes reported by this module\r
-#define DEM_E_EVENT_STATUS_BUFF_FULL 0x40\r
-#define DEM_E_EXT_DATA_TOO_BIG 0x41\r
-#define DEM_E_PRE_INIT_EXT_DATA_BUFF_FULL 0x42\r
-#define DEM_E_PRI_MEM_EVENT_BUFF_FULL 0x43\r
-#define DEM_E_PRI_MEM_EXT_DATA_BUFF_FULL 0x44\r
+#define DEM_E_CONFIG_PTR_INVALID 0x40\r
+#define DEM_E_EVENT_STATUS_BUFF_FULL 0x41\r
+#define DEM_E_EXT_DATA_TOO_BIG 0x42\r
+#define DEM_E_PRE_INIT_EXT_DATA_BUFF_FULL 0x43\r
+#define DEM_E_PRI_MEM_EVENT_BUFF_FULL 0x44\r
+#define DEM_E_PRI_MEM_EXT_DATA_BUFF_FULL 0x45\r
\r
#define DEM_E_UNEXPECTED_EXECUTION 0xfe\r
#define DEM_E_NOT_IMPLEMENTED_YET 0xff\r
\r
// Service ID in this module\r
-#define DEM_PREINIT_ID 0x01\r
-#define DEM_INIT_ID 0x02\r
-#define DEM_SETEVENTSTATUS_ID 0x04\r
-#define DEM_RESETEVENTSTATUS_ID 0x05\r
-#define DEM_SETOPERATIONCYCLESTATE_ID 0x08\r
-#define DEM_GETEVENTSTATUS_ID 0x0A\r
-#define DEM_GETEVENTFAILED_ID 0x0B\r
-#define DEM_GETEVENTTESTED_ID 0x0C\r
-#define DEM_REPORTERRORSTATUS_ID 0x0F\r
-#define DEM_GETEXTENDEDDATARECORDBYDTC_ID 0x20\r
-#define DEM_CLEARDTC_ID 0x22\r
-#define DEM_GETFAULTDETECTIONCOUNTER_ID 0x3E\r
-\r
-#define DEM_UPDATE_EVENT_STATUS_ID 0x80\r
-#define DEM_MERGE_EVENT_STATUS_ID 0x81\r
-#define DEM_GET_EXTENDED_DATA_ID 0x82\r
-#define DEM_STORE_EXT_DATA_PRE_INIT_ID 0x83\r
-#define DEM_STORE_EVENT_PRI_MEM_ID 0x84\r
-#define DEM_STORE_EXT_DATA_PRI_MEM_ID 0x85\r
-#define DEM_PREDEBOUNCE_NONE_ID 0x86\r
-#define DEM_PREDEBOUNCE_COUNTER_BASED_ID 0x87\r
-#define DEM_GLOBAL_ID 0xff\r
+#define DEM_PREINIT_ID 0x01\r
+#define DEM_INIT_ID 0x02\r
+#define DEM_SHUTDOWN_ID 0x03\r
+#define DEM_SETEVENTSTATUS_ID 0x04\r
+#define DEM_RESETEVENTSTATUS_ID 0x05\r
+#define DEM_SETOPERATIONCYCLESTATE_ID 0x08\r
+#define DEM_GETEVENTSTATUS_ID 0x0A\r
+#define DEM_GETEVENTFAILED_ID 0x0B\r
+#define DEM_GETEVENTTESTED_ID 0x0C\r
+#define DEM_GETDTCOFEVENT_ID 0x0D\r
+#define DEM_REPORTERRORSTATUS_ID 0x0F\r
+#define DEM_SETDTCFILTER_ID 0x13\r
+#define DEM_GETSTATUSOFDTC_ID 0x15\r
+#define DEM_GETDTCSTATUSAVAILABILITYMASK_ID 0x16\r
+#define DEM_GETNUMBEROFFILTEREDDTC_ID 0x17\r
+#define DEM_GETNEXTFILTEREDDTC_ID 0x18\r
+#define DEM_GETEXTENDEDDATARECORDBYDTC_ID 0x20\r
+#define DEM_GETSIZEOFEXTENDEDDATARECORDBYDTC_ID 0x21\r
+#define DEM_CLEARDTC_ID 0x22\r
+#define DEM_DISABLEDTCSTORAGE_ID 0x24\r
+#define DEM_ENABLEDTCSTORAGE_ID 0x25\r
+#define DEM_GETTRANSLATIONTYPE_ID 0x3c\r
+#define DEM_GETFAULTDETECTIONCOUNTER_ID 0x3E\r
+#define DEM_MAINFUNCTION_ID 0x55\r
+\r
+#define DEM_UPDATE_EVENT_STATUS_ID 0x80\r
+#define DEM_MERGE_EVENT_STATUS_ID 0x81\r
+#define DEM_GET_EXTENDED_DATA_ID 0x82\r
+#define DEM_STORE_EXT_DATA_PRE_INIT_ID 0x83\r
+#define DEM_STORE_EVENT_PRI_MEM_ID 0x84\r
+#define DEM_STORE_EXT_DATA_PRI_MEM_ID 0x85\r
+#define DEM_PREDEBOUNCE_NONE_ID 0x86\r
+#define DEM_PREDEBOUNCE_COUNTER_BASED_ID 0x87\r
+#define DEM_GLOBAL_ID 0xff\r
\r
#endif\r
\r
TASK_STATE_RUNNING,\r
} TaskStateType;\r
\r
+#define INVALID_TASK 0xdeadU\r
\r
typedef TaskStateType *TaskStateRefType;\r
\r
StatusType ReleaseResource( ResourceType ResID);\r
\r
/*\r
- * Define the scheduler resource as ~0\r
+ * Define scheduler as topmost\r
*/\r
-#define RES_SCHEDULER ~(ResourceType)0\r
+#define RES_SCHEDULER OS_RESOURCE_CNT\r
\r
/*\r
* Priorities of tasks and resources\r
\r
#if (PDUR_DEV_ERROR_DETECT == STD_ON)\r
\r
-#undef DET_REPORTERROR\r
-#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x,_y,_z,_q)\r
+#define PDUR_DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x,_y,_z,_q)\r
\r
// Define macro for state, parameter and data pointer checks.\r
// TODO Implement data range check if needed.\r
-#define DevCheck(PduId,PduPtr,ApiId,...) \\r
+#define PduR_DevCheck(PduId,PduPtr,ApiId,...) \\r
if (PduRState == PDUR_UNINIT || PduRState == PDUR_REDUCED) { \\r
- DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_INVALID_REQUEST); \\r
+ PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_INVALID_REQUEST); \\r
return __VA_ARGS__; \\r
} \\r
if (PduPtr == 0 && PDUR_DEV_ERROR_DETECT) { \\r
- DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_DATA_PTR_INVALID); \\r
+ PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_DATA_PTR_INVALID); \\r
return __VA_ARGS__; \\r
} \\r
if ((PduId >= PduRConfig->PduRRoutingTable->NRoutingPaths) && PDUR_DEV_ERROR_DETECT) { \\r
- DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_PDU_ID_INVALID); \\r
+ PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_PDU_ID_INVALID); \\r
return __VA_ARGS__; \\r
- } \\r
+ }\r
\r
\r
#else\r
-#undef DET_REPORTERROR\r
-#define DET_REPORTERROR(_x,_y,_z,_q)\r
-#define DevCheck(...)\r
+#define PDUR_DET_REPORTERROR(_x,_y,_z,_q)\r
+#define PduR_DevCheck(...)\r
\r
#endif\r
\r
PORT_PIN_IN = 0, PORT_PIN_OUT,
} Port_PinDirectionType;
+#if defined(CFG_HC1X)
+/** @req PORT124 */
+typedef uint8 Port_PinModeType;
+#else // CFG_PPC, CFG_STM32_STAMP and others
+typedef uint32 Port_PinModeType;
+#endif
+
void
Port_Init(const Port_ConfigType *configType);
#if ( PORT_PIN_DIRECTION_CHANGES_ALLOWED == STD_ON )
typedef struct
{
- CirqBufferDynType *cirqPtr;
+ CirqBufferType *cirqPtr;
} Arc_MBoxType;
-Please see the Arctic Core wiki. \r
-http://arccore.com/wiki\r
+\r
+Arctic Core - the open source AUTOSAR embedded platform\r
+\r
+\r
+For information on getting started with Arctic Core, please take a look at: \r
+ http://arccore.com/wiki/Quick-start_Tutorial\r
+\r
+For more general information and help, browse the wiki at:\r
+ http://arccore.com/wiki/\r
+\r
+or post a question in the forum:\r
+ https://arccore.com/forum/\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
if [ $? -ne 0 ]; then quit 1
fi
-export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02
+export BDIR=examples/simple
make BOARDDIR=stm32_stm3210c clean
make BOARDDIR=stm32_stm3210c all
if [ $? -ne 0 ]; then quit 1
fi
-export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02
-make BOARDDIR=stm32_mcbstm32 clean
-make BOARDDIR=stm32_mcbstm32 all
-if [ $? -ne 0 ]; then quit 1
-fi
+# Problems memory..
+#export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02, system/kernel/testsystem/suite_03
+#make BOARDDIR=stm32_stm3210c clean
+#make BOARDDIR=stm32_stm3210c all
+#if [ $? -ne 0 ]; then quit 1
+#fi
+
-export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02
-make BOARDDIR=stm32_stm3210c clean
-make BOARDDIR=stm32_stm3210c all
-if [ $? -ne 0 ]; then quit 1
-fi
SCRIPT_DIR=`dirname $0`
ARCH=PPC
source ${SCRIPT_DIR}/guess_cc.sh
-
+
export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02,,system/kernel/testsystem/suite_03
make BOARDDIR=mpc5554sim clean
make BOARDDIR=mpc5554sim all
# Build the examples...
export BDIR=examples/blinker_node
-make BOARDDIR=mpc551xsim clean
-make BOARDDIR=mpc551xsim all
+make BOARDDIR=mpc5516it clean
+make BOARDDIR=mpc5516it all
if [ $? -ne 0 ]; then quit 1
fi
export BDIR=examples/pwm_node
-make BOARDDIR=mpc551xsim clean
-make BOARDDIR=mpc551xsim all
+make BOARDDIR=mpc5516it clean
+make BOARDDIR=mpc5516it all
if [ $? -ne 0 ]; then quit 1
fi
export BDIR=examples/pwm_node2
-make BOARDDIR=mpc551xsim clean
-make BOARDDIR=mpc551xsim all
+make BOARDDIR=mpc5516it clean
+make BOARDDIR=mpc5516it all
if [ $? -ne 0 ]; then quit 1
fi
if [ $? -ne 0 ]; then quit 1
fi
-export BDIR=examples/swith_node
-make BOARDDIR=mpc551xsim clean
-make BOARDDIR=mpc551xsim all
+export BDIR=examples/switch_node
+make BOARDDIR=mpc5516it clean
+make BOARDDIR=mpc5516it all
if [ $? -ne 0 ]; then quit 1
fi
export BDIR=examples/tiny
-make BOARDDIR=mpc551xsim clean
-make BOARDDIR=mpc551xsim all
+make BOARDDIR=mpc5516it clean
+make BOARDDIR=mpc5516it all
if [ $? -ne 0 ]; then quit 1
fi
/^\.data/ { print " data:" $$3+0 " bytes"; rom+=$$3; ram+=$$3}; \\r
/^\.bss/ { print " bss :" $$3+0 " bytes"; ram+=$$3}; \\r
END { print " ROM: ~" rom " bytes"; print " RAM: ~" ram " bytes"}' $(subst .elf,.map,$@)\r
+ifeq ($(BUILD_LOAD_MODULE),y)\r
+ @$(CROSS_COMPILE)objcopy -O srec $@ $@.raw.s19\r
+ srec_cat $@.raw.s19 --crop 0x8008000 0x803fffc --fill 0x00 0x8008000 0x803fffc --l-e-crc32 0x803fffc -o $@.lm.s19\r
+endif\r
endif\r
endif\r
@echo\r
rv = E_OS_VALUE;\r
goto err;\r
} else {\r
- if( Cycle == 0 ||\r
- (Cycle >= COUNTER_MIN_CYCLE(aPtr)) ||\r
- (Cycle <= COUNTER_MAX(aPtr)) ) {\r
- /* OK */\r
- } else {\r
+ if( Cycle != 0 &&\r
+ ( (Cycle < COUNTER_MIN_CYCLE(aPtr)) ||\r
+ (Cycle > COUNTER_MAX(aPtr)) ) ) {\r
/** @req OS304 */\r
rv = E_OS_VALUE;\r
goto err;\r
--- /dev/null
+/* -------------------------------- Arctic Core ------------------------------\r
+ * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
+ *\r
+ * Copyright (C) 2009 ArcCore AB <contact@arccore.com>\r
+ *\r
+ * This source code is free software; you can redistribute it and/or modify it\r
+ * under the terms of the GNU General Public License version 2 as published by the\r
+ * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\r
+ * for more details.\r
+ * -------------------------------- Arctic Core ------------------------------*/\r
+\r
+#include <stdlib.h>\r
+#include "Os.h"\r
+\r
+#include "internal.h"\r
+#include "arc.h"\r
+#include "arch.h"\r
+\r
+\r
+StatusType GetActiveApplicationMode( AppModeType* mode) {\r
+ *mode = os_sys.appMode;\r
+ return E_OK;\r
+}\r
\r
void interrupt( void ) {\r
\r
- apa((void *)0x123);\r
+// apa((void *)0x123);\r
}\r
\r
\r
\r
}\r
\r
+int func3( int a ) {\r
+ if( a == 0) {\r
+ return 5;\r
+ }\r
+ return 4;\r
+}\r
+\r
int func2( void ) {\r
int a;\r
a = 3;\r
\r
func1(5);\r
+ func3(0);\r
\r
return 2;\r
}\r
StatusType IncrementCounter( CounterType counter_id ) {\r
StatusType rv = E_OK;\r
OsCounterType *cPtr;\r
+ uint32_t flags;\r
cPtr = Os_CfgGetCounter(counter_id);\r
\r
+ Irq_Save(flags);\r
/** @req OS376 */\r
if( !IsCounterValid(counter_id) ) {\r
rv = E_OS_ID;\r
+ Irq_Restore(flags);\r
goto err;\r
}\r
\r
if( ( cPtr->type != COUNTER_TYPE_SOFT ) ||\r
( counter_id >= Os_CfgGetCounterCnt() ) ) {\r
rv = E_OS_ID;\r
+ Irq_Restore(flags);\r
goto err;\r
}\r
\r
Os_AlarmCheck(cPtr);\r
Os_SchTblCheck(cPtr);\r
\r
+ Irq_Restore(flags);\r
+\r
/** @req OS321 */\r
COUNTER_STD_END;\r
}\r
OsPcbType *curr_pcb = get_curr_pcb();\r
StatusType rv = E_OK;\r
\r
+ OS_DEBUG(D_EVENT,"# WaitEvent %s\n",Os_TaskGetCurrent()->name);\r
+\r
if( os_sys.int_nest_cnt != 0 ) {\r
rv = E_OS_CALLEVEL;\r
goto err;\r
goto err;\r
}\r
\r
- if ( Os_TaskOccupiesResouces(curr_pcb) ) {\r
+ if ( Os_TaskOccupiesResources(curr_pcb) ) {\r
rv = E_OS_RESOURCE;\r
goto err;\r
}\r
curr_pcb->ev_wait = Mask;\r
\r
if ( Os_SchedulerResourceIsFree() ) {\r
- POSTTASKHOOK();\r
- Os_TaskMakeWaiting(curr_pcb);\r
- Os_Dispatch(0);\r
+ // Os_TaskMakeWaiting(curr_pcb);\r
+ Os_Dispatch(OP_WAIT_EVENT);\r
+ assert( curr_pcb->state & ST_RUNNING );\r
} else {\r
Os_TaskMakeWaiting(curr_pcb);\r
}\r
OsPcbType *currPcbPtr;\r
uint32_t flags;\r
\r
+ OS_DEBUG(D_EVENT,"# SetEvent %s\n",Os_TaskGetCurrent()->name);\r
+\r
if( TaskID >= Os_CfgGetTaskCnt() ) {\r
rv = E_OS_ID;\r
goto err;\r
\r
dest_pcb = os_get_pcb(TaskID);\r
\r
- if( (dest_pcb->state & ST_SUSPENDED ) ) {\r
- rv = E_OS_STATE;\r
+#if (OS_STATUS_EXTENDED == STD_ON )\r
+ if( dest_pcb->proc_type != PROC_EXTENDED ) {\r
+ rv = E_OS_ACCESS;\r
goto err;\r
}\r
\r
- if( dest_pcb->proc_type != PROC_EXTENDED ) {\r
- rv = E_OS_ACCESS;\r
+ if( (dest_pcb->state & ST_SUSPENDED ) ) {\r
+ rv = E_OS_STATE;\r
goto err;\r
}\r
+#endif\r
\r
Irq_Save(flags);\r
\r
(dest_pcb->prio > currPcbPtr->prio) &&\r
(Os_SchedulerResourceIsFree()) )\r
{\r
- Os_SetOp(OP_SET_EVENT);\r
- Os_Dispatch(0);\r
+ Os_Dispatch(OP_SET_EVENT);\r
}\r
\r
- } else if(dest_pcb->state & ST_READY ) {\r
+ } else if(dest_pcb->state & (ST_READY|ST_RUNNING) ) {\r
/* Hmm, we do nothing */\r
+ } else {\r
+ assert( 0 );\r
}\r
}\r
\r
\r
dest_pcb = os_get_pcb(TaskId);\r
\r
- VALIDATE_W_RV(dest_pcb->state & ST_SUSPENDED,E_OS_STATE);\r
VALIDATE_W_RV(dest_pcb->proc_type != PROC_EXTENDED,E_OS_ACCESS);\r
+ VALIDATE_W_RV(dest_pcb->state & ST_SUSPENDED,E_OS_STATE);\r
\r
*Mask = dest_pcb->ev_set;\r
\r
\r
\r
#define PRETASKHOOK() \\r
+ assert( os_sys.curr_pcb->state & ST_RUNNING ); \\r
+ assert( os_sys.curr_pcb->flags == SYS_FLAG_HOOK_STATE_EXPECTING_PRE ); \\r
+ os_sys.curr_pcb->flags = SYS_FLAG_HOOK_STATE_EXPECTING_POST; \\r
if( os_sys.hooks->PreTaskHook != NULL ) { \\r
os_sys.hooks->PreTaskHook(); \\r
}\r
\r
#define POSTTASKHOOK() \\r
+ assert( os_sys.curr_pcb->state & ST_RUNNING ); \\r
+ assert( os_sys.curr_pcb->flags == SYS_FLAG_HOOK_STATE_EXPECTING_POST ); \\r
+ os_sys.curr_pcb->flags = SYS_FLAG_HOOK_STATE_EXPECTING_PRE; \\r
if( os_sys.hooks->PostTaskHook != NULL ) { \\r
os_sys.hooks->PostTaskHook(); \\r
}\r
// resource.c\r
void Os_ResourceGetInternal(void );\r
void Os_ResourceReleaseInternal( void );\r
+void Os_ResourceAlloc( OsResourceType *rPtr, OsPcbType *pcbPtr);\r
+void Os_ResourceFree( OsResourceType *rPtr , OsPcbType *pcbPtr);\r
\r
void Os_ResourceInit( void );\r
\r
+\r
+static inline void Os_ResourceFreeAll( OsPcbType *pcbPtr ) {\r
+ OsResourceType *rPtr;\r
+\r
+ /* Pop the queue */\r
+ TAILQ_FOREACH(rPtr, &pcbPtr->resource_head, listEntry ) {\r
+ Os_ResourceFree(rPtr,pcbPtr);\r
+ }\r
+}\r
+\r
+#if 0\r
/**\r
*\r
* @return 1 - if any resources were found.\r
}\r
return rv;\r
}\r
+#endif\r
\r
-static inline _Bool Os_TaskOccupiesResouces( OsPcbType *pcb ) {\r
+static inline _Bool Os_TaskOccupiesResources( OsPcbType *pcb ) {\r
return !(TAILQ_EMPTY(&pcb->resource_head));\r
}\r
\r
+/*\r
static inline void Os_GetSchedulerResource() {\r
os_sys.scheduler_lock = 1;\r
}\r
static inline void Os_ReleaseSchedulerResource() {\r
os_sys.scheduler_lock = 0;\r
}\r
-\r
+*/\r
+/*\r
static inline _Bool Os_SchedulerResourceIsOccupied() {\r
+#if 0\r
+ return (os_sys.resScheduler.owner != NO_TASK_OWNER );\r
+#else\r
return (os_sys.scheduler_lock == 1);\r
+#endif\r
}\r
+*/\r
+#define NO_TASK_OWNER (TaskType)(~0)\r
\r
static inline _Bool Os_SchedulerResourceIsFree() {\r
+#if 1\r
+ return (os_sys.resScheduler.owner == NO_TASK_OWNER );\r
+#else\r
return (os_sys.scheduler_lock == 0);\r
+#endif\r
}\r
\r
// Create.c\r
void OsTick( void );\r
\r
void *Os_Isr( void *stack, void *pcb_p );\r
-void Os_Dispatch( _Bool force );\r
+void Os_Dispatch( uint32_t op );\r
\r
#define STACK_PATTERN 0x42\r
\r
uint8_t *end = pcbPtr->stack.top;\r
rv = ( *end == STACK_PATTERN);\r
if( !rv ) {\r
- OS_DEBUG(D_TASK,"Stack End Mark is bad for %s curr: %08x curr: %08x\n",\r
+ OS_DEBUG(D_TASK,"Stack End Mark is bad for %s curr: %p curr: %p\n",\r
pcbPtr->name,\r
pcbPtr->stack.curr,\r
pcbPtr->stack.top );\r
# define OS_DEBUG(_mask,...) \\r
do { \\r
if( os_dbg_mask & (_mask) ) { \\r
- printf("[%08u] : ",(unsigned)GetOsTick()); \\r
+ printf("[%08u] : %s %d ",(unsigned)GetOsTick(), __FUNCTION__, __LINE__ ); \\r
printf(__VA_ARGS__ ); \\r
}; \\r
} while(0);\r
} OsStackType;\r
\r
\r
-\r
+#define SYS_FLAG_HOOK_STATE_EXPECTING_PRE 0\r
+#define SYS_FLAG_HOOK_STATE_EXPECTING_POST 1\r
\r
/* We do ISR and TASK the same struct for now */\r
typedef struct OsPcb {\r
OsEventType ev_wait; // TASK\r
OsEventType ev_set; // TASK\r
\r
+ uint32_t flags;\r
+\r
enum OsTaskSchedule scheduling; // TASK\r
/* belongs to this application */\r
struct OsApplication *application;\r
\r
// What resource that are currently held by this task\r
// Typically (1<<RES_xxx) | (1<<RES_yyy)\r
-// uint32_t resourceHolds;\r
+ uint32_t resourceMaskTaken;\r
\r
- TAILQ_HEAD(,OsResource) resource_head; // TASK\r
+ TAILQ_HEAD(head,OsResource) resource_head; // TASK\r
\r
const struct OsRomPcb *pcb_rom_p;\r
\r
\r
struct os_conf_global_hook_s;\r
\r
-#define OP_SET_EVENT 1\r
-#define OP_ACTIVATE_TASK 2\r
-\r
+typedef enum {\r
+ OP_SET_EVENT = 1,\r
+ OP_WAIT_EVENT = 2,\r
+ OP_ACTIVATE_TASK = 4,\r
+ OP_TERMINATE_TASK = 8,\r
+ OP_SCHEDULE = 16,\r
+ OP_CHAIN_TASK = 32,\r
+ OP_RELEASE_RESOURCE = 64,\r
+} OpType ;\r
\r
typedef struct sys_s {\r
// OsApplicationType *curr_application;\r
OsPcbType *curr_pcb;\r
/* List of all tasks */\r
OsPcbType *pcb_list;\r
+\r
+ OsPcbType *chainedPcbPtr;\r
/* Interrupt nested count */\r
uint32 int_nest_cnt;\r
/* The current operation */\r
// The os tick\r
TickType tick;\r
// 1-The scheduler is locked (by GetResource() or something else)\r
- int scheduler_lock;\r
+// int scheduler_lock;\r
/* Hooks */\r
struct OsHooks *hooks;\r
\r
/* Current Application mode */\r
AppModeType appMode;\r
\r
+// uint32_t flags;\r
+\r
uint32_t task_cnt;\r
/* List of all pcb's,\r
* Only needed for non-static configuration of the kernel\r
TAILQ_HEAD(,OsPcb) pcb_head;\r
/* Ready queue */\r
TAILQ_HEAD(,OsPcb) ready_head;\r
+\r
+ /* Occording to OSEK 8.3 RES_SCHEDULER is accessible to all tasks */\r
+ OsResourceType resScheduler;\r
} sys_t;\r
\r
extern sys_t os_sys;\r
\r
-static inline void Os_SetOp( uint8_t op) {\r
- os_sys.op = op;\r
-}\r
-\r
-static inline uint8_t Os_GetOp( void ) {\r
- return os_sys.op;\r
-}\r
-\r
static inline OsPcbType *Os_TaskGetCurrent( void ) {\r
return os_sys.curr_pcb;\r
}\r
// ActivateTask(pid)\r
// SetEvent(pid)\r
static inline void Os_TaskMakeReady( OsPcbType *pcb ) {\r
- if( pcb->state != ST_READY ) {\r
+ if( !( pcb->state & ( ST_READY | ST_RUNNING )) ) {\r
pcb->state = ST_READY;\r
TAILQ_INSERT_TAIL(& os_sys.ready_head,pcb,ready_list);\r
OS_DEBUG(D_TASK,"Added %s to ready list\n",pcb->name);\r
\r
#define os_pcb_get_state(pcb) ((pcb)->state)\r
\r
-void os_swap_context(OsPcbType *old_pcb, OsPcbType *new_pcb );\r
+void Os_TaskSwapContext(OsPcbType *old_pcb, OsPcbType *new_pcb );\r
void Os_TaskSwapContextTo(OsPcbType *old_pcb, OsPcbType *new_pcb );\r
\r
\r
// pcb->app = &app_list[r_pcb->app];
// pcb->app_mask = app_mask[r_pcb->app];
strncpy(pcb->name,r_pcb->name,16);
+ pcb->name[15] = '\0';
}
static _Bool init_os_called = 0;
os_sys.curr_pcb = tmp_pcb;
// register this auto-start activation
- if (tmp_pcb->proc_type == PROC_BASIC) {
- assert(tmp_pcb->activations < tmp_pcb->activationLimit);
- tmp_pcb->activations++;
- }
+ assert(tmp_pcb->activations < tmp_pcb->activationLimit);
+ tmp_pcb->activations++;
// NOTE! We don't go for os_swap_context() here..
// first arg(NULL) is dummy only
return Os_AddTask(pcb);
}
+/**
+ * Before we have proper editor for ISR2 use this function to add resources
+ * to an ISR2
+ *
+ * @param isr
+ * @param resource
+ * @return
+ */
+StatusType Os_IsrAddResource( TaskType isr, ResourceType resource ) {
+ return E_OK;
+}
#if defined(CFG_ARM_CM3)
extern void Irq_EOI2( void );
* @param stack Ptr to the current stack
* @param vector The vector that took the interrupt
*/
-void *Os_Isr( void *stack, void *pcb_p ) {
- struct OsPcb *pcb;
- struct OsPcb *preempted_pcb;
+void *Os_Isr( void *stack, void *isr_p ) {
+ struct OsPcb *isrPtr;
+ struct OsPcb *pPtr = NULL;
os_sys.int_nest_cnt++;
- // Save info for preempted pcb
- preempted_pcb = get_curr_pcb();
- preempted_pcb->stack.curr = stack;
- preempted_pcb->state = ST_READY;
- OS_DEBUG(D_TASK,"Preempted %s\n",preempted_pcb->name);
-
- Os_StackPerformCheck(preempted_pcb);
+ /* Check if we interrupted a task or ISR */
+ if( os_sys.int_nest_cnt == 1 ) {
+ /* We interrupted a task */
+ POSTTASKHOOK();
- POSTTASKHOOK();
+ /* Save info for preempted pcb */
+ pPtr = get_curr_pcb();
+ pPtr->stack.curr = stack;
+ pPtr->state = ST_READY;
+ OS_DEBUG(D_TASK,"Preempted %s\n",pPtr->name);
- pcb = (struct OsPcb *)pcb_p;
- pcb->state = ST_RUNNING;
- set_curr_pcb(pcb);
+ Os_StackPerformCheck(pPtr);
+ } else {
+ /* We interrupted an ISR */
+ }
- PRETASKHOOK();
+ /* Grab the ISR "pcb" */
+ isrPtr = (struct OsPcb *)isr_p;
+ isrPtr->state = ST_RUNNING;
- // We should not get here if we're NON
- if( pcb->scheduling == NON) {
- // TODO:
- // assert(0);
- while(1);
+ if( isrPtr->proc_type & ( PROC_EXTENDED | PROC_BASIC ) ) {
+ assert(0);
}
Irq_SOI();
#ifndef CFG_HCS12D
Irq_Enable();
- pcb->entry();
+ isrPtr->entry();
Irq_Disable();
#else
- pcb->entry();
+ isrPtr->entry();
#endif
+ /* Check so that ISR2 haven't disabled the interrupts */
/** @req OS368 */
if( Os_IrqAnyDisabled() ) {
Os_IrqClearAll();
ERRORHOOK(E_OS_DISABLEDINT);
}
+ /* Check so that the ISR2 have called ReleaseResource() for each GetResource() */
/** @req OS369 */
- Os_ResourceCheckAndRelease(pcb);
+ if( Os_TaskOccupiesResources(isrPtr) ) {
+ Os_ResourceFreeAll(isrPtr);
+ ERRORHOOK(E_OS_RESOURCE);
+ }
- pcb->state = ST_SUSPENDED;
- POSTTASKHOOK();
+ isrPtr->state = ST_SUSPENDED;
Irq_EOI();
--os_sys.int_nest_cnt;
- // TODO: Check stack check marker....
// We have preempted a task
- if( (os_sys.int_nest_cnt == 0) && (os_sys.scheduler_lock==0) ) { //&& is_idle_task() ) {
- /* If we get here:
- * - the preempted task is saved with large context.
- * - We are on interrupt stack..( this function )
- *
- * if we find a new task:
- * - just switch in the new context( don't save the old because
- * its already saved )
- */
- OsPcbType *new_pcb;
- new_pcb = Os_TaskGetTop();
+ if( (os_sys.int_nest_cnt == 0) ) {
+
+ OsPcbType *new_pcb = Os_TaskGetTop();
Os_StackPerformCheck(new_pcb);
- if( new_pcb != preempted_pcb ) {
+ if( (new_pcb == os_sys.curr_pcb) ||
+ (os_sys.curr_pcb->scheduling == NON) ||
+ !Os_SchedulerResourceIsFree() )
+ {
+ /* Just bring the preempted task back to running */
+ os_sys.curr_pcb->state = ST_RUNNING;
+ PRETASKHOOK();
+ } else {
OS_DEBUG(D_TASK,"Found candidate %s\n",new_pcb->name);
-//#warning Os_TaskSwapContextTo should call the pretaskswaphook
-// TODO: This shuould go away!!!!
#if defined(CFG_ARM_CM3)
Irq_EOI2();
#endif
Os_TaskSwapContextTo(NULL,new_pcb);
- } else {
- if( new_pcb == NULL ) {
- assert(0);
- }
- preempted_pcb->state = ST_RUNNING;
- set_curr_pcb(preempted_pcb);
}
} else {
- set_curr_pcb(preempted_pcb);
- PRETASKHOOK();
+ /* We have a nested interrupt, do nothing */
}
return stack;
\r
#VPATH += $(ROOTDIR)/arch/arm/arm_cm3/kernel\r
vpath-y += $(ARCH_PATH-y)/kernel\r
-#obj-y += asm_sample.o\r
+obj-y += asm_sample.o\r
#CFLAGS_asm_sample.o += -O3\r
obj-y += arch_krn.o\r
obj-$(CFG_HCS12D) += arch_irq.o\r
#obj-y += stack.o\r
obj-y += isr.o\r
obj-y += os_arctest.o\r
-#obj-y += application.o\r
+obj-y += application.o\r
\r
\r
# These are VERY cpu dependent.. remove\r
\r
#include "Os.h"\r
#include "internal.h"\r
+#include <assert.h>\r
+#include <string.h>\r
+\r
\r
#if !defined(MAX)\r
#define MAX(_x,_y) (((_x) > (_y)) ? (_x) : (_y))\r
#endif\r
\r
+\r
+/*\r
+Resource management at interrupt level is NOT supported\r
+\r
+\r
+Testing\r
+RM:\r
+1. Priority ceiling: Call GetResource() from preemtive\r
+ task and activate a task with higher priority than the ceiling protocol.\r
+ The higher priority task should be swapped in.\r
+2. Verify that you cannot allocate an internal resource with\r
+ a) GetResource()\r
+ b) ReleaseResource()\r
+3. Internal resource. Allocate 1 internal resource to 3 tasks of different\r
+ priorities. Verify that\r
+ a) Higher priority tasks than the group can preement\r
+ b) For tasks which have the same or lower priority as the highest priority within a group,\r
+ the tasks within the group behave like non preemptable tasks ( OSEK 4.6.3)\r
+4. Attempt to release a resource which has a lower ceiling priority\r
+ than the statically assigned priority of the calling task or\r
+ interrupt routine, E_OS_ACCESS\r
+5. The general restriction on some system calls that they are not to be called with resources\r
+ occupied (chapter 8.2) does not apply to internal resources, as internal resources are handled\r
+ within those calls. However, all standard resources have to be released before the internal\r
+ resource can be released (see chapter 8.2, \93LIFO principle\94).\r
+6. Check LIFO order. Return E_OS_ACCESS if not in LIFO order..\r
+7. Test Os_IsrAddResource().\r
+\r
+\r
+task\r
+- GetResource(RES_SCHEDULER) will lock the scheduler even for ISR2\r
+\r
+TODO:\r
+1. task.resourceAccess is already calculated by BSW builder. This is the bitmask\r
+ of what resources is accessable by the task.\r
+2.\r
+\r
+ task.rsrcAccessMask & (1 << RES_SCHEDULER)\r
+\r
+ *
+ */\r
+\r
/* INFO\r
* - If OsTaskSchedule = NON, Task it not preemptable, no internal resource may be assigned to a task\r
* (cause it already have one of prio 32)\r
#define valid_internal_id() (rPtr->nr < Os_CfgGetResourceCnt()) //&& (rPtr->type == RESOURCE_TYPE_INTERNAL) )\r
\r
\r
-static StatusType GetResource_( OsResourceType * );\r
-StatusType ReleaseResource_( OsResourceType * );\r
+void Os_ResourceAlloc( OsResourceType *rPtr, OsPcbType *pcbPtr) {\r
+ /* Save old task prio in resource and set new task prio */\r
+ rPtr->owner = pcbPtr->pid;\r
+ rPtr->old_task_prio = pcbPtr->prio;\r
+ pcbPtr->prio = rPtr->ceiling_priority;\r
+\r
+ if( rPtr->type != RESOURCE_TYPE_INTERNAL ) {\r
+ TAILQ_INSERT_TAIL(&pcbPtr->resource_head, rPtr, listEntry);\r
+ }\r
+}\r
+\r
+void Os_ResourceFree( OsResourceType *rPtr , OsPcbType *pcbPtr) {\r
+ assert( rPtr->owner == pcbPtr->pid );\r
+ rPtr->owner = NO_TASK_OWNER;\r
+ pcbPtr->prio = rPtr->old_task_prio;\r
+\r
+ if( rPtr->type != RESOURCE_TYPE_INTERNAL ) {\r
+ /* The list can't be empty here */\r
+ assert( !TAILQ_EMPTY(&pcbPtr->resource_head) );\r
+\r
+ /* The list should be popped in LIFO order */\r
+ assert( TAILQ_LAST(&pcbPtr->resource_head, head) == rPtr );\r
+\r
+ /* Remove the entry */\r
+ TAILQ_REMOVE(&pcbPtr->resource_head, rPtr, listEntry);\r
+ }\r
+}\r
\r
/**\r
* This call serves to enter critical sections in the code that are\r
* @param ResID\r
* @return\r
*/\r
+\r
+\r
StatusType GetResource( ResourceType ResID ) {\r
StatusType rv = E_OK;\r
+ OsPcbType *pcbPtr = Os_TaskGetCurrent();\r
+ OsResourceType *rPtr;\r
+ uint32_t flags;\r
+\r
+ Irq_Save(flags);\r
\r
if( ResID == RES_SCHEDULER ) {\r
- if ( Os_SchedulerResourceIsOccupied() ) {\r
- rv = E_OS_ACCESS;\r
- goto err;\r
- } else {\r
- Os_GetSchedulerResource();\r
- }\r
+\r
+ rPtr = &os_sys.resScheduler;\r
} else {\r
- if (ResID >= Os_CfgGetResourceCnt()) {\r
+ /* Check we can access it */\r
+ if( (pcbPtr->resourceAccess & (1<< ResID)) == 0 ) {\r
rv = E_OS_ID;\r
goto err;\r
}\r
\r
- OsResourceType *rPtr = Os_CfgGetResource(ResID);\r
- rv = GetResource_(rPtr);\r
+ rPtr = Os_CfgGetResource(ResID);\r
+ }\r
+\r
+ /* Check for invalid configuration */\r
+ if( (rPtr->owner != NO_TASK_OWNER) ||\r
+ (pcbPtr->prio > rPtr->ceiling_priority) )\r
+ {\r
+ rv = E_OS_ACCESS;\r
+ Irq_Restore(flags);\r
+ goto err;\r
}\r
\r
+ Os_ResourceAlloc(rPtr,pcbPtr);\r
+ Irq_Restore(flags);\r
+\r
if (rv != E_OK)\r
goto err;\r
\r
*/\r
\r
StatusType ReleaseResource( ResourceType ResID) {\r
- StatusType rv = E_OK;\r
+ StatusType rv = E_OK;\r
+ OsPcbType *pcbPtr = Os_TaskGetCurrent();\r
+ OsResourceType *rPtr;\r
+ uint32_t flags;\r
\r
+ Irq_Save(flags);\r
if( ResID == RES_SCHEDULER ) {\r
- if ( Os_SchedulerResourceIsFree() ) {\r
- rv = E_OS_NOFUNC;\r
- goto err;\r
- } else {\r
- Os_ReleaseSchedulerResource();\r
- }\r
+ rPtr = &os_sys.resScheduler;\r
} else {\r
- if (ResID >= Os_CfgGetResourceCnt()) {\r
+ /* Check we can access it */\r
+ if( (pcbPtr->resourceAccess & (1<< ResID)) == 0 ) {\r
rv = E_OS_ID;\r
goto err;\r
}\r
-\r
- OsResourceType *rPtr = Os_CfgGetResource(ResID);\r
- rv = ReleaseResource_(rPtr);\r
- }\r
-\r
- if (rv != E_OK)\r
- goto err;\r
-\r
- /* do a rescheduling (in some cases) (see OSEK OS 4.6.1) */\r
- if ( (Os_TaskGetCurrent()->scheduling == FULL) &&\r
- (os_sys.int_nest_cnt == 0) &&\r
- (Os_SchedulerResourceIsFree()) ) {\r
-\r
- OsPcbType* top_pcb = Os_TaskGetTop();\r
-\r
- /* only dispatch if some other ready task has higher prio */\r
- if (top_pcb->prio > Os_TaskGetCurrent()->prio) {\r
- long flags;\r
- Irq_Save(flags);\r
- Os_Dispatch(0);\r
- Irq_Restore(flags);\r
- }\r
- }\r
-\r
- OS_STD_END_1(OSServiceId_ReleaseResource,ResID);\r
-}\r
-\r
-\r
-/**\r
- * Internal GetResource function...\r
- *\r
- * @param rPtr\r
- * @return\r
- */\r
-\r
-static StatusType GetResource_( OsResourceType * rPtr ) {\r
- StatusType rv = E_OK;\r
-\r
- if( rPtr->nr == RES_SCHEDULER ) {\r
- // Lock the scheduler\r
- os_sys.scheduler_lock = 1;\r
+ rPtr = Os_CfgGetResource(ResID);\r
}\r
\r
- /* Check if valid resource */\r
- if( !valid_standard_id() ) {\r
- rv = E_OS_ID;\r
+ /* Check for invalid configuration */\r
+ if( rPtr->owner == NO_TASK_OWNER)\r
+ {\r
+ rv = E_OS_NOFUNC;\r
+ Irq_Restore(flags);\r
goto err;\r
}\r
\r
- /* check if we have access\r
- * TODO: This gives access to all resources for ISR2s but we should respect the OsIsrResourceRef [0..*] here.\r
- */\r
- if ( Os_TaskGetCurrent()->proc_type != PROC_ISR2) {\r
- if ( !(Os_TaskGetCurrent()->resourceAccess & (1 << rPtr->nr)) ) {\r
- rv = E_OS_ACCESS;\r
- goto err;\r
- }\r
- }\r
-\r
- /* @req OSEK\r
- * Attempt to get a resource which is already occupied by any task\r
- * or ISR, or the statically assigned priority of the calling task or\r
- * interrupt routine is higher than the calculated ceiling priority,\r
- * E_OS_ACCESS\r
- */\r
- if( (Os_TaskGetCurrent()->prio > rPtr->ceiling_priority )\r
-#if ( OS_SC3 == STD_ON ) || ( OS_SC4 == STD_ON )\r
- || ( get_curr_application_id() != rPtr->application_owner_id)\r
-#endif\r
- || ( rPtr->owner != (TaskType)(-1)))\r
+ if( (pcbPtr->prio < rPtr->ceiling_priority))\r
{\r
rv = E_OS_ACCESS;\r
+ Irq_Restore(flags);\r
goto err;\r
}\r
\r
- rPtr->owner = get_curr_pid();\r
- rPtr->old_task_prio = os_pcb_set_prio(Os_TaskGetCurrent() ,rPtr->ceiling_priority);\r
-\r
- if( rPtr->type != RESOURCE_TYPE_INTERNAL ) {\r
- TAILQ_INSERT_TAIL(&Os_TaskGetCurrent()->resource_head, rPtr, listEntry);\r
- }\r
-\r
- goto ok;\r
-err:\r
- ERRORHOOK(rv);\r
-ok:\r
- return rv;\r
-}\r
+ Os_ResourceFree(rPtr,pcbPtr);\r
\r
+ /* do a rescheduling (in some cases) (see OSEK OS 4.6.1) */\r
+ if ( (pcbPtr->scheduling == FULL) &&\r
+ (os_sys.int_nest_cnt == 0) &&\r
+ (Os_SchedulerResourceIsFree()) ) {\r
\r
-/**\r
- * Internal release resource..\r
- * @param rPtr\r
- * @return\r
- */\r
-StatusType ReleaseResource_( OsResourceType * rPtr ) {\r
- if (!valid_standard_id()) {\r
- return E_OS_ID;\r
- }\r
+ OsPcbType* top_pcb = Os_TaskGetTop();\r
\r
- /* check if we have access\r
- * TODO: This gives access to all resources for ISR2s but we should respect the OsIsrResourceRef [0..*] here.\r
- */\r
- if ( Os_TaskGetCurrent()->proc_type != PROC_ISR2) {\r
- if ( !(Os_TaskGetCurrent()->resourceAccess & (1 << rPtr->nr)) ) {\r
- return E_OS_ACCESS;\r
+ /* only dispatch if some other ready task has higher prio */\r
+ if (top_pcb->prio > Os_TaskGetCurrent()->prio) {\r
+ Os_Dispatch(OP_RELEASE_RESOURCE);\r
}\r
}\r
+ Irq_Restore(flags);\r
\r
- /* if we are not holding this resource */\r
- if (rPtr->owner != Os_TaskGetCurrent()->pid) {\r
- return E_OS_NOFUNC;\r
- }\r
-\r
- // Release it...\r
- rPtr->owner = (TaskType) (-1);\r
- TAILQ_REMOVE(&Os_TaskGetCurrent()->resource_head, rPtr, listEntry);\r
- os_pcb_set_prio(Os_TaskGetCurrent(), rPtr->old_task_prio);\r
- return E_OK;\r
+ OS_STD_END_1(OSServiceId_ReleaseResource,ResID);\r
}\r
\r
\r
void Os_ResourceGetInternal( void ) {\r
- OsResourceType *rt = os_get_resource_int_p();\r
+ OsPcbType *pcbPtr = Os_TaskGetCurrent();\r
+ OsResourceType *rt = pcbPtr->resource_int_p;\r
\r
if( rt != NULL ) {\r
OS_DEBUG(D_RESOURCE,"Get IR proc:%s prio:%u old_task_prio:%u\n",\r
get_curr_pcb()->name,\r
(unsigned)rt->ceiling_priority,\r
(unsigned)rt->old_task_prio);\r
- GetResource_(rt);\r
+ Os_ResourceAlloc(rt,pcbPtr);\r
}\r
}\r
\r
void Os_ResourceReleaseInternal( void ) {\r
- OsResourceType *rt = os_get_resource_int_p();\r
+ OsPcbType *pcbPtr = Os_TaskGetCurrent();\r
+ OsResourceType *rt = pcbPtr->resource_int_p;\r
\r
if( rt != NULL ) {\r
OS_DEBUG(D_RESOURCE,"Rel IR proc:%s prio:%u old_task_prio:%u\n",\r
get_curr_pcb()->name,\r
(unsigned)rt->ceiling_priority,\r
(unsigned)rt->old_task_prio);\r
- ReleaseResource_(rt);\r
+ Os_ResourceFree(rt,pcbPtr);\r
}\r
}\r
\r
OsResourceType *rsrc_p;\r
int topPrio;\r
\r
+\r
+ /* For now, assign the scheduler resource here */\r
+ os_sys.resScheduler.ceiling_priority = OS_RES_SCHEDULER_PRIO;\r
+ strcpy(os_sys.resScheduler.id,"RES_SCHEDULER");\r
+ os_sys.resScheduler.nr = RES_SCHEDULER;\r
+ os_sys.resScheduler.owner = NO_TASK_OWNER;\r
+\r
/* Calculate ceiling priority\r
* We make this as simple as possible. The ceiling priority\r
* is set to the same priority as the highest priority task that\r
* access it.\r
+ *\r
+ * Note that this applies both internal and standard resources.\r
* */\r
for( int i=0; i < Os_CfgGetResourceCnt(); i++) {\r
rsrc_p = Os_CfgGetResource(i);\r
for( int pi = 0; pi < Os_CfgGetTaskCnt(); pi++) {\r
\r
pcb_p = os_get_pcb(pi);\r
+\r
+\r
if(pcb_p->resourceAccess & (1<<i) ) {\r
topPrio = MAX(topPrio,pcb_p->prio);\r
}\r
- }\r
- rsrc_p->ceiling_priority = topPrio;\r
- }\r
-\r
\r
-\r
- /* From OSEK:\r
- * Non preemptable tasks are the most common usage of the concept\r
- * of internal resources; they are tasks with a special internal\r
- * resource of highest task priority assigned.\r
- * --> Interpret this as we can set the priority to 32.\r
- *\r
- * Assign an internal resource with prio 32 to the tasks\r
- * with scheduling=NON\r
- *\r
- *\r
- */\r
-#if 0\r
- for( int i=0; i < Os_CfgGetTaskCnt(); i++) {\r
- pcb_p = os_get_pcb(i);\r
- if(pcb_p->scheduling == NON ) {\r
- pcb_p->prio = OS_RES_SCHEDULER_PRIO;\r
+ /* Generator fix, add RES_SCHEDULER */\r
+ pcb_p->resourceAccess |= (1 << RES_SCHEDULER) ;\r
}\r
+ rsrc_p->ceiling_priority = topPrio;\r
}\r
-#endif\r
}\r
\r
*\r
*/\r
void Os_TaskStartExtended( void ) {\r
+\r
OsPcbType *pcb;\r
\r
pcb = Os_TaskGetCurrent();\r
+#if 0\r
Os_ResourceGetInternal();\r
Os_TaskMakeRunning(pcb);\r
+#endif\r
\r
- PRETASKHOOK();\r
+// PRETASKHOOK();\r
\r
Os_ArchFirstCall();\r
\r
+ /* We got back without any TerminateTask() or ChainTask()\r
+ *\r
+ * OSEK:\r
+ * Each task shall terminate itself at the end of its code.\r
+ * Ending the task without a call to TerminateTask or ChainTask\r
+ * is strictly forbidden and causes undefined behaviour.\r
+ *\r
+ * Autosar:\r
+ * OS052, OS069, OS070 and OS239\r
+ * */\r
+\r
/** @req OS239 */\r
Irq_Disable();\r
if( Os_IrqAnyDisabled() ) {\r
Os_IrqClearAll();\r
}\r
\r
-// TODO:Dont I have to check this at terminate task also?\r
+ /** @req OS070 */\r
+ if( Os_TaskOccupiesResources(pcb) ) {\r
+ Os_ResourceFreeAll(pcb);\r
+ }\r
\r
/** @req OS069 */\r
ERRORHOOK(E_OS_MISSINGEND);\r
*/\r
\r
void Os_TaskStartBasic( void ) {\r
+\r
OsPcbType *pcb;\r
\r
pcb = Os_TaskGetCurrent();\r
+#if 0\r
Os_ResourceGetInternal();\r
Os_TaskMakeRunning(pcb);\r
+#endif\r
\r
- PRETASKHOOK();\r
+// PRETASKHOOK();\r
\r
Os_ArchFirstCall();\r
\r
-\r
/** @req OS239 */\r
Irq_Disable();\r
if( Os_IrqAnyDisabled() ) {\r
Os_IrqClearAll();\r
}\r
\r
+ /** @req OS070 */\r
+ if( Os_TaskOccupiesResources(pcb) ) {\r
+ Os_ResourceFreeAll(pcb);\r
+ }\r
+\r
/** @req OS069 */\r
ERRORHOOK(E_OS_MISSINGEND);\r
\r
OsPcbType *top_prio_pcb = NULL;\r
OsPriorityType top_prio = PRIO_ILLEGAL;\r
\r
- OS_DEBUG(D_TASK,"os_find_top_prio_proc\n");\r
+// OS_DEBUG(D_TASK,"os_find_top_prio_proc\n");\r
\r
TAILQ_FOREACH(i_pcb,& os_sys.ready_head,ready_list) {\r
// all ready task are canidates\r
* @param force Force a re-scheduling\r
*\r
*/\r
-void Os_Dispatch( _Bool force ) {\r
+void Os_Dispatch( uint32_t op ) {\r
OsPcbType *pcbPtr;\r
- OsPcbType *currPcbPtr;\r
- (void)force;\r
+ OsPcbType *currPcbPtr = Os_TaskGetCurrent();\r
\r
assert(os_sys.int_nest_cnt == 0);\r
- assert(os_sys.scheduler_lock == 0 );\r
+ assert(Os_SchedulerResourceIsFree());\r
+\r
+ /* When calling post hook we must still be in ST_RUNNING */\r
+ assert( currPcbPtr->state & ST_RUNNING );\r
+ POSTTASKHOOK();\r
+\r
+ /* Go the correct state for running task */\r
+ if( op & ( OP_SET_EVENT | OP_SCHEDULE | OP_RELEASE_RESOURCE )) {\r
+ Os_TaskRunningToReady(currPcbPtr);\r
+ } else if( op & OP_WAIT_EVENT ) {\r
+ Os_TaskMakeWaiting(currPcbPtr);\r
+ } else if( op & OP_ACTIVATE_TASK ) {\r
+ Os_TaskMakeReady(currPcbPtr);\r
+ } else if( op & OP_CHAIN_TASK ) {\r
+ assert( os_sys.chainedPcbPtr != NULL );\r
+\r
+ /* # from chain top\r
+ * ----------------------------------------------------------\r
+ * 1 1 1 1 1->RUNNING\r
+ * 2 1 1 2 1->READY, 2->RUNNING\r
+ * 3 1 2 2 1->SUSPENDED/READY*, 2->RUNNING\r
+ * 4 1 2 3 1->SUSPENDED/READY*, 2->READY , 3-RUNNING\r
+ *\r
+ * *) Depends on the number of activations.\r
+ *\r
+ * - Chained task is always READY when coming from ChainTask()\r
+ */\r
+ if( currPcbPtr != os_sys.chainedPcbPtr ) {\r
+ /* #3 and #4 */\r
+ --currPcbPtr->activations;\r
+ if( currPcbPtr->activations <= 0 ) {\r
+ currPcbPtr->activations = 0;\r
+ Os_TaskMakeSuspended(currPcbPtr);\r
+ } else {\r
+ Os_TaskRunningToReady(currPcbPtr);\r
+ }\r
+ /* Chained task is already in READY */\r
+ }\r
+ os_sys.chainedPcbPtr = NULL;\r
+\r
+ } else if( op & OP_TERMINATE_TASK ) {\r
+ /*@req OSEK TerminateTask\r
+ * In case of tasks with multiple activation requests,\r
+ * terminating the current instance of the task automatically puts the next\r
+ * instance of the same task into the ready state\r
+ */\r
+ --currPcbPtr->activations;\r
+\r
+ if( currPcbPtr->activations <= 0 ) {\r
+ currPcbPtr->activations = 0;\r
+ Os_TaskMakeSuspended(currPcbPtr);\r
+ }\r
+ } else {\r
+ assert(0);\r
+ }\r
\r
pcbPtr = Os_TaskGetTop();\r
- currPcbPtr = Os_TaskGetCurrent();\r
+\r
+\r
+\r
/* Swap if we found any process or are forced (multiple activations)*/\r
if( pcbPtr != currPcbPtr ) {\r
\r
- /* Add us to the ready list */\r
- if( currPcbPtr->state & ST_RUNNING ) {\r
- /** @req OS052 */\r
- POSTTASKHOOK();\r
+ if( (op & OP_CHAIN_TASK) && ( currPcbPtr == os_sys.chainedPcbPtr ) ) {\r
+ /* #2 */\r
Os_TaskRunningToReady(currPcbPtr);\r
}\r
-\r
/*\r
* Swap context\r
*/\r
#endif\r
}\r
#endif\r
+ OS_DEBUG(D_TASK,"Swapping to: %s\n",pcbPtr->name);\r
+ Os_TaskSwapContext(currPcbPtr,pcbPtr);\r
\r
- Os_ArchSwapContext(currPcbPtr,pcbPtr);\r
+ /* ActivateTask, SetEvent, Schedule, .. */\r
+// pcbPtr = Os_TaskGetCurrent();\r
+// Os_TaskMakeRunning(pcbPtr);\r
+// PRETASKHOOK();\r
\r
- pcbPtr = Os_TaskGetCurrent();\r
- Os_TaskMakeRunning(pcbPtr);\r
-\r
- Os_ResourceGetInternal();\r
-\r
- PRETASKHOOK();\r
+// Os_ResourceGetInternal();\r
\r
} else {\r
- if( Os_GetOp() != OP_SET_EVENT ) {\r
-\r
- /* We want to run the same task, again. This only happens\r
- * when we have multiple activation of a basic task (\r
- * extended tasks have an activation limit of 1)\r
- */\r
-\r
- /* Setup the stack again, and just call the basic task */\r
- Os_StackSetup(pcbPtr);\r
- Os_ArchSetSpAndCall(pcbPtr->stack.curr,Os_TaskStartBasic);\r
- } else {\r
- /* Two cases:\r
- * 1. SetEvent() on itself\r
- * 2. SetEvent()\r
- *\r
- *\r
- * */\r
-\r
- }\r
+ OS_DEBUG(D_TASK,"Continuing task %s\n",pcbPtr->name);\r
+ /* Setup the stack again, and just call the basic task */\r
+ Os_StackSetup(pcbPtr);\r
+ /* TODO: release and get the internal resource ? */\r
+ Os_TaskMakeRunning(pcbPtr);\r
+ PRETASKHOOK();\r
+ Os_ArchSetSpAndCall(pcbPtr->stack.curr,Os_TaskStartBasic);\r
+ assert(0);\r
}\r
}\r
\r
-// We come here from\r
-// - os_init\r
\r
-/**\r
- * Called when a task is to be run for the first time.\r
+/*\r
+ * Thoughts on task switching and memory protection\r
+ *\r
+ * If we would have had memory protection:\r
+ * - Applications have their own MMU settings.\r
+ * - Swapping between tasks in same Application does NOT involve the MMU.\r
+ * - When running a non-trusted Application I need will have to:\r
+ * - Run kernel in supervisor mode.\r
+ * - Trap the start of each task\r
+ * - All calls to the kernel will have a trap interface, i.e. Os_ResourceGetInternal(ActivateTask(TASK_ID_foo);\r
+ * - An ISR2:\r
+ * - The interupt is taken, the kernel runs in supervisor mode\r
+ * - If the ISR2 activates\r
+ *\r
+ * Stack design:\r
+ * ALT1: 1 kernel stack...\r
+ * ALT2:\r
+ *\r
+ * Do we need virtual memory??\r
*/\r
-void Os_TaskSwapContextTo(OsPcbType *old_pcb, OsPcbType *new_pcb ) {\r
\r
+void Os_TaskSwapContext(OsPcbType *old_pcb, OsPcbType *new_pcb ) {\r
+ set_curr_pcb(new_pcb);\r
+ Os_ResourceGetInternal();\r
+ Os_TaskMakeRunning(new_pcb);\r
+ /* TODO: The pretask hook is not called with the right stack\r
+ * (it's called on the old task stack, not the new ) */\r
+ PRETASKHOOK();\r
+ Os_ArchSwapContext(old_pcb,new_pcb);\r
+}\r
+\r
+void Os_TaskSwapContextTo(OsPcbType *old_pcb, OsPcbType *new_pcb ) {\r
+ set_curr_pcb(new_pcb);\r
+ Os_ResourceGetInternal();\r
+ Os_TaskMakeRunning(new_pcb);\r
+ PRETASKHOOK();\r
Os_ArchSwapContextTo(old_pcb,new_pcb);\r
- /* TODO: When do we return here ?? */\r
+ assert(0);\r
}\r
\r
\r
}\r
\r
\r
+#define TASK_CHECK_ID(x) \\r
+ if( (x) > Os_CfgGetTaskCnt()) { \\r
+ rv = E_OS_ID; \\r
+ goto err; \\r
+ }\r
+\r
+\r
/**\r
* Returns the state of a task (running, ready, waiting, suspended)\r
* at the time of calling GetTaskState.\r
*/\r
\r
StatusType GetTaskState(TaskType TaskId, TaskStateRefType State) {\r
- state_t curr_state = os_pcb_get_state(os_get_pcb(TaskId));\r
+ state_t curr_state;\r
StatusType rv = E_OK;\r
\r
+ TASK_CHECK_ID(TaskId);\r
+\r
+ curr_state = os_pcb_get_state(os_get_pcb(TaskId));\r
+\r
// TODO: Lazy impl. for now */\r
switch(curr_state) {\r
case ST_RUNNING: *State = TASK_STATE_RUNNING; break;\r
* @param task_id Reference to the task which is currently running\r
* @return\r
*/\r
-StatusType GetTaskID( TaskRefType task_id ) {\r
- *task_id = os_sys.curr_pcb->pid;\r
- return E_OK;\r
+StatusType GetTaskID( TaskRefType TaskID ) {\r
+ StatusType rv = E_OK;\r
+ *TaskID = INVALID_TASK;\r
+\r
+\r
+ if( os_sys.curr_pcb->state & ST_RUNNING ) {\r
+ *TaskID = os_sys.curr_pcb->pid;\r
+ } else {\r
+ /* We have no running task, check level */\r
+\r
+ /* Call level is not from the OSEK specification but from the\r
+ * test specification */\r
+ if( os_sys.int_nest_cnt != 0 ) {\r
+ rv = E_OS_CALLEVEL;\r
+ goto err;\r
+ }\r
+ }\r
+err:\r
+ os_error.serviceId= OSServiceId_GetTaskID;\r
+ os_error.param1 = (uint32_t)TaskID;\r
+ return rv;\r
}\r
\r
\r
return (ISRType)Os_TaskGetCurrent()->pid;\r
}\r
\r
-#define TASK_CHECK_ID(x) \\r
- if( (x) > Os_CfgGetTaskCnt()) { \\r
- rv = E_OS_ID; \\r
- goto err; \\r
- }\r
-\r
static inline void Os_Arc_SetCleanContext( OsPcbType *pcb ) {\r
if (pcb->proc_type == PROC_EXTENDED) {\r
/** @req OSEK ActivateTask Cleanup events\r
OsPcbType *pcb = os_get_pcb(TaskID);\r
StatusType rv = E_OK;\r
\r
- OS_DEBUG(D_TASK,"ActivateTask %s\n",pcb->name);\r
+ OS_DEBUG(D_TASK,"# ActivateTask %s\n",pcb->name);\r
\r
#if (OS_STATUS_EXTENDED == STD_ON )\r
+ /* extended */\r
TASK_CHECK_ID(TaskID);\r
+#endif\r
\r
+ Irq_Save(msr);\r
/* @req OS093 ActivateTask */\r
if( Os_IrqAnyDisabled() ) {\r
+ /* Standard */\r
rv = E_OS_DISABLEDINT;\r
goto err;\r
}\r
-#endif\r
-\r
- Irq_Save(msr);\r
-\r
- if( os_pcb_get_state(pcb) == ST_SUSPENDED ) {\r
- pcb->activations++;\r
- Os_Arc_SetCleanContext(pcb);\r
- Os_TaskMakeReady(pcb);\r
- } else {\r
-\r
- if( pcb->proc_type == PROC_EXTENDED ) {\r
- /** @req OSEK Activate task.\r
- * An extended task be activated once. See Chapter 4.3 in OSEK\r
- */\r
- rv = E_OS_LIMIT;\r
- goto err;\r
- }\r
\r
+ pcb->activations++;\r
+ if( os_pcb_get_state(pcb) != ST_SUSPENDED ) {\r
/** @req OSEK_? Too many task activations */\r
- if( pcb->activations == pcb->activationLimit ) {\r
+ if( pcb->activations >= (pcb->activationLimit + 1) ) {\r
+ /* Standard */\r
rv=E_OS_LIMIT;\r
+ Irq_Restore(msr);\r
+ --pcb->activations;\r
goto err;\r
- } else {\r
- pcb->activations++;\r
}\r
+ } else {\r
+ /* We have a suspended task, make it ready for use */\r
+ assert( pcb->activations == 1 );\r
+ Os_Arc_SetCleanContext(pcb);\r
+ Os_TaskMakeReady(pcb);\r
}\r
\r
-\r
/* Preempt only if we are preemptable and target has higher prio than us */\r
if( (Os_TaskGetCurrent()->scheduling == FULL) &&\r
(os_sys.int_nest_cnt == 0) &&\r
(pcb->prio > Os_TaskGetCurrent()->prio) &&\r
(Os_SchedulerResourceIsFree()))\r
{\r
- Os_Dispatch(0);\r
+ Os_Dispatch(OP_ACTIVATE_TASK);\r
}\r
\r
Irq_Restore(msr);\r
StatusType rv = E_OK;\r
uint32_t flags;\r
\r
- OS_DEBUG(D_TASK,"TerminateTask %s\n",curr_pcb->name);\r
+ OS_DEBUG(D_TASK,"# TerminateTask %s\n",curr_pcb->name);\r
\r
#if (OS_STATUS_EXTENDED == STD_ON )\r
\r
goto err;\r
}\r
\r
+#if 0\r
if ( Os_SchedulerResourceIsOccupied() ) {\r
rv = E_OS_RESOURCE;\r
goto err;\r
}\r
+#endif\r
\r
- /** @req OS070 */\r
- if( Os_ResourceCheckAndRelease(curr_pcb) == 1 ) {\r
+ if( Os_TaskOccupiesResources(curr_pcb) ) {\r
+ /* Note! Do NOT release the resource here */\r
rv = E_OS_RESOURCE;\r
goto err;\r
-\r
}\r
\r
-\r
#endif\r
-\r
-\r
Irq_Save(flags);\r
\r
- --curr_pcb->activations;\r
-\r
-\r
-// assert(curr_pcb->activations>=0);\r
-\r
- /*@req OSEK TerminateTask\r
- * In case of tasks with multiple activation requests,\r
- * terminating the current instance of the task automatically puts the next\r
- * instance of the same task into the ready state\r
- */\r
- if( curr_pcb->activations <= 0 ) {\r
- curr_pcb->activations = 0;\r
- POSTTASKHOOK();\r
- Os_TaskMakeSuspended(curr_pcb);\r
- } else {\r
- /* We need to add ourselves to the ready list again,\r
- * with a startup context. */\r
-\r
- /* We are already in ready list..\r
- * This should give us a clean start /tojo */\r
- Os_Arc_SetCleanContext(curr_pcb);\r
- }\r
-\r
-// Os_ContextReInit(curr_pcb);\r
-\r
/* Force the dispatcher to find something, even if its us */\r
- Os_Dispatch(1);\r
+ Os_Dispatch(OP_TERMINATE_TASK);\r
\r
- Irq_Restore(flags);\r
- // It must find something here...otherwise something is very wrong..\r
assert(0);\r
\r
- rv = E_NOT_OK;\r
- goto err;\r
-\r
-\r
OS_STD_END(OSServiceId_TerminateTask);\r
}\r
\r
OsPcbType *curr_pcb = Os_TaskGetCurrent();\r
StatusType rv = E_OK;\r
uint32_t flags;\r
+ OsPcbType *pcb = os_get_pcb(TaskId);\r
+\r
+\r
+ OS_DEBUG(D_TASK,"# ChainTask %s\n",curr_pcb->name);\r
\r
#if (OS_STATUS_EXTENDED == STD_ON )\r
+ /* extended */\r
TASK_CHECK_ID(TaskId);\r
\r
if( os_sys.int_nest_cnt != 0 ) {\r
- rv = E_OS_CALLEVEL;\r
+ /* extended */\r
+ rv = E_OS_CALLEVEL;\r
+ Irq_Restore(flags);\r
goto err;\r
}\r
\r
+#endif\r
+\r
+ Irq_Save(flags);\r
+\r
+#if (OS_STATUS_EXTENDED == STD_ON )\r
+#if 0\r
if ( Os_SchedulerResourceIsOccupied() ) {\r
- rv = E_OS_RESOURCE;\r
+ /* extended */\r
+ rv = E_OS_RESOURCE;\r
+ Irq_Restore(flags);\r
goto err;\r
}\r
+#endif\r
\r
- if( Os_ResourceCheckAndRelease(curr_pcb) == 1 ) {\r
- rv = E_OS_RESOURCE;\r
+ if( Os_TaskOccupiesResources(curr_pcb) ) {\r
+ /* extended */\r
+ rv = E_OS_RESOURCE;\r
+ Irq_Restore(flags);\r
goto err;\r
}\r
#endif\r
- OsPcbType *pcb = os_get_pcb(TaskId);\r
-\r
- Irq_Save(flags);\r
-\r
- if (curr_pcb == pcb) {\r
- /* If we are chaining same task just make a clean start */\r
- /* TODO: Is it allowed to chain same task if extended? */\r
- Os_Arc_SetCleanContext(curr_pcb);\r
-\r
- /* Force the dispatcher to find something, even if its us */\r
- Os_Dispatch(1);\r
-\r
- Irq_Restore(flags);\r
- /* It must find something here...otherwise something is very wrong.. */\r
- assert(0);\r
-\r
- } else {\r
- /* We are chaining another task\r
- * We need to make sure it is in valid state */\r
- if( os_pcb_get_state(pcb) != ST_SUSPENDED ) {\r
- if( pcb->proc_type == PROC_EXTENDED ) {\r
- /** @req OSEK Activate task.\r
- * An extended task be activated once. See Chapter 4.3 in OSEK */\r
- rv = E_OS_LIMIT;\r
- goto err;\r
- }\r
\r
- /** @req OSEK_? Too many task activations */\r
- if( pcb->activations == pcb->activationLimit ) {\r
- rv=E_OS_LIMIT;\r
- goto err;\r
- }\r
+// if( os_pcb_get_state(pcb) != ST_SUSPENDED ) {\r
+ if (curr_pcb != pcb) {\r
+ /** @req OSEK_? Too many task activations */\r
+ if( (pcb->activations + 1) > pcb->activationLimit ) {\r
+ /* standard */\r
+ rv = E_OS_LIMIT;\r
+ Irq_Restore(flags);\r
+ goto err;\r
}\r
\r
- // Terminate current task\r
- --curr_pcb->activations;\r
- if( curr_pcb->activations <= 0 ) {\r
- curr_pcb->activations = 0;\r
- POSTTASKHOOK();\r
- Os_TaskMakeSuspended(curr_pcb);\r
+ if( os_pcb_get_state(pcb) == ST_SUSPENDED ) {\r
+ assert( pcb->activations == 0 );\r
+ Os_Arc_SetCleanContext(pcb);\r
+ Os_TaskMakeReady(pcb);\r
}\r
\r
- rv = ActivateTask(TaskId);\r
- // we return here only if something is wrong\r
+ pcb->activations++;\r
+\r
}\r
\r
- Irq_Restore(flags);\r
+ os_sys.chainedPcbPtr = pcb;\r
+\r
+ Os_Dispatch(OP_CHAIN_TASK);\r
\r
- if (rv != E_OK) goto err;\r
+ assert( 0 );\r
\r
OS_STD_END_1(OSServiceId_ChainTask,TaskId);\r
}\r
*\r
*/\r
StatusType Schedule( void ) {\r
-// OsPcbType *pcb;\r
-// OsPcbType *curr_pcb = get_curr_pcb();\r
StatusType rv = E_OK;\r
uint32_t flags;\r
+ OsPcbType *curr_pcb = get_curr_pcb();\r
+\r
+ OS_DEBUG(D_TASK,"# Schedule %s\n",Os_TaskGetCurrent()->name);\r
\r
/* Check that we are not calling from interrupt context */\r
if( os_sys.int_nest_cnt != 0 ) {\r
goto err;\r
}\r
\r
+ if ( Os_TaskOccupiesResources(curr_pcb) ) {\r
+ rv = E_OS_RESOURCE;\r
+ goto err;\r
+ }\r
+\r
+ assert( Os_TaskGetCurrent()->state & ST_RUNNING );\r
+\r
/* We need to figure out if we have an internal resource,\r
* otherwise no re-scheduling.\r
* NON - Have internal resource prio OS_RES_SCHEDULER_PRIO (32+)\r
return E_OK;\r
}\r
\r
-#if 0\r
- if( os_get_resource_int_p() == NULL ) {\r
- /* We do nothing */\r
- return E_OK;\r
- }\r
-#endif\r
-\r
+ Irq_Save(flags);\r
OsPcbType* top_pcb = Os_TaskGetTop();\r
/* only dispatch if some other ready task has higher prio */\r
if (top_pcb->prio > Os_TaskGetCurrent()->prio) {\r
- Irq_Save(flags);\r
- Os_Dispatch(0);\r
- Irq_Restore(flags);\r
+ Os_Dispatch(OP_SCHEDULE);\r
}\r
\r
+ Irq_Restore(flags);\r
// Prevent label warning. Remove this when proper error handling is implemented.\r
if (0) goto err;\r
\r
# Figure out the most of the modules to use.\r
\r
OPTIMAL_USE = RAMLOG\r
-MOD_USE+=KERNEL MCU DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+MOD_USE+=KERNEL MCU DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
$(warning $(MOD_USE)) \r
#MOD_USE+=KERNEL MCU T32_TERM SIMPLE_PRINTF RAMLOG\r
\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.c)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.10
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Sun Oct 10 21:14:06 CEST 2010
+*/
+
+ \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h" // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ############################### DEBUG OUTPUT #############################\r
+uint32 os_dbg_mask = 0;\r
+ \r
+\r
+\r
+// ################################# COUNTERS ###############################\r
+GEN_COUNTER_HEAD {\r
+ GEN_COUNTER( COUNTER_ID_Counter1,\r
+ "Counter1",\r
+ COUNTER_TYPE_HARD,\r
+ COUNTER_UNIT_NANO,\r
+ 0xffff,\r
+ 1,\r
+ 0,\r
+ 0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ################################## ALARMS ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################ RESOURCES ###############################\r
+GEN_RESOURCE_HEAD {\r
+ GEN_RESOURCE(\r
+ RES_ID_std_1,\r
+ RESOURCE_TYPE_STANDARD,\r
+ 0\r
+ ),\r
+};\r
+\r
+// ############################## STACKS (TASKS) ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(btask_m_non,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+DECLARE_STACK(etask_m_full_2,2048);\r
+\r
+// ################################## TASKS #################################\r
+GEN_TASK_HEAD {\r
+ GEN_ETASK( OsIdle,\r
+ 0,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ 0 \r
+ ),\r
+ GEN_BTASK(\r
+ btask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_ll_non,\r
+ 3,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_m_full,\r
+ 5,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_m_non,\r
+ 1,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_ETASK(\r
+ etask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_full,\r
+ 5,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ RES_MASK_std_1 | 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_full_2,\r
+ 5,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+};\r
+\r
+// ################################## HOOKS #################################\r
+GEN_HOOKS( \r
+ StartupHook, \r
+ NULL, \r
+ ShutdownHook, \r
+ ErrorHook,\r
+ PreTaskHook, \r
+ PostTaskHook \r
+);\r
+\r
+// ################################## ISRS ##################################\r
+\r
+\r
+// ############################ SCHEDULE TABLES #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.h)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.10
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Sun Oct 10 21:14:06 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2)
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1 0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go 1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_std_1 0\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_std_1 (1 << 0)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full 1\r
+#define TASK_ID_btask_l_full 2\r
+#define TASK_ID_btask_ll_non 3\r
+#define TASK_ID_btask_m_full 4\r
+#define TASK_ID_btask_m_non 5\r
+#define TASK_ID_etask_h_full 6\r
+#define TASK_ID_etask_l_full 7\r
+#define TASK_ID_etask_m_full 8\r
+#define TASK_ID_etask_m_full_2 9\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void btask_m_non( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+void etask_m_full_2( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE 2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT 0 \r
+#define OS_TASK_CNT 10\r
+#define OS_SCHTBL_CNT 0\r
+#define OS_COUNTER_CNT 1\r
+#define OS_EVENTS_CNT 1\r
+#define OS_ISRS_CNT 0\r
+#define OS_RESOURCE_CNT 1\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG STD_OFF\r
+\r
+#define OS_SC1 STD_ON \r
+#define OS_STACK_MONITORING STD_ON\r
+#define OS_STATUS_EXTENDED STD_ON\r
+#define OS_USE_GET_SERVICE_ID STD_ON\r
+#define OS_USE_PARAMETER_ACCESS STD_ON\r
+#define OS_RES_SCHEDULER STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
--- /dev/null
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.2">\r
+ <TOP-LEVEL-PACKAGES>\r
+ <AR-PACKAGE UUID="e56d23e8-11ff-4651-ae2a-9f83a280d47c">\r
+ <SHORT-NAME>config_tm_01</SHORT-NAME>\r
+ <CATEGORY>EcuConfiguration</CATEGORY>\r
+ <ADMIN-DATA>\r
+ <DOC-REVISIONS>\r
+ <DOC-REVISION>\r
+ <ISSUED-BY />\r
+ </DOC-REVISION>\r
+ </DOC-REVISIONS>\r
+ </ADMIN-DATA>\r
+ <ELEMENTS>\r
+ <ECU-CONFIGURATION UUID="29046d7d-db8b-4f92-afcf-525554458435">\r
+ <SHORT-NAME>config_tm_01</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <DOC-REVISIONS>\r
+ <DOC-REVISION />\r
+ </DOC-REVISIONS>\r
+ <SDGS>\r
+ <SDG GID="Arccore::EcuOptions">\r
+ <SD GID="MCU">Undefined MCU</SD>\r
+ <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_01_tm</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <MODULE-REFS>\r
+ <MODULE-REF DEST="MODULE-CONFIGURATION">/config_tm_01/Os</MODULE-REF>\r
+ </MODULE-REFS>\r
+ </ECU-CONFIGURATION>\r
+ <MODULE-CONFIGURATION UUID="e3a90a5a-3a2c-4b90-82fa-498d4bf14895">\r
+ <SHORT-NAME>Os</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <SDGS>\r
+ <SDG />\r
+ <SDG GID="Arccore::ModuleOptions">\r
+ <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+ <SD GID="ARCCORE_EDITOR_VERSION">2.0.7</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+ <CONTAINERS>\r
+ <CONTAINER UUID="46e7afa2-40d4-4969-9216-dbb68fd7dc71">\r
+ <SHORT-NAME>OsOS</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+ <VALUE>1000</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+ <VALUE>512</VALUE>\r
+ </INTEGER-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="5c123a65-e644-421a-be3b-62886c189f46">\r
+ <SHORT-NAME>OsHooks</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="179b1eed-bae4-4ff9-8101-c81794d849be">\r
+ <SHORT-NAME>etask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>6</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="c7934bf2-d3cf-4df2-822a-c872121dcd2b">\r
+ <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_tm_01/Os/std_1</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="b1f99972-b3c7-41ec-a1ec-0d4dbe6b2e73">\r
+ <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="2f0895f3-1d8a-4169-8fe1-105ff68a3a5a">\r
+ <SHORT-NAME>etask_l_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="f120ab09-188b-463b-a9e4-94f60e84f125">\r
+ <SHORT-NAME>btask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>6</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="c3213aac-578d-4870-9e2a-7b0a731f9ae3">\r
+ <SHORT-NAME>btask_m_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="9de6649a-e85b-4a49-a9f4-5055e02480ca">\r
+ <SHORT-NAME>btask_l_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="47b32026-3fe6-4fd5-b26e-fb0faa6bdac3">\r
+ <SHORT-NAME>btask_ll_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>3</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="de75266a-d9ea-4225-803f-b8bc02a446bf">\r
+ <SHORT-NAME>go</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="83c2a703-f295-4d91-b3c7-46bc6913e80e">\r
+ <SHORT-NAME>Counter1</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+ <VALUE>65535</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+ <VALUE>0</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+ <VALUE>0</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+ <VALUE>OS_TICK</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="92cc71da-7618-4431-90e4-f8451031d2e7">\r
+ <SHORT-NAME>btask_m_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="7f3d401c-7ca7-48e6-8686-bcb663fd878c">\r
+ <SHORT-NAME>etask_m_full_2</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="84a2cc88-79f3-45cd-bc3b-afcd525ba482">\r
+ <SHORT-NAME>std_1</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+ <VALUE>STANDARD</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </CONTAINERS>\r
+ </MODULE-CONFIGURATION>\r
+ </ELEMENTS>\r
+ </AR-PACKAGE>\r
+ </TOP-LEVEL-PACKAGES>\r
+</AUTOSAR>\r
+\r
--- /dev/null
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += test_tm_01.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+/*\r
+ * test.c\r
+ *\r
+ * Created on: 4 aug 2010\r
+ * Author: mahi\r
+ */\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+/*\r
+ * This file tests test requirements OSEK_TM_XX for non-\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l - low prio\r
+ * m - medium\r
+ * h - high prio\r
+ */\r
+\r
+\r
+enum OsekFixtureNr {\r
+ OSEK_TM_01 = 1,\r
+ OSEK_TM_02,\r
+ OSEK_TM_03,\r
+ OSEK_TM_04,\r
+ OSEK_TM_05,\r
+ OSEK_TM_06,\r
+ OSEK_TM_07,\r
+ OSEK_TM_08,\r
+ OSEK_TM_09,\r
+ OSEK_TM_10,\r
+ OSEK_TM_11,\r
+ OSEK_TM_12,\r
+ OSEK_TM_13,\r
+ OSEK_TM_14,\r
+ OSEK_TM_15,\r
+ OSEK_TM_16,\r
+ OSEK_TM_17,\r
+ OSEK_TM_18,\r
+ OSEK_TM_19,\r
+ OSEK_TM_20,\r
+ OSEK_TM_21,\r
+ OSEK_TM_22,\r
+ OSEK_TM_23,\r
+ OSEK_TM_24,\r
+ OSEK_TM_25,\r
+ OSEK_TM_26,\r
+ OSEK_TM_27,\r
+ OSEK_TM_28,\r
+ OSEK_TM_29,\r
+ OSEK_TM_30,\r
+ OSEK_TM_31,\r
+ OSEK_TM_32,\r
+ OSEK_TM_33,\r
+ OSEK_TM_34,\r
+ OSEK_TM_35,\r
+ OSEK_TM_36,\r
+ OSEK_TM_37,\r
+ OSEK_TM_38,\r
+ OSEK_TM_39,\r
+ OSEK_TM_40,\r
+ OSEK_TM_41,\r
+ OSEK_TM_42,\r
+ OSEK_TM_43,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static uint8_t activations = 0;\r
+\r
+\r
+static void isrSoftInt0( void ) {\r
+ StatusType rv;\r
+ TaskType taskId;\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_20:\r
+ TEST_SET_FIXTURE(OSEK_TM_20, SEQ_NR_02);\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+ TEST_SET_FIXTURE(OSEK_TM_20, SEQ_NR_03);\r
+ break;\r
+ case OSEK_TM_25:\r
+ TEST_SET_FIXTURE(OSEK_TM_25, SEQ_NR_02);\r
+ rv = ChainTask(TASK_ID_OsIdle);\r
+ TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+ TEST_SET_FIXTURE(OSEK_TM_25, SEQ_NR_03);\r
+ break;\r
+ case OSEK_TM_35:\r
+ TEST_SET_FIXTURE(OSEK_TM_35, SEQ_NR_02);\r
+ rv = Schedule();\r
+ TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+ TEST_SET_FIXTURE(OSEK_TM_35, SEQ_NR_03);\r
+ break;\r
+ case OSEK_TM_37:\r
+ TEST_SET_FIXTURE(OSEK_TM_37, SEQ_NR_02);\r
+ rv = GetTaskID(&taskId);\r
+ TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+ TEST_SET_FIXTURE(OSEK_TM_37, SEQ_NR_03);\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+\r
+void OsIdle(void) {\r
+ while(1);\r
+}\r
+\r
+void etask_m_none ( void ) {\r
+ StatusType rv;\r
+ // 2. Call ActivateTask() from non-preemptive task on basic task\r
+ rv = ActivateTask(TASK_ID_btask_m_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+}\r
+\r
+/*\r
+ * ActivationLimit = 2
+ */\r
+void btask_l_full(void) {\r
+ StatusType rv;\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_04:\r
+ TEST_SET_FIXTURE(OSEK_TM_04, SEQ_NR_03);\r
+ break;\r
+ case OSEK_TM_10:\r
+ activations++;\r
+ switch( activations ) {\r
+ case 1:\r
+ TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_02);\r
+ break;\r
+ case 2:\r
+ TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_03);\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ break;\r
+ case OSEK_TM_13:\r
+ { /* 2 activations */\r
+ activations++;\r
+ break;\r
+ }\r
+ case OSEK_TM_28:\r
+ TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_05 );\r
+ rv = SetEvent( TASK_ID_etask_m_full,EVENT_MASK_go );\r
+ break;\r
+ case OSEK_TM_30:\r
+ activations++;\r
+ if( activations == 1) {\r
+ TEST_SET_FIXTURE(OSEK_TM_30, SEQ_NR_02);\r
+ } else if( activations == 2) {\r
+ TEST_SET_FIXTURE(OSEK_TM_30, SEQ_NR_03);\r
+ } else {\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ break;\r
+ case OSEK_TM_32:\r
+ activations++;\r
+ if( activations == 1) {\r
+ TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_05);\r
+ } else if( activations == 2) {\r
+ TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_06);\r
+ } else {\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ break;\r
+ case OSEK_TM_33:\r
+ TEST_SET_FIXTURE(OSEK_TM_33, SEQ_NR_02);\r
+ rv = ChainTask( TASK_ID_etask_m_full );\r
+ TEST_ASSERT( rv == E_OS_LIMIT );\r
+ TEST_SET_FIXTURE(OSEK_TM_33, SEQ_NR_03);\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ TerminateTask();\r
+}\r
+\r
+/*\r
+ * ActivationLimit = 2
+ */\r
+void btask_m_full( void ) {\r
+ StatusType rv;\r
+ TaskType taskId;\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_05:\r
+ TEST_SET_FIXTURE(OSEK_TM_05, SEQ_NR_03);\r
+ break;\r
+\r
+ case OSEK_TM_14:\r
+ activations++;\r
+ switch(activations) {\r
+ case 1:\r
+ TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_03 );\r
+ break;\r
+ case 2:\r
+ TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ break;\r
+ case OSEK_TM_15:\r
+ activations++;\r
+ switch(activations) {\r
+ case 1:\r
+ rv = GetTaskID(&taskId);\r
+ TEST_ASSERT(rv == E_OK);\r
+ /* Activate ourself */\r
+ rv = ActivateTask(taskId);\r
+ TEST_ASSERT(rv == E_OK);\r
+\r
+ rv = ActivateTask(taskId);\r
+ TEST_ASSERT(rv == E_OS_LIMIT);\r
+ TEST_SET_FIXTURE(OSEK_TM_15, SEQ_NR_02);\r
+ break;\r
+\r
+ case 2:\r
+ TEST_SET_FIXTURE(OSEK_TM_15, SEQ_NR_03);\r
+\r
+ /* back to test task */\r
+ rv = SetEvent(TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ }\r
+ break;\r
+ case OSEK_TM_28:\r
+ TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ TerminateTask();\r
+}\r
+\r
+void etask_h_full( void ) {\r
+ StatusType rv;\r
+ switch(TestWorld.fixtureNr) {\r
+ case OSEK_TM_06:\r
+ TEST_SET_FIXTURE(OSEK_TM_06, SEQ_NR_02 );\r
+ break;\r
+ case OSEK_TM_07:\r
+ TEST_SET_FIXTURE(OSEK_TM_07, SEQ_NR_02 );\r
+ break;\r
+ case OSEK_TM_19:\r
+ TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_02 );\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ }\r
+ TerminateTask();\r
+}\r
+\r
+void etask_l_full( void ) {\r
+\r
+ switch(TestWorld.fixtureNr) {\r
+ case OSEK_TM_08:\r
+ TEST_SET_FIXTURE(OSEK_TM_08, SEQ_NR_03 );\r
+ break;\r
+ case OSEK_TM_11:\r
+ TEST_SET_FIXTURE(OSEK_TM_11, SEQ_NR_03 );\r
+ break;\r
+ case OSEK_TM_31:\r
+ TEST_SET_FIXTURE(OSEK_TM_31, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ }\r
+ TerminateTask();\r
+}\r
+\r
+void btask_h_full( void ) {\r
+ StatusType rv;\r
+ TaskType taskId;\r
+\r
+ switch(TestWorld.fixtureNr) {\r
+ case OSEK_TM_02:\r
+ TEST_SET_FIXTURE(OSEK_TM_02, SEQ_NR_02 );\r
+ break;\r
+ case OSEK_TM_03:\r
+ TEST_SET_FIXTURE(OSEK_TM_03, SEQ_NR_02 );\r
+ break;\r
+ case OSEK_TM_10:\r
+ TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_02 );\r
+ break;\r
+ case OSEK_TM_12:\r
+ TEST_SET_FIXTURE(OSEK_TM_12, SEQ_NR_03 );\r
+ break;\r
+ case OSEK_TM_28:\r
+ TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_02 );\r
+ rv = ActivateTask( TASK_ID_btask_m_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_03 );\r
+ /* Terminate this task an:\r
+ * 1. run m task\r
+ * 2. run l task\r
+ */\r
+ rv = ChainTask( TASK_ID_btask_l_full );\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ case OSEK_TM_29:\r
+ activations++;\r
+ if( activations == 1) {\r
+ TEST_SET_FIXTURE(OSEK_TM_29, SEQ_NR_02 );\r
+ rv = GetTaskID(&taskId);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ChainTask( taskId );\r
+ TEST_ASSERT( 0 );\r
+ } else if(activations == 2) {\r
+ TEST_SET_FIXTURE(OSEK_TM_29, SEQ_NR_03 );\r
+ } else {\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ break;\r
+ case OSEK_TM_32:\r
+ TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ TerminateTask();\r
+}\r
+\r
+void etask_m_full_2( void ) {\r
+\r
+ switch(TestWorld.fixtureNr) {\r
+ case OSEK_TM_09:\r
+ TEST_SET_FIXTURE(OSEK_TM_09, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ }\r
+\r
+ TerminateTask();\r
+}\r
+\r
+\r
+/**\r
+ * Task used for scheduling only.
+ */\r
+void btask_ll_non( void ) {\r
+ StatusType rv;\r
+ /* Used for scheduling ONLY */\r
+ rv = SetEvent(TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+/* Terminate a lower-priority task.\r
+ *\r
+ *\r
+ * */\r
+void TestTaskRunLowerPrio( void ) {\r
+ StatusType rv;\r
+ /* Activate lowest prioriy task */\r
+ rv = ActivateTask(TASK_ID_btask_ll_non);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Let the low prio task run */\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ rv = ClearEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+void TestActivateAndWait( TaskType task ) {\r
+ StatusType rv;\r
+ rv = ActivateTask(task);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Let the low prio task run */\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_m_non( void ) {\r
+ StatusType rv;\r
+ EventMaskType mask;\r
+ testNrNon = TestWorld.testNr;\r
+ TaskType taskId;\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_02:\r
+\r
+ /** @treq OSEK_TM_02\r
+ *\r
+ * Call ActivateTask() from non-preemptive task on suspended basic task\r
+ *\r
+ * No preemption of running task. Activated task becomes ready.\r
+ * Service returns E_OK\r
+ */\r
+ rv = ActivateTask(TASK_ID_btask_h_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Run the higher prio task */\r
+ rv = Schedule();\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+\r
+ case OSEK_TM_06:\r
+ /** @treq OSEK_TM_06\r
+ *\r
+ * Call ActivateTask() from non-preemptive task on suspended extended task\r
+ *\r
+ * No preemption of running task. Activated task becomes ready and its\r
+ * events are cleared. Service returns E_OK
+ */\r
+\r
+ rv = ActivateTask(TASK_ID_etask_h_full);\r
+ rv = GetEvent(TASK_ID_etask_h_full,&mask);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( mask == 0);\r
+ /* Run the higher prio task */\r
+ rv = Schedule();\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+\r
+ case OSEK_TM_12:\r
+ /** @treq OSEK_TM_12\r
+ *\r
+ * Call ActivateTask() from non-preemptive task on ready basic task\r
+ * which has not reached max number of activations\r
+ *\r
+ * No preemption of running task. Activation request is queued in ready\r
+ * list. Service returns E_OK\r
+ */\r
+ rv = ActivateTask(TASK_ID_btask_h_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_TM_12, SEQ_NR_02 );\r
+ /* Run the higher prio task */\r
+ rv = Schedule();\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_TM_12, SEQ_NR_04 );\r
+ break;\r
+\r
+ case OSEK_TM_17:\r
+ {\r
+\r
+ /** @treq OSEK_TM_17\r
+ *\r
+ * Call ActivateTask() from non-preemptive task on running basic\r
+ * task which has not reached max number of activations\r
+ *\r
+ * No preemption of running task. Activation request is queued in ready list.\r
+ * Service returns E_OK\r
+ */\r
+ activations++;\r
+ switch( activations ) {\r
+ case 1:\r
+ rv = GetTaskID(&taskId);\r
+ TEST_ASSERT(rv == E_OK);\r
+ /* Run us again */\r
+ rv = ActivateTask(taskId);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_TM_17, SEQ_NR_02 );\r
+ TerminateTask();\r
+ break;\r
+ case 2:\r
+ TEST_SET_FIXTURE(OSEK_TM_17, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+ }\r
+ break;\r
+\r
+ case OSEK_TM_32:\r
+\r
+ /** @treq OSEK_TM_32\r
+ *\r
+ * Call ChainTask() from non-preemptive task on ready basic task\r
+ * which has not reached max. Number of activations\r
+ *\r
+ * Running task is terminated, activation request is queued in\r
+ * ready list and ready task with highest priority is executed\r
+ */\r
+ activations = 0;\r
+ TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_02 );\r
+ /* Activate higher prio task */\r
+ rv = SetEvent(TASK_ID_etask_m_full,EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_03 );\r
+ /* Make it READY */\r
+ rv = ActivateTask( TASK_ID_btask_l_full );\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ rv = ChainTask( TASK_ID_btask_l_full );\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+ /* Back to etask_m_full */\r
+ rv = SetEvent(TASK_ID_etask_m_full,EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TerminateTask();\r
+ TEST_ASSERT( 0 );\r
+}\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+ StatusType rv;\r
+ TaskType taskId;\r
+ TaskType isrTask;\r
+ TaskStateType taskState;\r
+\r
+ /** @treq OSEK_TM_01\r
+ *\r
+ * Call ActivateTask() from task-level with invalid task ID\r
+ * (task does not exist)\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_01, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_ILL);\r
+ TEST_ASSERT( rv == E_OS_ID);\r
+\r
+ /* OSEK_TM_02 is in another task */\r
+ TEST_SET_FIXTURE(OSEK_TM_02, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_m_non);\r
+\r
+ /** @treq OSEK_TM_03\r
+ *\r
+ * Call ActivateTask() from preemptive task on basic task which\r
+ * has higher priority than running task.\r
+ *\r
+ * Running task is preempted. Activated task becomes running.\r
+ * Service returns E_OK\r
+ * */\r
+ TEST_SET_FIXTURE(OSEK_TM_03, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_btask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+ /* The higher prio task is run prior to getting here */\r
+ TEST_SET_FIXTURE(OSEK_TM_03, SEQ_NR_03 );\r
+\r
+ /** @treq OSEK_TM_04\r
+ *\r
+ * Call ActivateTask() from preemptive task on suspended basic\r
+ * task which has lower priority than running task.\r
+ *\r
+ * No preemption of running task. Activated task becomes ready.\r
+ * Service returns E_OK */\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_04, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_btask_l_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_TM_04, SEQ_NR_02 );\r
+\r
+ /* Cleanup, let btask_l_full run */\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_TM_04, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_TM_05\r
+ * Call ActivateTask() from preemptive task on suspended basic\r
+ * task which has equal priority as running task.\r
+ *\r
+ * No preemption of running task. Activated task becomes ready.\r
+ * Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_05, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_btask_m_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_TM_05, SEQ_NR_02 );\r
+\r
+ /* Cleanup, let btask_m_full run */\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_TM_05, SEQ_NR_04 );\r
+\r
+\r
+ /* OSEK_TM_06 is in another task */\r
+ TEST_SET_FIXTURE(OSEK_TM_06, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_m_non);\r
+\r
+ /** @treq OSEK_TM_07\r
+ *\r
+ * Call ActivateTask() from preemptive task on suspended\r
+ * extended task which has higher priority than running task.\r
+ *\r
+ * Running task is preempted. Activated task becomes running and\r
+ * its events are cleared. Service returns E_OK
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_07, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_TM_07, SEQ_NR_03 );\r
+\r
+ /** @treq OSEK_TM_08\r
+ * Call ActivateTask() from preemptive task on suspended\r
+ * extended task which has lower priority than running task.\r
+ *\r
+ * No preemption of running task. Activated task becomes ready\r
+ * and its events are cleared. Service returns E_OK
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_08, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_etask_l_full);\r
+ TEST_SET_FIXTURE(OSEK_TM_08, SEQ_NR_02 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_TM_08, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_TM_09\r
+ *\r
+ * Call ActivateTask() from preemptive task on suspended\r
+ * extended task which has equal priority as running task.\r
+ *\r
+ * No preemption of running task. Activated task becomes\r
+ * ready and its events are cleared. Service returns E_OK.
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_09, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_etask_m_full_2);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_TM_09, SEQ_NR_02 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_TM_09, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_TM_10\r
+ *\r
+ * Call ActivateTask() on ready basic task which has reached max\r
+ * number of activations\r
+ *\r
+ * Service returns E_OS_LIMIT\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_01 );\r
+ activations = 0;\r
+ rv = ActivateTask(TASK_ID_btask_l_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = ActivateTask(TASK_ID_btask_l_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = ActivateTask(TASK_ID_btask_l_full);\r
+ TEST_ASSERT( rv == E_OS_LIMIT);\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_04);\r
+\r
+ /** @treq OSEK_TM_11\r
+ *\r
+ * Call ActivateTask() on ready extended task\r
+ *\r
+ * Service returns E_OS_LIMIT\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_11, SEQ_NR_01 );\r
+ /* Make ready */\r
+ rv = ActivateTask(TASK_ID_etask_l_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_TM_11, SEQ_NR_02 );\r
+ rv = ActivateTask(TASK_ID_etask_l_full);\r
+ TEST_ASSERT( rv == E_OS_LIMIT);\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_TM_11, SEQ_NR_04 );\r
+\r
+ /* OSEK_TM_12 is in another task */\r
+ TEST_SET_FIXTURE(OSEK_TM_12, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_m_non);\r
+\r
+\r
+ /** @treq OSEK_TM_13\r
+ *\r
+ * Call ActivateTask() from preemptive task on ready basic task which has\r
+ * not reached max number of activations and has lower priority than\r
+ * running task\r
+ *\r
+ * No preemption of running task. Activation request is queued in ready\r
+ * list. Service returns E_OK\r
+ */\r
+ activations = 0;\r
+ TEST_SET_FIXTURE(OSEK_TM_13, SEQ_NR_01 );\r
+ /* make ready */\r
+ rv = ActivateTask(TASK_ID_btask_l_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ /* Activate ready basic task */\r
+ rv = ActivateTask(TASK_ID_btask_l_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TestTaskRunLowerPrio();\r
+ TEST_ASSERT( activations == 2 );\r
+\r
+\r
+ /** @treq OSEK_TM_14\r
+ *\r
+ * Call ActivateTask() from preemptive task on ready basic task\r
+ * which has not reached max number of activations and has equal\r
+ * priority as running task\r
+ *\r
+ * No preemption of running task.Activation request is queued in ready\r
+ * list. Service returns E_OK\r
+ */\r
+ activations = 0;\r
+ TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_01 );\r
+ /* make ready */\r
+ rv = ActivateTask(TASK_ID_btask_m_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ /* Activate ready basic task */\r
+ rv = ActivateTask(TASK_ID_btask_m_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_02 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_ASSERT( activations == 2 );\r
+ TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_05 );\r
+\r
+\r
+ /** @treq OSEK_TM_15\r
+ *\r
+ * Call ActivateTask() on running basic task which has reached max\r
+ * number of activations\r
+ *\r
+ * Service returns E_OS_LIMIT\r
+ */\r
+ /* OSEK_TM_15 is in another task */\r
+ activations = 0;\r
+ TEST_SET_FIXTURE(OSEK_TM_15, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_m_full);\r
+\r
+ /** @treq OSEK_TM_16\r
+ *\r
+ * Call ActivateTask() on running extended task\r
+ *\r
+ * Service returns E_OS_LIMIT\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_16, SEQ_NR_01 );\r
+ rv = GetTaskID(&taskId);\r
+ TEST_ASSERT(rv == E_OK);\r
+ /* Activate ourself */\r
+ rv = ActivateTask(taskId);\r
+ TEST_ASSERT(rv == E_OS_LIMIT);\r
+\r
+ /* OSEK_TM_17 is in another task */\r
+ activations = 0;\r
+ TEST_SET_FIXTURE(OSEK_TM_17, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_m_non);\r
+ TEST_SET_FIXTURE(OSEK_TM_17, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_TM_18\r
+ *\r
+ * Call ActivateTask() from preemptive task on running basic task\r
+ * which has not reached max number of activations\r
+ *\r
+ * No preemption of running task. Activation request is queued in\r
+ * ready list. Service returns E_OK\r
+ */\r
+\r
+ /* This is done in OSEK_TM_15, just record that that the test is OK */\r
+ TEST_SET_FIXTURE(OSEK_TM_18, SEQ_NR_01 );\r
+\r
+ /** @treq OSEK_TM_19\r
+ *\r
+ * Call ActivateTask() on waiting extended task\r
+ *\r
+ * Service returns E_OS_LIMIT\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_h_full );\r
+ /* etask_h_full should now be waiting */\r
+ TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_03 );\r
+\r
+ rv = ActivateTask( TASK_ID_etask_h_full );\r
+ TEST_ASSERT( rv == E_OS_LIMIT );\r
+\r
+ /* Make it terminate */\r
+ rv = SetEvent( TASK_ID_etask_h_full,EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_05 );\r
+\r
+ /** @treq OSEK_TM_20\r
+ *\r
+ * Call TerminateTask() from ISR category 2\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ *\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_20, SEQ_NR_01 );\r
+\r
+ /* Create an ISR2 */\r
+ isrTask = Os_Arc_CreateIsr( isrSoftInt0, 8/*prio*/,"soft_0");\r
+ Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_0);\r
+\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_20, SEQ_NR_04);\r
+\r
+ /* OSEK_TM_21 not in Autosar */\r
+ TEST_SET_FIXTURE(OSEK_TM_21, SEQ_NR_01 );\r
+\r
+ /** @treq OSEK_TM_22\r
+ *\r
+ * Call TerminateTask() while still occupying a resource\r
+ *\r
+ * Running task is not terminated.\r
+ * Service returns E_OS_RESOURCE\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_22, SEQ_NR_01 );\r
+ rv = GetResource( RES_ID_std_1 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OS_RESOURCE );\r
+ rv = ReleaseResource( RES_ID_std_1 );\r
+ TEST_SET_FIXTURE(OSEK_TM_22, SEQ_NR_02 );\r
+\r
+ /** @treq OSEK_TM_23\r
+ *\r
+ * Call TerminateTask()\r
+ *\r
+ * Running task is terminated and ready task with highest priority\r
+ * is executed\r
+ */\r
+\r
+ /* This is already verified by the test-system */\r
+ TEST_SET_FIXTURE(OSEK_TM_23, SEQ_NR_01 );\r
+\r
+ /** @treq OSEK_TM_24\r
+ *\r
+ * Call ChainTask() from task-level. Task-ID is invalid (does not exist).\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_24, SEQ_NR_01 );\r
+ rv = ChainTask(TASK_ID_ILL);\r
+ TEST_ASSERT( rv == E_OS_ID );\r
+ TEST_SET_FIXTURE(OSEK_TM_24, SEQ_NR_02 );\r
+\r
+ /** @treq OSEK_TM_25\r
+ *\r
+ * Call ChainTask() from ISR category 2\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_25, SEQ_NR_01 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_TM_25, SEQ_NR_04 );\r
+\r
+ /* OSEK_TM_26 not in Autosar */\r
+ TEST_SET_FIXTURE(OSEK_TM_26, SEQ_NR_01 );\r
+\r
+ /** @treq OSEK_TM_27\r
+ *\r
+ * Call ChainTask() while still occupying a resource\r
+ *\r
+ * Running task is not terminated. Service returns E_OS_RESOURCE\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_27, SEQ_NR_01 );\r
+ rv = GetResource( RES_ID_std_1 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ChainTask(TASK_ID_OsIdle);\r
+ TEST_ASSERT( rv == E_OS_RESOURCE );\r
+ rv = ReleaseResource( RES_ID_std_1 );\r
+ TEST_SET_FIXTURE(OSEK_TM_27, SEQ_NR_02 );\r
+\r
+\r
+ /** @treq OSEK_TM_28\r
+ *\r
+ * Call ChainTask() on suspended task\r
+ *\r
+ * Running task is terminated, chained task becomes ready and ready task\r
+ * with highest priority is executed\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_h_full);\r
+ TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_06 );\r
+ /* Cleanup */\r
+ TestTaskRunLowerPrio();\r
+\r
+ /** @treq OSEK_TM_29\r
+ *\r
+ * Call ChainTask() on running task\r
+ *\r
+ * Running task is terminated, chained task becomes ready and ready task\r
+ * with highest priority is executed\r
+ */\r
+ activations = 0;\r
+ TEST_SET_FIXTURE(OSEK_TM_29, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_btask_h_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_TM_29, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_TM_30\r
+ *\r
+ * Call ChainTask() on ready basic task which has reached max number of\r
+ * activations.\r
+ *\r
+ * Running task is not terminated. Service returns E_OS_LIMIT\r
+ */\r
+\r
+ activations = 0;\r
+ TEST_SET_FIXTURE(OSEK_TM_30, SEQ_NR_01 );\r
+ /* First activation */\r
+ rv = ActivateTask(TASK_ID_btask_l_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* second activation */\r
+ rv = ActivateTask(TASK_ID_btask_l_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ rv = ChainTask(TASK_ID_btask_l_full);\r
+ TEST_ASSERT( rv == E_OS_LIMIT );\r
+ /* Cleanup */\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_TM_30, SEQ_NR_04);\r
+\r
+ /** @treq OSEK_TM_31\r
+ *\r
+ * Call ChainTask() on ready extended task\r
+ *\r
+ * Running task is not terminated. Service returns E_OS_LIMIT\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_31, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_l_full );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ChainTask( TASK_ID_etask_l_full );\r
+ TEST_ASSERT( rv == E_OS_LIMIT );\r
+ TEST_SET_FIXTURE(OSEK_TM_31, SEQ_NR_02 );\r
+ /* Cleanup */\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_TM_31, SEQ_NR_04);\r
+\r
+ /** @treq OSEK_TM_32\r
+ *\r
+ * Call ChainTask() from non-preemptive task on ready basic task which\r
+ * has not reached max number of activations\r
+ *\r
+ * Running task is terminated, activation request is queued in ready list\r
+ * and ready task with highest priority is executed\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_m_non);\r
+ TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_04 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_07);\r
+\r
+ /** @treq OSEK_TM_33\r
+ *\r
+ * Call ChainTask() on waiting extended task\r
+ *\r
+ * Service returns E_OS_LIMIT\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_33, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_l_full);\r
+ TEST_SET_FIXTURE(OSEK_TM_33, SEQ_NR_04);\r
+ TestTaskRunLowerPrio();\r
+\r
+ /** @treq OSEK_TM_34\r
+ *\r
+ * Call Schedule() from task.\r
+ *\r
+ * Ready task with highest priority is executed. Service returns E_OK\r
+ */\r
+ /* Already tested in OSEK_TM_02 */\r
+ TEST_SET_FIXTURE(OSEK_TM_34, SEQ_NR_01 );\r
+\r
+ /** @treq OSEK_TM_35\r
+ *\r
+ * Call Schedule() from ISR category 2\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_35, SEQ_NR_01 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_TM_35, SEQ_NR_04 );\r
+\r
+ /* OSEK_TM_36 not an OSEK/Autosar requirement */\r
+ TEST_SET_FIXTURE(OSEK_TM_36, SEQ_NR_01 );\r
+\r
+ /** @treq OSEK_TM_37\r
+ *\r
+ * Call GetTaskID() from ISR category 2\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_37, SEQ_NR_01 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_TM_37, SEQ_NR_04 );\r
+\r
+ /* @treq OSEK_TM_38 not an OSEK/Autosar requirement */\r
+ TEST_SET_FIXTURE(OSEK_TM_38, SEQ_NR_01 );\r
+\r
+ /** @treq OSEK_TM_39\r
+ *\r
+ * Call GetTaskID() from task\r
+ *\r
+ * Return task ID of currently running task. Service returns E_OK\r
+ */\r
+ /* Already tested in numerous earlier testcases */\r
+ TEST_SET_FIXTURE(OSEK_TM_39, SEQ_NR_01 );\r
+\r
+\r
+ /** @treq OSEK_TM_40\r
+ *\r
+ * Call GetTaskState() with invalid task ID (task does not exist)\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_TM_40, SEQ_NR_01 );\r
+ rv = GetTaskState(TASK_ID_ILL,&taskState);\r
+ TEST_ASSERT( rv == E_OS_ID );\r
+ TEST_SET_FIXTURE(OSEK_TM_40, SEQ_NR_02 );\r
+\r
+\r
+ /** @treq OSEK_TM_41\r
+ *\r
+ * Call GetTaskState()\r
+ *\r
+ * Return state of queried task. Service returns E_OK\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_TM_41, SEQ_NR_01 );\r
+ rv = GetTaskState(TASK_ID_etask_h_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_SUSPENDED );\r
+ TEST_SET_FIXTURE(OSEK_TM_41, SEQ_NR_02 );\r
+\r
+ rv = GetTaskState(TASK_ID_etask_l_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_SUSPENDED );\r
+ TEST_SET_FIXTURE(OSEK_TM_41, SEQ_NR_03 );\r
+\r
+ rv = GetTaskState(taskId,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_RUNNING );\r
+ TEST_SET_FIXTURE(OSEK_TM_41, SEQ_NR_04 );\r
+\r
+// TestActivateAndWait( TASK_ID_btask_m_non );\r
+\r
+ TestExit(0);\r
+}\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.c)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Tue Sep 28 14:22:25 CEST 2010
+*/
+
+ \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h" // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ############################### DEBUG OUTPUT #############################\r
+uint32 os_dbg_mask = 0;\r
+ \r
+\r
+\r
+// ################################# COUNTERS ###############################\r
+GEN_COUNTER_HEAD {\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = -1;\r
+\r
+// ################################## ALARMS ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################ RESOURCES ###############################\r
+GEN_RESOURCE_HEAD {\r
+};\r
+\r
+// ############################## STACKS (TASKS) ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_l_non,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+\r
+// ################################## TASKS #################################\r
+GEN_TASK_HEAD {\r
+ GEN_ETASK( OsIdle,\r
+ 0,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ 0 \r
+ ),\r
+ GEN_BTASK(\r
+ btask_l_non,\r
+ 3,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_ETASK(\r
+ etask_m_full,\r
+ 4,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+};\r
+\r
+// ################################## HOOKS #################################\r
+GEN_HOOKS( \r
+ StartupHook, \r
+ NULL, \r
+ ShutdownHook, \r
+ ErrorHook,\r
+ PreTaskHook, \r
+ PostTaskHook \r
+);\r
+\r
+// ################################## ISRS ##################################\r
+\r
+\r
+// ############################ SCHEDULE TABLES #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.h)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Tue Sep 28 14:22:25 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2)
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+\r
+// Counter macros\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go 1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_l_non 1\r
+#define TASK_ID_etask_m_full 2\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_l_non( void );\r
+void etask_m_full( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE 2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT 0 \r
+#define OS_TASK_CNT 3\r
+#define OS_SCHTBL_CNT 0\r
+#define OS_COUNTER_CNT 0\r
+#define OS_EVENTS_CNT 1\r
+#define OS_ISRS_CNT 0\r
+#define OS_RESOURCE_CNT 0\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG STD_OFF\r
+\r
+#define OS_SC1 STD_ON \r
+#define OS_STACK_MONITORING STD_ON\r
+#define OS_STATUS_EXTENDED STD_ON\r
+#define OS_USE_GET_SERVICE_ID STD_ON\r
+#define OS_USE_PARAMETER_ACCESS STD_ON\r
+#define OS_RES_SCHEDULER STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
--- /dev/null
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+ <AR-PACKAGE>\r
+ <SHORT-NAME>config_osek_ip</SHORT-NAME>\r
+ <ELEMENTS>\r
+ <ECU-CONFIGURATION UUID="d30db794-36ce-42ce-8658-deb9cfbfc18a">\r
+ <SHORT-NAME>config_osek_ip</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <DOC-REVISIONS>\r
+ <DOC-REVISION/>\r
+ </DOC-REVISIONS>\r
+ <SDGS>\r
+ <SDG GID="Arccore::EcuOptions">\r
+ <SD GID="MCU">Undefined MCU</SD>\r
+ <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_02_ip</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/NewEcu/SwComposition_NewEcu</ECU-SW-COMPOSITION-REF>\r
+ <MODULE-REFS>\r
+ <MODULE-REF DEST="MODULE-CONFIGURATION">/NewEcu/Os</MODULE-REF>\r
+ </MODULE-REFS>\r
+ </ECU-CONFIGURATION>\r
+ <ECU-SW-COMPOSITION UUID="aab85286-8442-4d60-bf6d-a8cdea2f4f7c">\r
+ <SHORT-NAME>SwComposition_NewEcu</SHORT-NAME>\r
+ </ECU-SW-COMPOSITION>\r
+ <MODULE-CONFIGURATION UUID="fb96b9f7-d486-4956-bcf5-03ac6c6e5f78">\r
+ <SHORT-NAME>Os</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <SDGS>\r
+ <SDG/>\r
+ <SDG GID="Arccore::ModuleOptions">\r
+ <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+ <SD GID="ARCCORE_EDITOR_VERSION">2.0.11</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+ <CONTAINERS>\r
+ <CONTAINER UUID="e38c4f96-a8c1-4489-b907-03eb4441b231">\r
+ <SHORT-NAME>OsOS</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+ <VALUE>1000</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+ <VALUE>512</VALUE>\r
+ </INTEGER-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="a7839b8f-1ed1-4f24-b05f-06850836ea32">\r
+ <SHORT-NAME>OsHooks</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="074c4c94-0aa1-4158-9223-7136a526fac0">\r
+ <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="c17d3508-e67f-49bd-92fb-8a3a51531b49">\r
+ <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="ba3c0023-17f0-46d5-9894-05bf9d6b816d">\r
+ <SHORT-NAME>etask_m_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="2779564f-96d6-4d30-b88b-cb1f7291fb76">\r
+ <SHORT-NAME>btask_l_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="86e6d692-1859-4a9e-a625-ab04d091fa8f">\r
+ <SHORT-NAME>btask_l_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="8d6c6b17-d4c3-4495-98b6-defe04215c41">\r
+ <SHORT-NAME>etask_l_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="b0512773-1a8c-4155-b4a7-67e915370404">\r
+ <SHORT-NAME>go</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="5a412088-bb62-49c2-aeb7-12eee9b6fd66">\r
+ <SHORT-NAME>go2</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </CONTAINERS>\r
+ </MODULE-CONFIGURATION>\r
+ </ELEMENTS>\r
+ </AR-PACKAGE>\r
+ </TOP-LEVEL-PACKAGES></AUTOSAR>\r
--- /dev/null
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += osek_ip.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+/*\r
+ * Created on: 4 aug 2010\r
+ * Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_IP_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l - low prio\r
+ * m - medium\r
+ * h - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+ OSEK_IP_01 = 1,\r
+ OSEK_IP_02,\r
+ OSEK_IP_03,\r
+ OSEK_IP_04,\r
+ OSEK_IP_05,\r
+ OSEK_IP_06,\r
+ OSEK_IP_07,\r
+ OSEK_IP_08,\r
+ OSEK_IP_09,\r
+ OSEK_IP_10,\r
+ OSEK_IP_11,\r
+ OSEK_IP_12,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static void isrSoftInt1( void ) {\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_IP_07:\r
+ TEST_SET_FIXTURE(OSEK_IP_07, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_IP_07:\r
+ TEST_SET_FIXTURE(OSEK_IP_07, SEQ_NR_02 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_1 );\r
+ break;\r
+ case OSEK_IP_09:\r
+ TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+\r
+\r
+\r
+void OsIdle(void) {\r
+ while(1);\r
+}\r
+\r
+\r
+void btask_l_non ( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_IP_09:\r
+ TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_02 );\r
+ /* Make higher prio task ready */\r
+ rv = SetEvent( TASK_ID_etask_m_full,EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK ) ;\r
+ TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_03 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_05 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+ StatusType rv;\r
+ TaskType isrTask;\r
+\r
+ /** @treq OSEK_IP_01\r
+ *\r
+ * Call EnableInterrupt(). All requested interrupts are disabled\r
+ *\r
+ * Enable interrupts. Service returns E_OK\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_IP_01, SEQ_NR_01 );\r
+ /* The API is no longer available in Autosar or OSEK */\r
+\r
+ /** @treq OSEK_IP_02\r
+ *\r
+ * Call EnableInterrupt(). At least one of the requested interrupts is already enabled.\r
+ *\r
+ * Enable interrupts. Service returns E_OS_NOFUNC\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_IP_02, SEQ_NR_01 );\r
+ /* The API is no longer available in Autosar or OSEK */\r
+\r
+ /** @treq OSEK_IP_03\r
+ *\r
+ * Call DisableInterrupt(). All requested interrupts are enabled\r
+ *\r
+ * Disable interrupts. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_03, SEQ_NR_01 );\r
+ /* The API is no longer available in Autosar or OSEK */\r
+\r
+ /** @treq OSEK_IP_04\r
+ *\r
+ * "Call DisableInterrupt(). At least one of the requested interrupts\r
+ * is already disabled"\r
+ *\r
+ * Disable interrupts. Service returns E_OS_NOFUNC\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_04, SEQ_NR_01 );\r
+ /* The API is no longer available in Autosar or OSEK */\r
+\r
+ /** @treq OSEK_IP_05\r
+ *\r
+ * Call GetInterruptDescriptor()\r
+ *\r
+ * "Returns current interrupt descriptor. Service returns E_OK"\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_05, SEQ_NR_01 );\r
+ /* The API is no longer available in Autosar or OSEK */\r
+\r
+ /** @treq OSEK_IP_06\r
+ *\r
+ * Interruption of running task\r
+ *\r
+ * Interrupt is executed\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_06, SEQ_NR_01 );\r
+ /* Already tested in a number of cases in tm suite */\r
+\r
+ /** @treq OSEK_IP_07\r
+ *\r
+ * Interruption of ISR2\r
+ *\r
+ * Interrupt is executed\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_07, SEQ_NR_01 );\r
+ /* Create an ISR2 */\r
+ isrTask = Os_Arc_CreateIsr( isrSoftInt0, 8/*prio*/,"soft_0");\r
+ Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_0);\r
+\r
+ /* Create an ISR2 */\r
+ isrTask = Os_Arc_CreateIsr( isrSoftInt1, 9/*prio*/,"soft_1");\r
+ Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_1);\r
+\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_IP_07, SEQ_NR_04 );\r
+\r
+\r
+ /** @treq OSEK_IP_08\r
+ *\r
+ * Interruption of ISR3\r
+ *\r
+ * Interrupt is executed\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_08, SEQ_NR_01 );\r
+ /* ISR3 is not applicable */\r
+\r
+ /** @treq OSEK_IP_09\r
+ *\r
+ * Return from ISR2. Interrupted task is non-preemptive\r
+ *\r
+ * Execution of interrupted task is continued\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_btask_l_non );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_06 );\r
+\r
+ /** @treq OSEK_IP_10\r
+ *\r
+ * Return from ISR3. Interrupted task is non-preemptive\r
+ *\r
+ * Execution of interrupted task is continued\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_10, SEQ_NR_01 );\r
+ /* ISR3 is not applicable */\r
+\r
+ /** @treq OSEK_IP_11\r
+ *\r
+ * Return from ISR2. Interrupted task is preemptive\r
+ *\r
+ * Ready task with highest priority is executed (Rescheduling)\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_11, SEQ_NR_01 );\r
+\r
+\r
+\r
+ /** @treq OSEK_IP_12\r
+ *\r
+ * Return from ISR3. Interrupted task is preemptive\r
+ *\r
+ * Ready task with highest priority is executed (Rescheduling)\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_IP_12, SEQ_NR_01 );\r
+ /* ISR3 is not applicable */\r
+\r
+\r
+ TestExit(0);\r
+}\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.c)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Thu Sep 30 13:27:37 CEST 2010
+*/
+
+ \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h" // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ############################### DEBUG OUTPUT #############################\r
+uint32 os_dbg_mask = D_RESOURCE |D_SCHTBL |D_EVENT |D_TASK |D_ALARM;\r
+ \r
+\r
+\r
+// ################################# COUNTERS ###############################\r
+GEN_COUNTER_HEAD {\r
+ GEN_COUNTER( COUNTER_ID_Counter1,\r
+ "Counter1",\r
+ COUNTER_TYPE_HARD,\r
+ COUNTER_UNIT_NANO,\r
+ 0xffff,\r
+ 1,\r
+ 0,\r
+ 0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ################################## ALARMS ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################ RESOURCES ###############################\r
+GEN_RESOURCE_HEAD {\r
+ GEN_RESOURCE(\r
+ RES_ID_std_1,\r
+ RESOURCE_TYPE_STANDARD,\r
+ 0\r
+ ),\r
+};\r
+\r
+// ############################## STACKS (TASKS) ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+DECLARE_STACK(etask_m_non,2048);\r
+\r
+// ################################## TASKS #################################\r
+GEN_TASK_HEAD {\r
+ GEN_ETASK( OsIdle,\r
+ 0,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ 0 \r
+ ),\r
+ GEN_BTASK(\r
+ btask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_ll_non,\r
+ 3,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_m_full,\r
+ 5,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_ETASK(\r
+ etask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_full,\r
+ 5,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ RES_MASK_std_1 | 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_non,\r
+ 5,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+};\r
+\r
+// ################################## HOOKS #################################\r
+GEN_HOOKS( \r
+ StartupHook, \r
+ NULL, \r
+ ShutdownHook, \r
+ ErrorHook,\r
+ PreTaskHook, \r
+ PostTaskHook \r
+);\r
+\r
+// ################################## ISRS ##################################\r
+\r
+\r
+// ############################ SCHEDULE TABLES #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.h)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Thu Sep 30 13:27:37 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2)
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1 0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go 1\r
+#define EVENT_MASK_go2 2\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_std_1 0\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_std_1 (1 << 0)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full 1\r
+#define TASK_ID_btask_l_full 2\r
+#define TASK_ID_btask_ll_non 3\r
+#define TASK_ID_btask_m_full 4\r
+#define TASK_ID_etask_h_full 5\r
+#define TASK_ID_etask_l_full 6\r
+#define TASK_ID_etask_m_full 7\r
+#define TASK_ID_etask_m_non 8\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+void etask_m_non( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE 2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT 0 \r
+#define OS_TASK_CNT 9\r
+#define OS_SCHTBL_CNT 0\r
+#define OS_COUNTER_CNT 1\r
+#define OS_EVENTS_CNT 2\r
+#define OS_ISRS_CNT 0\r
+#define OS_RESOURCE_CNT 1\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG STD_ON\r
+\r
+#define OS_SC1 STD_ON \r
+#define OS_STACK_MONITORING STD_ON\r
+#define OS_STATUS_EXTENDED STD_ON\r
+#define OS_USE_GET_SERVICE_ID STD_ON\r
+#define OS_USE_PARAMETER_ACCESS STD_ON\r
+#define OS_RES_SCHEDULER STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
--- /dev/null
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+ <AR-PACKAGE>\r
+ <SHORT-NAME>config_osek_ev</SHORT-NAME>\r
+ <ELEMENTS>\r
+ <ECU-CONFIGURATION UUID="5ae9c5b8-fba6-4913-a886-cdb86dc2b884">\r
+ <SHORT-NAME>config_osek_ev</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <DOC-REVISIONS>\r
+ <DOC-REVISION/>\r
+ </DOC-REVISIONS>\r
+ <SDGS>\r
+ <SDG GID="Arccore::EcuOptions">\r
+ <SD GID="MCU">Undefined MCU</SD>\r
+ <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_03_ev</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/config_osek_ev/SwComposition_config_osek_ev</ECU-SW-COMPOSITION-REF>\r
+ <MODULE-REFS>\r
+ <MODULE-REF DEST="MODULE-CONFIGURATION">/config_osek_ev/Os</MODULE-REF>\r
+ </MODULE-REFS>\r
+ </ECU-CONFIGURATION>\r
+ <ECU-SW-COMPOSITION UUID="4bf548b2-edc6-436d-a4df-98a43df64955">\r
+ <SHORT-NAME>SwComposition_config_osek_ev</SHORT-NAME>\r
+ </ECU-SW-COMPOSITION>\r
+ <MODULE-CONFIGURATION UUID="e3a90a5a-3a2c-4b90-82fa-498d4bf14895">\r
+ <SHORT-NAME>Os</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <SDGS>\r
+ <SDG/>\r
+ <SDG GID="Arccore::ModuleOptions">\r
+ <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+ <SD GID="ARCCORE_EDITOR_VERSION">2.0.7</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+ <CONTAINERS>\r
+ <CONTAINER UUID="46e7afa2-40d4-4969-9216-dbb68fd7dc71">\r
+ <SHORT-NAME>OsOS</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+ <VALUE>1000</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+ <VALUE>512</VALUE>\r
+ </INTEGER-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="5c123a65-e644-421a-be3b-62886c189f46">\r
+ <SHORT-NAME>OsHooks</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="179b1eed-bae4-4ff9-8101-c81794d849be">\r
+ <SHORT-NAME>etask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>6</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="c7934bf2-d3cf-4df2-822a-c872121dcd2b">\r
+ <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_ev/Os/std_1</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="b1f99972-b3c7-41ec-a1ec-0d4dbe6b2e73">\r
+ <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="2f0895f3-1d8a-4169-8fe1-105ff68a3a5a">\r
+ <SHORT-NAME>etask_l_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="f120ab09-188b-463b-a9e4-94f60e84f125">\r
+ <SHORT-NAME>btask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>6</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="c3213aac-578d-4870-9e2a-7b0a731f9ae3">\r
+ <SHORT-NAME>btask_m_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="9de6649a-e85b-4a49-a9f4-5055e02480ca">\r
+ <SHORT-NAME>btask_l_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="de75266a-d9ea-4225-803f-b8bc02a446bf">\r
+ <SHORT-NAME>go</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="83c2a703-f295-4d91-b3c7-46bc6913e80e">\r
+ <SHORT-NAME>Counter1</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+ <VALUE>65535</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+ <VALUE>0</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+ <VALUE>0</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+ <VALUE>OS_TICK</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="92cc71da-7618-4431-90e4-f8451031d2e7">\r
+ <SHORT-NAME>etask_m_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="647b5042-793f-4f1c-bf5f-94e1bfd38bb0">\r
+ <SHORT-NAME>go2</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="5173867e-16a5-460a-acdf-1ddd6faeed00">\r
+ <SHORT-NAME>btask_ll_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>3</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="2daf3826-ed29-470d-bbb7-73cf44e2bb24">\r
+ <SHORT-NAME>std_1</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+ <VALUE>STANDARD</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </CONTAINERS>\r
+ </MODULE-CONFIGURATION>\r
+ </ELEMENTS>\r
+ <SUB-PACKAGES>\r
+ <AR-PACKAGE UUID="95a91a77-4b4b-49b2-81af-71ed5700871a">\r
+ <SHORT-NAME>GeneratedSystemSignals</SHORT-NAME>\r
+ <SUB-PACKAGES>\r
+ <AR-PACKAGE>\r
+ <SHORT-NAME>Data</SHORT-NAME>\r
+ <ELEMENTS>\r
+ <INTEGER-TYPE>\r
+ <SHORT-NAME>UInt8</SHORT-NAME>\r
+ <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0</LOWER-LIMIT>\r
+ <UPPER-LIMIT INTERVAL-TYPE="CLOSED">256</UPPER-LIMIT>\r
+ </INTEGER-TYPE>\r
+ <INTEGER-TYPE>\r
+ <SHORT-NAME>UInt16</SHORT-NAME>\r
+ <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0</LOWER-LIMIT>\r
+ <UPPER-LIMIT INTERVAL-TYPE="CLOSED">65535</UPPER-LIMIT>\r
+ </INTEGER-TYPE>\r
+ <INTEGER-TYPE>\r
+ <SHORT-NAME>UInt32</SHORT-NAME>\r
+ <LOWER-LIMIT INTERVAL-TYPE="CLOSED">-2147483648</LOWER-LIMIT>\r
+ <UPPER-LIMIT INTERVAL-TYPE="CLOSED">2147483647</UPPER-LIMIT>\r
+ </INTEGER-TYPE>\r
+ <INTEGER-TYPE>\r
+ <SHORT-NAME>SInt8</SHORT-NAME>\r
+ <LOWER-LIMIT INTERVAL-TYPE="CLOSED">-128</LOWER-LIMIT>\r
+ <UPPER-LIMIT INTERVAL-TYPE="CLOSED">127</UPPER-LIMIT>\r
+ </INTEGER-TYPE>\r
+ <INTEGER-TYPE>\r
+ <SHORT-NAME>SInt16</SHORT-NAME>\r
+ <LOWER-LIMIT INTERVAL-TYPE="CLOSED">-32768</LOWER-LIMIT>\r
+ <UPPER-LIMIT INTERVAL-TYPE="CLOSED">32767</UPPER-LIMIT>\r
+ </INTEGER-TYPE>\r
+ </ELEMENTS>\r
+ <SUB-PACKAGES>\r
+ <AR-PACKAGE>\r
+ <SHORT-NAME>IntegerLiterals</SHORT-NAME>\r
+ </AR-PACKAGE>\r
+ </SUB-PACKAGES>\r
+ </AR-PACKAGE>\r
+ </SUB-PACKAGES>\r
+ </AR-PACKAGE>\r
+ </SUB-PACKAGES>\r
+ </AR-PACKAGE>\r
+ </TOP-LEVEL-PACKAGES></AUTOSAR>\r
--- /dev/null
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += osek_ev.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+/*\r
+ * Created on: 4 aug 2010\r
+ * Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_EV_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l - low prio\r
+ * m - medium\r
+ * h - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+ OSEK_EV_01 = 1,\r
+ OSEK_EV_02,\r
+ OSEK_EV_03,\r
+ OSEK_EV_04,\r
+ OSEK_EV_05,\r
+ OSEK_EV_06,\r
+ OSEK_EV_07,\r
+ OSEK_EV_08,\r
+ OSEK_EV_09,\r
+ OSEK_EV_10,\r
+ OSEK_EV_11,\r
+ OSEK_EV_12,\r
+ OSEK_EV_13,\r
+ OSEK_EV_14,\r
+ OSEK_EV_15,\r
+ OSEK_EV_16,\r
+ OSEK_EV_17,\r
+ OSEK_EV_18,\r
+ OSEK_EV_19,\r
+ OSEK_EV_20,\r
+ OSEK_EV_21,\r
+ OSEK_EV_22,\r
+ OSEK_EV_23,\r
+ OSEK_EV_24,\r
+ OSEK_EV_25,\r
+ OSEK_EV_26,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static uint8_t activations = 0;\r
+\r
+static void isrSoftInt1( void ) {\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_EV_07:\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+ StatusType rv;\r
+ TaskType taskId;\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_EV_12:\r
+ TEST_SET_FIXTURE(OSEK_EV_12, SEQ_NR_02 );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+ break;\r
+ case OSEK_EV_23:\r
+ TEST_SET_FIXTURE(OSEK_EV_23, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+\r
+void TestTaskRunLowerPrio( void ) {\r
+ StatusType rv;\r
+ /* Activate lowest prioriy task */\r
+ rv = ActivateTask(TASK_ID_btask_ll_non);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Let the low prio task run */\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ rv = ClearEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void TestActivateAndWait( TaskType task ) {\r
+ StatusType rv;\r
+ rv = ActivateTask(task);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Let the low prio task run */\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+void btask_h_full( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_EV_11:\r
+ TEST_SET_FIXTURE(OSEK_EV_11, SEQ_NR_02 );\r
+ rv = ClearEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OS_ACCESS );\r
+ break;\r
+ case OSEK_EV_21:\r
+ TEST_SET_FIXTURE(OSEK_EV_21, SEQ_NR_02 );\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OS_ACCESS );\r
+ TEST_SET_FIXTURE(OSEK_EV_21, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void etask_h_full( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_EV_08:\r
+ TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go | EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_05 );\r
+ break;\r
+ case OSEK_EV_09:\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_04 );\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_m_full( void ) {\r
+\r
+}\r
+\r
+void btask_ll_non( void ) {\r
+ StatusType rv;\r
+ /* Used for scheduling ONLY */\r
+ rv = SetEvent(TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+void OsIdle(void) {\r
+ while(1);\r
+}\r
+\r
+\r
+void btask_l_non ( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+\r
+void etask_m_non ( void ) {\r
+ StatusType rv;\r
+ TaskStateType taskState;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_EV_04:\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_03 );\r
+ /* Verify that task is in waiting */\r
+ rv = GetTaskState(TASK_ID_etask_m_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_WAITING);\r
+ /* Set the Event */\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Verify state, again */\r
+ rv = GetTaskState(TASK_ID_etask_m_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_READY);\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_04 );\r
+ break;\r
+ case OSEK_EV_05:\r
+ TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_03 );\r
+ /* Set event in etask_m_full that it is NOT waiting for */\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_04 );\r
+ /* Cleanup, and let it run */\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_05 );\r
+ break;\r
+ case OSEK_EV_09:\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_02 );\r
+ /* make higher prio task ready */\r
+ rv = ActivateTask( TASK_ID_etask_h_full );\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Do the actual SetEvent() test */\r
+ rv = SetEvent( TASK_ID_etask_h_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_l_full ( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_EV_09:\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+}\r
+\r
+void etask_l_full ( void ) {\r
+ StatusType rv;\r
+ EventMaskType mask;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_EV_06:\r
+ TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_03 );\r
+ /* Set event preempt us */\r
+ rv = SetEvent(TASK_ID_etask_m_full,EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_05 );\r
+ break;\r
+ case OSEK_EV_07:\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_03 );\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_06 );\r
+ break;\r
+ case OSEK_EV_10:\r
+ TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_03 );\r
+ break;\r
+ case OSEK_EV_19:\r
+ TEST_SET_FIXTURE(OSEK_EV_19, SEQ_NR_03 );\r
+ rv = ClearEvent( EVENT_MASK_go2 );\r
+ break;\r
+ case OSEK_EV_20:\r
+ TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_02 );\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_03 );\r
+ rv = GetEvent( TASK_ID_etask_m_full, &mask );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( mask == EVENT_MASK_go2 );\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ default:\r
+ break;\r
+ }\r
+ TerminateTask();\r
+}\r
+\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+ StatusType rv;\r
+ TaskType taskId;\r
+ TaskType isrTask;\r
+ TaskStateType taskState;\r
+ EventMaskType mask;\r
+\r
+ /** @treq OSEK_EV_01\r
+ *\r
+ * Call SetEvent() with invalid Task ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_EV_01, SEQ_NR_01 );\r
+ rv = SetEvent(TASK_ID_ILL,EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OS_ID );\r
+\r
+ /** @treq OSEK_EV_02\r
+ *\r
+ * Call SetEvent() for basic task\r
+ *\r
+ * Service returns E_OS_ACCESS\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_EV_02, SEQ_NR_01 );\r
+ rv = SetEvent( TASK_ID_btask_l_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OS_ACCESS );\r
+\r
+\r
+ // --------------------------------------------------------------------\r
+\r
+ /** @treq OSEK_EV_03\r
+ *\r
+ * Call SetEvent() for suspended extended task\r
+ *\r
+ * Service returns E_OS_STATE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_03, SEQ_NR_01 );\r
+ rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OS_STATE );\r
+\r
+ /** @treq OSEK_EV_04\r
+ *\r
+ * Call SetEvent() from non-preemptive task on waiting extended\r
+ * task which is waiting for at least one of the requested events\r
+ *\r
+ * Requested events are set. Running task is not preempted.\r
+ * Waiting task becomes ready Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_m_non );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_05 );\r
+\r
+ /** @treq OSEK_EV_05\r
+ *\r
+ * Call SetEvent() from non-preemptive task on waiting extended\r
+ * task which is not waiting for any of the requested events\r
+ *\r
+ * Requested events are set. Running task is not preempted.\r
+ * Waiting task doesn\92t become ready. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_m_non );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go | EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_06 );\r
+\r
+ /** @treq OSEK_EV_06\r
+ *\r
+ * Call SetEvent() from preemptive task on waiting extended task which\r
+ * is waiting for at least one of the requested events and has higher\r
+ * priority than running task\r
+ *\r
+ * Requested events are set. Running task becomes ready (is preempted)\r
+ * Waiting task becomes running. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_l_full );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_02 );\r
+ /* Let etask__l_full */\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_04 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_06 );\r
+\r
+\r
+ /** @treq OSEK_EV_07\r
+ *\r
+ * Call SetEvent() from preemptive task on waiting extended\r
+ * task which is waiting for at least one of the requested\r
+ * events and has equal or lower priority than running task\r
+ *\r
+ * Requested events are set. Running task is not preempted.\r
+ * Waiting task becomes ready. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_l_full );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_02 );\r
+ /* Let the lowerprio task hit WaitEvent() */\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_04 );\r
+ /* Set the Event, no preempt */\r
+ rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_05 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_07 );\r
+\r
+ /** @treq OSEK_EV_08\r
+ *\r
+ * Call SetEvent() from preemptive task on waiting extended\r
+ * task which is not waiting for any of the requested events\r
+ *\r
+ * Requested events are set. Running task is not preempted.\r
+ * Waiting task doesn\92t become ready. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_h_full );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_03 );\r
+ rv = SetEvent( TASK_ID_etask_h_full, EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_04 );\r
+ /* Cleanup, Let it run */\r
+ rv = SetEvent( TASK_ID_etask_h_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_06 );\r
+\r
+ /** @treq OSEK_EV_09\r
+ *\r
+ * Call SetEvent() from non-preemptive task on ready extended\r
+ * task.\r
+ *\r
+ * Requested events are set. Running task is not preempted.\r
+ * Service returns E_OK
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_etask_m_non);\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_05 );\r
+\r
+\r
+ /** @treq OSEK_EV_10\r
+ *\r
+ * Call SetEvent() from preemptive task on ready extended task\r
+ *\r
+ * Requested events are set. Running task is not preempted.\r
+ * Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_l_full );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_02 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_EV_11\r
+ *\r
+ * Call ClearEvent() from basic task\r
+ *\r
+ * Service returns E_OS_ACCESS\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_11, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_btask_h_full );\r
+ TEST_SET_FIXTURE(OSEK_EV_11, SEQ_NR_03 );\r
+\r
+\r
+ /** @treq OSEK_EV_12\r
+ *\r
+ * Call ClearEvent() from ISR2\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+ /* Create an ISR2 */\r
+ TEST_SET_FIXTURE(OSEK_EV_12, SEQ_NR_01 );\r
+ isrTask = Os_Arc_CreateIsr( isrSoftInt0, 8/*prio*/,"soft_0");\r
+ Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_0);\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_EV_12, SEQ_NR_03 );\r
+\r
+\r
+ /** @treq OSEK_EV_13\r
+ *\r
+ * Call ClearEvent() from ISR3\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ *\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_13, SEQ_NR_01 );\r
+ /* Not applicatable */\r
+\r
+ /** @treq OSEK_EV_14\r
+ *\r
+ * Call ClearEvent() from extended task\r
+ *\r
+ * Requested events are cleared. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_14, SEQ_NR_01 );\r
+ /* This is already covered in this testsystem */\r
+\r
+ /** @treq OSEK_EV_15\r
+ *\r
+ * Call GetEvent() with invalid Task ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_15, SEQ_NR_01 );\r
+ rv = GetEvent(TASK_ID_ILL, &mask);\r
+ TEST_ASSERT( rv == E_OS_ID );\r
+\r
+ /** @treq OSEK_EV_16\r
+ *\r
+ * Call GetEvent() for basic task\r
+ *\r
+ * Service returns E_OS_ACCESS\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_16, SEQ_NR_01 );\r
+ rv = GetEvent(TASK_ID_btask_h_full, &mask);\r
+ TEST_ASSERT( rv == E_OS_ACCESS);\r
+\r
+ /** @treq OSEK_EV_17\r
+ *\r
+ * Call GetEvent() for suspended extended task\r
+ *\r
+ * Service returns E_OS_STATE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_17, SEQ_NR_01 );\r
+ rv = GetEvent(TASK_ID_etask_h_full, &mask);\r
+ TEST_ASSERT( rv == E_OS_STATE);\r
+\r
+ /** @treq OSEK_EV_18\r
+ *\r
+ * Call GetEvent() for running extended task\r
+ *\r
+ * Return current state of all event bits. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_18, SEQ_NR_01 );\r
+ rv = GetTaskID(&taskId);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = GetEvent(taskId, &mask);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_ASSERT( mask == 0 );\r
+\r
+ /** @treq OSEK_EV_19\r
+ *\r
+ * Call GetEvent() for ready extended task\r
+ *\r
+ * Return current state of all event bits. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_19, SEQ_NR_01 );\r
+ /* Make it ready */\r
+ rv = ActivateTask(TASK_ID_etask_l_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ /* Set an event */\r
+ rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+ rv = GetEvent( TASK_ID_etask_l_full, &mask );\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_ASSERT( mask == EVENT_MASK_go2 );\r
+\r
+ TEST_SET_FIXTURE(OSEK_EV_19, SEQ_NR_02 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_EV_19, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_EV_20\r
+ *\r
+ * Call GetEvent() for waiting extended task\r
+ *\r
+ * Return current state of all event bits. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_etask_l_full);\r
+ TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_04 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_05 );\r
+\r
+\r
+ /** @treq OSEK_EV_21\r
+ *\r
+ * Call WaitEvent() from basic task\r
+ *\r
+ * Service returns E_OS_ACCESS\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_21, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_btask_h_full );\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_EV_21, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_EV_22\r
+ *\r
+ * Call WaitEvent() from extended task which occupies a resource\r
+ *\r
+ * Service returns E_OS_RESOURCE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_22, SEQ_NR_01 );\r
+ rv = GetResource(RES_ID_std_1);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OS_RESOURCE);\r
+ rv = ReleaseResource(RES_ID_std_1);\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+ /** @treq OSEK_EV_23\r
+ *\r
+ * Call WaitEvent() from ISR2\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_23, SEQ_NR_01 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_EV_23, SEQ_NR_03 );\r
+\r
+\r
+ /** @treq OSEK_EV_24\r
+ * Call WaitEvent() from ISR3\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_24, SEQ_NR_01 );\r
+ /* Not applicable */\r
+\r
+ /** @treq OSEK_EV_25\r
+ *\r
+ * Call WaitEvent() from extended task. None of the events waited for is set\r
+ *\r
+ * Running task becomes waiting and ready task with highest priority is executed Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_25, SEQ_NR_01 );\r
+ /* Already by using TestActivateAndWait() */\r
+\r
+ /** @treq OSEK_EV_26\r
+ *\r
+ * Call WaitEvent() from extended task. At least one event waited for is already set\r
+ *\r
+ * No preemption of running task Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_26, SEQ_NR_01 );\r
+ rv = SetEvent( taskId, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_EV_26, SEQ_NR_02 );\r
+\r
+ TestExit(0);\r
+}\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.c)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Mon Oct 04 08:11:07 CEST 2010
+*/
+
+ \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h" // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ############################### DEBUG OUTPUT #############################\r
+uint32 os_dbg_mask = D_RESOURCE |D_SCHTBL |D_EVENT |D_TASK |D_ALARM;\r
+ \r
+\r
+\r
+// ################################# COUNTERS ###############################\r
+GEN_COUNTER_HEAD {\r
+ GEN_COUNTER( COUNTER_ID_Counter1,\r
+ "Counter1",\r
+ COUNTER_TYPE_HARD,\r
+ COUNTER_UNIT_NANO,\r
+ 0xffff,\r
+ 1,\r
+ 0,\r
+ 0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ################################## ALARMS ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################ RESOURCES ###############################\r
+GEN_RESOURCE_HEAD {\r
+ GEN_RESOURCE(\r
+ RES_ID_int_1,\r
+ RESOURCE_TYPE_INTERNAL,\r
+ 0\r
+ ),\r
+ GEN_RESOURCE(\r
+ RES_ID_int_2,\r
+ RESOURCE_TYPE_INTERNAL,\r
+ 0\r
+ ),\r
+ GEN_RESOURCE(\r
+ RES_ID_std_1,\r
+ RESOURCE_TYPE_STANDARD,\r
+ 0\r
+ ),\r
+ GEN_RESOURCE(\r
+ RES_ID_std_h,\r
+ RESOURCE_TYPE_STANDARD,\r
+ 0\r
+ ),\r
+};\r
+\r
+// ############################## STACKS (TASKS) ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_l_non,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(btask_m_non,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+\r
+// ################################## TASKS #################################\r
+GEN_TASK_HEAD {\r
+ GEN_ETASK( OsIdle,\r
+ 0,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ 0 \r
+ ),\r
+ GEN_BTASK(\r
+ btask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ RES_MASK_std_h | 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_l_non,\r
+ 4,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ RES_MASK_std_h | 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_ll_non,\r
+ 3,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_m_full,\r
+ 5,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ RES_MASK_std_h | 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_m_non,\r
+ 5,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_ETASK(\r
+ etask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ RES_MASK_std_h | 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_full,\r
+ 5,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ RES_MASK_std_1 | 0\r
+ ),\r
+ \r
+ \r
+};\r
+\r
+// ################################## HOOKS #################################\r
+GEN_HOOKS( \r
+ StartupHook, \r
+ NULL, \r
+ ShutdownHook, \r
+ ErrorHook,\r
+ PreTaskHook, \r
+ PostTaskHook \r
+);\r
+\r
+// ################################## ISRS ##################################\r
+\r
+\r
+// ############################ SCHEDULE TABLES #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.h)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Mon Oct 04 08:11:07 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2)
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1 0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go 1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_int_1 0\r
+#define RES_ID_int_2 1\r
+#define RES_ID_std_1 2\r
+#define RES_ID_std_h 3\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_int_1 (1 << 0)\r
+#define RES_MASK_int_2 (1 << 1)\r
+#define RES_MASK_std_1 (1 << 2)\r
+#define RES_MASK_std_h (1 << 3)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full 1\r
+#define TASK_ID_btask_l_full 2\r
+#define TASK_ID_btask_l_non 3\r
+#define TASK_ID_btask_ll_non 4\r
+#define TASK_ID_btask_m_full 5\r
+#define TASK_ID_btask_m_non 6\r
+#define TASK_ID_etask_h_full 7\r
+#define TASK_ID_etask_l_full 8\r
+#define TASK_ID_etask_m_full 9\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_l_non( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void btask_m_non( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE 2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT 0 \r
+#define OS_TASK_CNT 10\r
+#define OS_SCHTBL_CNT 0\r
+#define OS_COUNTER_CNT 1\r
+#define OS_EVENTS_CNT 1\r
+#define OS_ISRS_CNT 0\r
+#define OS_RESOURCE_CNT 4\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG STD_ON\r
+\r
+#define OS_SC1 STD_ON \r
+#define OS_STACK_MONITORING STD_ON\r
+#define OS_STATUS_EXTENDED STD_ON\r
+#define OS_USE_GET_SERVICE_ID STD_ON\r
+#define OS_USE_PARAMETER_ACCESS STD_OFF\r
+#define OS_RES_SCHEDULER STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
--- /dev/null
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+ <AR-PACKAGE>\r
+ <SHORT-NAME>config_osek_rm</SHORT-NAME>\r
+ <ELEMENTS>\r
+ <ECU-CONFIGURATION UUID="1cc76430-48de-4bcf-ba4b-b31323e01607">\r
+ <SHORT-NAME>config_osek_rm</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <DOC-REVISIONS>\r
+ <DOC-REVISION/>\r
+ </DOC-REVISIONS>\r
+ <SDGS>\r
+ <SDG GID="Arccore::EcuOptions">\r
+ <SD GID="MCU">Undefined MCU</SD>\r
+ <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_04_rm</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/config_osek_rm/SwComposition_config_osek_rm</ECU-SW-COMPOSITION-REF>\r
+ <MODULE-REFS>\r
+ <MODULE-REF DEST="MODULE-CONFIGURATION">/config_osek_rm/Os</MODULE-REF>\r
+ </MODULE-REFS>\r
+ </ECU-CONFIGURATION>\r
+ <ECU-SW-COMPOSITION UUID="68ecea8c-16c5-4723-bfcc-fc11f4f72291">\r
+ <SHORT-NAME>SwComposition_config_osek_rm</SHORT-NAME>\r
+ </ECU-SW-COMPOSITION>\r
+ <MODULE-CONFIGURATION UUID="e3a90a5a-3a2c-4b90-82fa-498d4bf14895">\r
+ <SHORT-NAME>Os</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <SDGS>\r
+ <SDG/>\r
+ <SDG GID="Arccore::ModuleOptions">\r
+ <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+ <SD GID="ARCCORE_EDITOR_VERSION">2.0.7</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+ <CONTAINERS>\r
+ <CONTAINER UUID="46e7afa2-40d4-4969-9216-dbb68fd7dc71">\r
+ <SHORT-NAME>OsOS</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+ <VALUE>1000</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+ <VALUE>512</VALUE>\r
+ </INTEGER-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="5c123a65-e644-421a-be3b-62886c189f46">\r
+ <SHORT-NAME>OsHooks</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="179b1eed-bae4-4ff9-8101-c81794d849be">\r
+ <SHORT-NAME>etask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>6</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="c7934bf2-d3cf-4df2-822a-c872121dcd2b">\r
+ <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_1</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="b1f99972-b3c7-41ec-a1ec-0d4dbe6b2e73">\r
+ <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="2f0895f3-1d8a-4169-8fe1-105ff68a3a5a">\r
+ <SHORT-NAME>etask_l_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_h</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="f120ab09-188b-463b-a9e4-94f60e84f125">\r
+ <SHORT-NAME>btask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>6</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_h</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="c3213aac-578d-4870-9e2a-7b0a731f9ae3">\r
+ <SHORT-NAME>btask_m_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_h</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="9de6649a-e85b-4a49-a9f4-5055e02480ca">\r
+ <SHORT-NAME>btask_l_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="47b32026-3fe6-4fd5-b26e-fb0faa6bdac3">\r
+ <SHORT-NAME>btask_ll_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>3</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="de75266a-d9ea-4225-803f-b8bc02a446bf">\r
+ <SHORT-NAME>go</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="83c2a703-f295-4d91-b3c7-46bc6913e80e">\r
+ <SHORT-NAME>Counter1</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+ <VALUE>65535</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+ <VALUE>0</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+ <VALUE>0</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+ <VALUE>OS_TICK</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="92cc71da-7618-4431-90e4-f8451031d2e7">\r
+ <SHORT-NAME>btask_m_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="84a2cc88-79f3-45cd-bc3b-afcd525ba482">\r
+ <SHORT-NAME>std_1</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+ <VALUE>STANDARD</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="6cec9cf6-c09c-4f41-b460-8d2229152b1a">\r
+ <SHORT-NAME>std_h</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+ <VALUE>STANDARD</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="a7582418-2f8e-4267-ad5a-cfb69d908787">\r
+ <SHORT-NAME>btask_l_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>BASIC</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_h</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="b54a2fdc-aa48-4397-a4af-9128f3721470">\r
+ <SHORT-NAME>int_1</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+ <VALUE>INTERNAL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="c2429cd6-2b8d-4351-bacc-6b2003b6f05b">\r
+ <SHORT-NAME>int_2</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+ <VALUE>INTERNAL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </CONTAINERS>\r
+ </MODULE-CONFIGURATION>\r
+ </ELEMENTS>\r
+ </AR-PACKAGE>\r
+ </TOP-LEVEL-PACKAGES></AUTOSAR>\r
--- /dev/null
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += test_osek_rm.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+/*\r
+ * Created on: 4 aug 2010\r
+ * Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_RM_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l - low prio\r
+ * m - medium\r
+ * h - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+ OSEK_RM_01 = 1,\r
+ OSEK_RM_02,\r
+ OSEK_RM_03,\r
+ OSEK_RM_04,\r
+ OSEK_RM_05,\r
+ OSEK_RM_06,\r
+ OSEK_RM_07,\r
+ OSEK_RM_08,\r
+ OSEK_RM_09,\r
+ OSEK_RM_10,\r
+ OSEK_RM_11,\r
+ OSEK_RM_12,\r
+ OSEK_RM_13,\r
+ OSEK_RM_14,\r
+ OSEK_RM_15,\r
+ OSEK_RM_16,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+\r
+void TestTaskRunLowerPrio( void ) {\r
+ StatusType rv;\r
+ /* Activate lowest prioriy task */\r
+ rv = ActivateTask(TASK_ID_btask_ll_non);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Let the low prio task run */\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ rv = ClearEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void TestActivateAndWait( TaskType task ) {\r
+ StatusType rv;\r
+ rv = ActivateTask(task);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Let the low prio task run */\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+#if 0\r
+static void isrSoftInt1( void ) {\r
+ switch ( TestWorld.fixtureNr ) {\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+ StatusType rv;\r
+ TaskType taskId;\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+#endif\r
+\r
+void OsIdle(void) {\r
+ while(1);\r
+}\r
+\r
+\r
+void btask_l_non ( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_RM_06:\r
+ TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_02 );\r
+ rv = GetResource(RES_ID_std_h);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = ActivateTask( TASK_ID_btask_m_non );\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = Schedule();\r
+ TEST_ASSERT( rv == E_OS_RESOURCE);\r
+ TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_03 );\r
+ rv = ReleaseResource(RES_ID_std_h);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_04 );\r
+ break;\r
+ case OSEK_RM_15:\r
+ TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_02 );\r
+ rv = GetResource(RES_SCHEDULER);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = ActivateTask( TASK_ID_btask_m_non );\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = Schedule();\r
+ TEST_ASSERT( rv == E_OS_RESOURCE);\r
+ TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_03 );\r
+ rv = ReleaseResource(RES_SCHEDULER);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_m_non ( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_RM_06:\r
+ TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_05 );\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK);\r
+ break;\r
+ case OSEK_RM_07:\r
+ TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_04 );\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK);\r
+ break;\r
+ case OSEK_RM_15:\r
+ TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_05 );\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK);\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+void btask_h_full ( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_RM_08:\r
+ TEST_SET_FIXTURE(OSEK_RM_08, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+}\r
+\r
+void btask_l_full ( void ) {\r
+\r
+}\r
+\r
+void btask_ll_non( void ) {\r
+ StatusType rv;\r
+ /* Used for scheduling ONLY */\r
+ rv = SetEvent(TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_m_full ( void ) {\r
+\r
+}\r
+\r
+void etask_h_full( void ) {\r
+\r
+}\r
+\r
+void etask_l_full( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_RM_07:\r
+ TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_02 );\r
+ rv = GetResource(RES_ID_std_h);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = ActivateTask( TASK_ID_btask_m_non );\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_03 );\r
+ /* reshedule to btask_m_non */\r
+ rv = ReleaseResource(RES_ID_std_h);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_06 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+ StatusType rv;\r
+\r
+ /** @treq OSEK_RM_01\r
+ *\r
+ * Call GetResource() from task which has no access to this resource\r
+ *\r
+ * Service returns E_OS_ACCESS\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_01, SEQ_NR_01 );\r
+ rv = GetResource( RES_ID_std_h);\r
+ TEST_ASSERT( rv = E_OS_ACCESS )\r
+\r
+ /** @treq OSEK_RM_02\r
+ *\r
+ * Call GetResource() from task with invalid resource ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_02, SEQ_NR_01 );\r
+ rv = GetResource( RES_ID_ILL);\r
+ TEST_ASSERT( rv = E_OS_ID );\r
+\r
+ /** @treq OSEK_RM_03\r
+ *\r
+ * Call GetResource() from ISR2\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_03, SEQ_NR_01 );\r
+ /* This test is not applicable since it is allowed in OSEK\r
+ * to do GetResource() from ISR2
+ */\r
+\r
+ /** @treq OSEK_RM_04\r
+ *\r
+ * Call GetResource() from ISR3\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_04, SEQ_NR_01 );\r
+ /* Not applicable */\r
+\r
+ /** @treq OSEK_RM_05\r
+ *\r
+ * Call GetResource() from task with too many resources occupied in parallel\r
+ *\r
+ * Service returns E_OS_LIMIT\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_05, SEQ_NR_01 );\r
+ /* Not applicable */\r
+\r
+ /** @treq OSEK_RM_06\r
+ *\r
+ * Test Priority Ceiling Protocol:\r
+ * Call GetResource() from non-preemptive task, activate task with priority\r
+ * higher than running task but lower than ceiling priority, and force\r
+ * rescheduling\r
+ *\r
+ * Resource is occupied and running task\92s priority is set to resource\92s\r
+ * ceiling priority. Service returns E_OK. No preemption occurs after\r
+ * activating the task with higher priority and rescheduling\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_l_non);\r
+ TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_06 );\r
+\r
+ /** @treq OSEK_RM_07\r
+ *\r
+ * Test Priority Ceiling Protocol:\r
+ * Call GetResource()from preemptive task, and activate task with priority\r
+ * higher than running task but lower than ceiling priority\r
+ *\r
+ * Resource is occupied and running task\92s priority is set to resource\92s\r
+ * ceiling priority. Service returns E_OK. No preemption occurs after\r
+ * activating the task with higher priority\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_etask_l_full);\r
+ TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_05 );\r
+ TestTaskRunLowerPrio();\r
+ TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_07 );\r
+\r
+ /** @treq OSEK_RM_08\r
+ *\r
+ * Call GetResource() for resource RES_SCHEDULER\r
+ *\r
+ * Resource is occupied and running task\92s priority is set to resource\92s\r
+ * ceiling priority. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_08, SEQ_NR_01 );\r
+ rv = GetResource( RES_SCHEDULER );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ActivateTask( TASK_ID_btask_h_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_RM_08, SEQ_NR_02 );\r
+ rv = ReleaseResource( RES_SCHEDULER);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_RM_08, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_RM_09\r
+ *\r
+ * Call ReleaseResource() from task with invalid resource ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_09, SEQ_NR_01 );\r
+ rv = ReleaseResource( RES_ID_ILL);\r
+ TEST_ASSERT( rv == E_OS_ID);\r
+\r
+ /** @treq OSEK_RM_10\r
+ *\r
+ * Call ReleaseResource() from ISR2\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_10, SEQ_NR_01 );\r
+ /* This test is not applicable since it is allowed in OSEK\r
+ * to do GetResource() from ISR2\r
+ */\r
+\r
+ /** @treq OSEK_RM_11\r
+ *\r
+ * Call ReleaseResource() from ISR3\r
+ *\r
+ * Service returns E_OS_CALLEVEL\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_RM_11, SEQ_NR_01 );\r
+ /* Not applicable */\r
+\r
+ /** @treq OSEK_RM_12\r
+ *\r
+ * Call ReleaseResource() from task with resource which is not occupied\r
+ *\r
+ * Service returns E_OS_NOFUNC\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_12, SEQ_NR_01 );\r
+ rv = ReleaseResource( RES_ID_std_1 );\r
+ TEST_ASSERT( rv == E_OS_NOFUNC );\r
+\r
+ /** @treq OSEK_RM_13\r
+ *\r
+ * Call ReleaseResource() from non-preemptive task\r
+ *\r
+ * Resource is released and running task\92s priority is reset.\r
+ * No preemption of running task. Service returns E_OK\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_RM_13, SEQ_NR_01 );\r
+ /* Already covered in OSEK_RM_06 */\r
+\r
+ /** @treq OSEK_RM_14\r
+ *\r
+ * Call ReleaseResource() from preemptive task\r
+ *\r
+ * Resource is released and running task\92s priority is reset.\r
+ * Ready task with highest priority is executed(Rescheduling).\r
+ * Service returns E_OK"\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_14, SEQ_NR_01 );\r
+ /* Already covered in OSEK_RM_07 */\r
+\r
+ /** @treq OSEK_RM_15\r
+ *\r
+ * Call ReleaseResource()from non-preemptive task for resource\r
+ * RES_SCHEDULER\r
+ *\r
+ * Resource is released and running task\92s priority is reset.\r
+ * No preemption of running task. Service returns E_OK\r
+ *\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_01 );\r
+ TestActivateAndWait(TASK_ID_btask_l_non);\r
+ TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_06 );\r
+\r
+ /** @treq OSEK_RM_16\r
+ *\r
+ * Call ReleaseResource()from preemptive task for resource\r
+ * RES_SCHEDULER\r
+ *\r
+ * Resource is released and running task\92s priority is reset.\r
+ * Ready task with highest priority is executed (Rescheduling).\r
+ * Service returns E_OK"\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_RM_16, SEQ_NR_01 );\r
+ /* Already covered in OSEK_RM_08 */\r
+\r
+ TestExit(0);\r
+}\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.c)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Sun Oct 10 18:57:50 CEST 2010
+*/
+
+ \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h" // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ############################### DEBUG OUTPUT #############################\r
+uint32 os_dbg_mask = 0;\r
+ \r
+\r
+\r
+// ################################# COUNTERS ###############################\r
+GEN_COUNTER_HEAD {\r
+ GEN_COUNTER( COUNTER_ID_soft1,\r
+ "soft1",\r
+ COUNTER_TYPE_SOFT,\r
+ COUNTER_UNIT_NANO,\r
+ 65535,\r
+ 1,\r
+ 2,\r
+ 0),\r
+ GEN_COUNTER( COUNTER_ID_system_tick,\r
+ "system_tick",\r
+ COUNTER_TYPE_HARD,\r
+ COUNTER_UNIT_NANO,\r
+ 0xffff,\r
+ 1,\r
+ 1,\r
+ 0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_system_tick;\r
+\r
+// ################################## ALARMS ################################\r
+\r
+GEN_ALARM_HEAD {\r
+ GEN_ALARM( ALARM_ID_act_etask_h_full,\r
+ "act_etask_h_full",\r
+ COUNTER_ID_soft1,\r
+ NULL,\r
+ ALARM_ACTION_ACTIVATETASK,\r
+ TASK_ID_etask_h_full,\r
+ NULL,\r
+ NULL ),\r
+ GEN_ALARM( ALARM_ID_act_etask_l_non,\r
+ "act_etask_l_non",\r
+ COUNTER_ID_soft1,\r
+ NULL,\r
+ ALARM_ACTION_ACTIVATETASK,\r
+ TASK_ID_etask_l_non,\r
+ NULL,\r
+ NULL ),\r
+ GEN_ALARM( ALARM_ID_setev_go_etask_h_full,\r
+ "setev_go_etask_h",\r
+ COUNTER_ID_soft1,\r
+ NULL,\r
+ ALARM_ACTION_SETEVENT,\r
+ TASK_ID_etask_h_full,\r
+ EVENT_MASK_go,\r
+ NULL ),\r
+ GEN_ALARM( ALARM_ID_sys_tick_act_etask_h_full,\r
+ "sys_tick_act_eta",\r
+ COUNTER_ID_system_tick,\r
+ NULL,\r
+ ALARM_ACTION_ACTIVATETASK,\r
+ TASK_ID_etask_h_full,\r
+ NULL,\r
+ NULL ),\r
+};\r
+\r
+// ################################ RESOURCES ###############################\r
+GEN_RESOURCE_HEAD {\r
+};\r
+\r
+// ############################## STACKS (TASKS) ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_non,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+\r
+// ################################## TASKS #################################\r
+GEN_TASK_HEAD {\r
+ GEN_ETASK( OsIdle,\r
+ 0,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ 0 \r
+ ),\r
+ GEN_ETASK(\r
+ etask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_l_non,\r
+ 4,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_full,\r
+ 5,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+};\r
+\r
+// ################################## HOOKS #################################\r
+GEN_HOOKS( \r
+ StartupHook, \r
+ NULL, \r
+ ShutdownHook, \r
+ ErrorHook,\r
+ PreTaskHook, \r
+ PostTaskHook \r
+);\r
+\r
+// ################################## ISRS ##################################\r
+\r
+\r
+// ############################ SCHEDULE TABLES #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.h)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Sun Oct 10 18:57:50 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2)
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+#define ALARM_ID_act_etask_h_full 0\r
+#define ALARM_ID_act_etask_l_non 1\r
+#define ALARM_ID_setev_go_etask_h_full 2\r
+#define ALARM_ID_sys_tick_act_etask_h_full 3\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_soft1 0\r
+#define COUNTER_ID_system_tick 1\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_soft1 65535\r
+#define OSMAXALLOWEDVALUE_system_tick 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go 1\r
+#define EVENT_MASK_go2 2\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_etask_h_full 1\r
+#define TASK_ID_etask_l_non 2\r
+#define TASK_ID_etask_m_full 3\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void etask_h_full( void );\r
+void etask_l_non( void );\r
+void etask_m_full( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE 2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT 4 \r
+#define OS_TASK_CNT 4\r
+#define OS_SCHTBL_CNT 0\r
+#define OS_COUNTER_CNT 2\r
+#define OS_EVENTS_CNT 2\r
+#define OS_ISRS_CNT 0\r
+#define OS_RESOURCE_CNT 0\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG STD_OFF\r
+\r
+#define OS_SC1 STD_ON \r
+#define OS_STACK_MONITORING STD_ON\r
+#define OS_STATUS_EXTENDED STD_ON\r
+#define OS_USE_GET_SERVICE_ID STD_ON\r
+#define OS_USE_PARAMETER_ACCESS STD_ON\r
+#define OS_RES_SCHEDULER STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
--- /dev/null
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+ <AR-PACKAGE>\r
+ <SHORT-NAME>config_osek_al</SHORT-NAME>\r
+ <ELEMENTS>\r
+ <ECU-CONFIGURATION UUID="5e838401-6c7f-4cc4-a310-85bfa3093061">\r
+ <SHORT-NAME>config_osek_al</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <DOC-REVISIONS>\r
+ <DOC-REVISION/>\r
+ </DOC-REVISIONS>\r
+ <SDGS>\r
+ <SDG GID="Arccore::EcuOptions">\r
+ <SD GID="MCU">Undefined MCU</SD>\r
+ <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_05_al</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/config_osek_al/SwComposition_config_osek_al</ECU-SW-COMPOSITION-REF>\r
+ <MODULE-REFS>\r
+ <MODULE-REF DEST="MODULE-CONFIGURATION">/config_osek_al/Os</MODULE-REF>\r
+ </MODULE-REFS>\r
+ </ECU-CONFIGURATION>\r
+ <ECU-SW-COMPOSITION UUID="4620a8eb-0826-482d-a426-0fddd23516bb">\r
+ <SHORT-NAME>SwComposition_config_osek_al</SHORT-NAME>\r
+ </ECU-SW-COMPOSITION>\r
+ <MODULE-CONFIGURATION UUID="2ddd0584-ca02-4843-8a4b-6ce49338b3b5">\r
+ <SHORT-NAME>Os</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <SDGS>\r
+ <SDG/>\r
+ <SDG GID="Arccore::ModuleOptions">\r
+ <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+ <SD GID="ARCCORE_EDITOR_VERSION">2.0.11</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+ <CONTAINERS>\r
+ <CONTAINER UUID="dae4ccf8-5356-4f92-99f9-8a7bd8036544">\r
+ <SHORT-NAME>OsOS</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+ <VALUE>1000</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+ <VALUE>512</VALUE>\r
+ </INTEGER-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="80901634-8bf3-4ce8-8561-420ea79862b9">\r
+ <SHORT-NAME>OsHooks</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="a382117b-e08f-421f-9c92-761545351b56">\r
+ <SHORT-NAME>act_etask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm</DEFINITION-REF>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/soft1</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="b3336daf-4158-43cb-95ca-a0ef89eb4d09">\r
+ <SHORT-NAME>OsAlarmActivateTask</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask</DEFINITION-REF>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask/OsAlarmActivateTaskRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/etask_h_full</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="c85af5eb-5f12-471d-b16c-7915cd495426">\r
+ <SHORT-NAME>soft1</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+ <VALUE>65535</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+ <VALUE>0</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+ <VALUE>SOFTWARE</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="36def18a-71ba-4f50-a4c5-02bc69c6e1a5">\r
+ <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>5</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="17733da9-ba24-49e1-971e-da4353b48aa0">\r
+ <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="218dc9e2-9a93-41c5-8b84-062c1cd6c703">\r
+ <SHORT-NAME>etask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>6</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="43ce4e8d-ca73-44de-bad4-3e8253be43e8">\r
+ <SHORT-NAME>setev_go_etask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm</DEFINITION-REF>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/soft1</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="4aeb20ed-5c69-4158-9117-b4de360aa22b">\r
+ <SHORT-NAME>OsAlarmSetEvent</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmSetEvent</DEFINITION-REF>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmSetEvent/OsAlarmSetEventRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/go</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmSetEvent/OsAlarmSetEventTaskRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/etask_h_full</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="d5f6e102-70af-4857-96fb-46808d1e6050">\r
+ <SHORT-NAME>go</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="176f4b96-0f87-4b4e-87fd-ca8fd2af0d9e">\r
+ <SHORT-NAME>system_tick</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+ <VALUE>65535</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+ <VALUE>0</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+ <VALUE>OS_TICK</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="ca1a3f14-2a6b-4982-9433-2caa410de571">\r
+ <SHORT-NAME>sys_tick_act_etask_h_full</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm</DEFINITION-REF>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/system_tick</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="a915bd71-4685-46c4-94c0-07d9962d8fd4">\r
+ <SHORT-NAME>OsAlarmActivateTask</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask</DEFINITION-REF>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask/OsAlarmActivateTaskRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/etask_h_full</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="a93c6291-acbd-439f-b4f8-391fc898bcc5">\r
+ <SHORT-NAME>etask_l_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>4</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>NON</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="e3bfa880-abbd-4a51-9fea-48d5e335182b">\r
+ <SHORT-NAME>act_etask_l_non</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm</DEFINITION-REF>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/soft1</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="54afe69a-571f-47c1-95ba-f1fa96b2ca8c">\r
+ <SHORT-NAME>OsAlarmActivateTask</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask</DEFINITION-REF>\r
+ <REFERENCE-VALUES>\r
+ <REFERENCE-VALUE>\r
+ <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask/OsAlarmActivateTaskRef</DEFINITION-REF>\r
+ <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/etask_l_non</VALUE-REF>\r
+ </REFERENCE-VALUE>\r
+ </REFERENCE-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="758b10b6-58a5-42bc-af51-76dd42f82990">\r
+ <SHORT-NAME>go2</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+ <VALUE>2</VALUE>\r
+ </INTEGER-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </CONTAINERS>\r
+ </MODULE-CONFIGURATION>\r
+ </ELEMENTS>\r
+ </AR-PACKAGE>\r
+ </TOP-LEVEL-PACKAGES></AUTOSAR>\r
--- /dev/null
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += test_osek_al.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+/*\r
+ * Created on: 4 aug 2010\r
+ * Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_AL_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l - low prio\r
+ * m - medium\r
+ * h - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+ OSEK_AL_01 = 1,\r
+ OSEK_AL_02,\r
+ OSEK_AL_03,\r
+ OSEK_AL_04,\r
+ OSEK_AL_05,\r
+ OSEK_AL_06,\r
+ OSEK_AL_07,\r
+ OSEK_AL_08,\r
+ OSEK_AL_09,\r
+ OSEK_AL_10,\r
+ OSEK_AL_11,\r
+ OSEK_AL_12,\r
+ OSEK_AL_13,\r
+ OSEK_AL_14,\r
+ OSEK_AL_15,\r
+ OSEK_AL_16,\r
+ OSEK_AL_17,\r
+ OSEK_AL_18,\r
+ OSEK_AL_19,\r
+ OSEK_AL_20,\r
+ OSEK_AL_21,\r
+ OSEK_AL_22,\r
+ OSEK_AL_23,\r
+ OSEK_AL_24,\r
+ OSEK_AL_25,\r
+ OSEK_AL_26,\r
+ OSEK_AL_27,\r
+ OSEK_AL_28,\r
+ OSEK_AL_29,\r
+ OSEK_AL_30,\r
+ OSEK_AL_31,\r
+ OSEK_AL_32,\r
+ OSEK_AL_33,\r
+ OSEK_AL_34,\r
+ OSEK_AL_35,\r
+ OSEK_AL_36,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static uint8_t activations = 0;\r
+\r
+#if 0\r
+static void isrSoftInt1( void ) {\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_07:\r
+ TEST_SET_FIXTURE(OSEK_AL_07, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+ StatusType rv;\r
+ TaskType taskId;\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_07:\r
+ TEST_SET_FIXTURE(OSEK_AL_07, SEQ_NR_02 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_1 );\r
+ break;\r
+ case OSEK_TM_09:\r
+ TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+\r
+#endif\r
+\r
+void OsIdle(void) {\r
+ while(1);\r
+}\r
+\r
+#if 0\r
+void btask_l_non ( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_09:\r
+ TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_02 );\r
+ /* Make higher prio task ready */\r
+ rv = SetEvent( TASK_ID_etask_m_full,EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK ) ;\r
+ TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_03 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_05 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+\r
+void etask_m_non ( void ) {\r
+ StatusType rv;\r
+ TaskStateType taskState;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_AL_04:\r
+ TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_03 );\r
+ /* Verify that task is in waiting */\r
+ rv = GetTaskState(etask_m_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_WAITING);\r
+ /* Set the Event */\r
+ rv = SetEvent( etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Verify state, again */\r
+ rv = GetTaskState(etask_m_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_READY);\r
+ TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_04 );\r
+ break;\r
+ case OSEK_AL_04:\r
+ TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_03 );\r
+ rv = SetEvent( etask_m_full, EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+#endif\r
+\r
+void etask_l_non( void ) {\r
+\r
+ StatusType rv;\r
+ TaskStateType taskState;\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_AL_30:\r
+ TEST_SET_FIXTURE(OSEK_AL_30, SEQ_NR_02 );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_30, SEQ_NR_03 );\r
+ break;\r
+ case OSEK_AL_32:\r
+ TEST_SET_FIXTURE(OSEK_AL_32, SEQ_NR_03 );\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+ case OSEK_AL_33:\r
+ TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_03 );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Set event go in etask_h_full, nothing should happen */\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_04 );\r
+\r
+ rv = GetTaskState(TASK_ID_etask_h_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_WAITING );\r
+\r
+ /* Wake up etask_m_full for cleanup */\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_05 );\r
+ break;\r
+ case OSEK_AL_34:\r
+ TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_03 );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Set event go in etask_h_full */\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_04 );\r
+\r
+ rv = GetTaskState(TASK_ID_etask_h_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_READY );\r
+\r
+ /* Wake up etask_m_full for cleanup */\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_05 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void etask_h_full( void ) {\r
+\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_AL_14:\r
+ TEST_SET_FIXTURE(OSEK_AL_14, SEQ_NR_03 );\r
+ break;\r
+ case OSEK_AL_15:\r
+ TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_02 );\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_04 );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+ case OSEK_AL_23:\r
+ TEST_SET_FIXTURE(OSEK_AL_23, SEQ_NR_03 );\r
+ break;\r
+ case OSEK_AL_24:\r
+ TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_02 );\r
+ rv = WaitEvent(EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_04 );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+ case OSEK_AL_29:\r
+ TEST_SET_FIXTURE(OSEK_AL_29, SEQ_NR_03 );\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+ case OSEK_AL_30:\r
+ TEST_SET_FIXTURE(OSEK_AL_30, SEQ_NR_04 );\r
+ rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ break;\r
+ case OSEK_AL_31:\r
+ TEST_SET_FIXTURE(OSEK_AL_31, SEQ_NR_02 );\r
+ break;\r
+ case OSEK_AL_33:\r
+ TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go2 | EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_07 );\r
+ break;\r
+ case OSEK_AL_34:\r
+ TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_06 );\r
+ break;\r
+ case OSEK_AL_35:\r
+ TEST_SET_FIXTURE(OSEK_AL_35, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go2 | EVENT_MASK_go );\r
+ break;\r
+ case OSEK_AL_36:\r
+ TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+ StatusType rv;\r
+ TaskType taskId;\r
+ TaskType isrTask;\r
+ TaskStateType taskState;\r
+ TickType tick;\r
+ AlarmBaseType alarmBase;\r
+ EventMaskType eventMask;\r
+\r
+ /** @treq OSEK_AL_01\r
+ *\r
+ * Call GetAlarmBase() with invalid alarm ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_01, SEQ_NR_01 );\r
+ rv = GetAlarmBase(ALARM_ID_ILL,&alarmBase);\r
+ TEST_ASSERT( rv == E_OS_ID);\r
+\r
+ /** @treq OSEK_AL_02\r
+ *\r
+ * Call GetAlarmBase()\r
+ *\r
+ * Return alarm base characteristics. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_02, SEQ_NR_01 );\r
+ rv = GetAlarmBase(ALARM_ID_act_etask_h_full,&alarmBase);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_ASSERT( alarmBase.maxallowedvalue == 65535 );\r
+ TEST_ASSERT( alarmBase.mincycle == 2 );\r
+ TEST_ASSERT( alarmBase.tickperbase == 1 );\r
+\r
+ /** @treq OSEK_AL_03\r
+ *\r
+ * Call GetAlarm() with invalid alarm ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_03, SEQ_NR_01 );\r
+ rv = GetAlarm(ALARM_ID_ILL,&tick);\r
+ TEST_ASSERT( rv == E_OS_ID);\r
+\r
+ /** @treq OSEK_AL_04\r
+ *\r
+ * Call GetAlarm() for alarm which is currently not in use\r
+ *\r
+ * Service returns E_OS_NOFUNC\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_01 );\r
+ rv = GetAlarm(ALARM_ID_act_etask_h_full,&tick);\r
+ TEST_ASSERT( rv == E_OS_NOFUNC);\r
+\r
+ /** @treq OSEK_AL_05\r
+ *\r
+ * Call GetAlarm() for alarm which will activate a task on expiration\r
+ *\r
+ * Returns number of ticks until expiration. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_05, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_act_etask_h_full,10,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = GetAlarm(ALARM_ID_act_etask_h_full,&tick);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_ASSERT( tick == 10 );\r
+ rv = CancelAlarm(ALARM_ID_act_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+ /** @treq OSEK_AL_06\r
+ *\r
+ * Call GetAlarm() for alarm which will set an event on expiration\r
+ *\r
+ * Returns number of ticks until expiration. Service returns E_OK
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_06, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = GetAlarm(ALARM_ID_setev_go_etask_h_full,&tick);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_ASSERT( tick == 10 );\r
+ rv = CancelAlarm(ALARM_ID_setev_go_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+ /** @treq OSEK_AL_07\r
+ *\r
+ * Call SetRelAlarm() with invalid alarm ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_07, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_ILL,10,0);\r
+ TEST_ASSERT( rv == E_OS_ID );\r
+\r
+ /** @treq OSEK_AL_08\r
+ *\r
+ * Call SetRelAlarm() for already activated alarm which will activate a task on expiration\r
+ *\r
+ * Service returns E_OS_STATE
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_08, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_act_etask_h_full,10,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = SetRelAlarm(ALARM_ID_act_etask_h_full,10,0);\r
+ TEST_ASSERT( rv == E_OS_STATE);\r
+ rv = CancelAlarm(ALARM_ID_act_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+ /** @treq OSEK_AL_09\r
+ *\r
+ * Call SetRelAlarm() for already activated alarm which will set an\r
+ * event on expiration\r
+ *\r
+ * Service returns E_OS_STATE
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,0);\r
+ TEST_ASSERT( rv == E_OS_STATE);\r
+ rv = CancelAlarm(ALARM_ID_setev_go_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+\r
+ /** @treq OSEK_AL_10\r
+ *\r
+ * Call SetRelAlarm() with increment value lower than zero\r
+ *\r
+ * Service returns E_OS_VALUE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_10, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,-1,0);\r
+ TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+ /** @treq OSEK_AL_11\r
+ *\r
+ * Call SetRelAlarm() with increment value greater than maxallowedvalue\r
+ *\r
+ * Service returns E_OS_VALUE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_11, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,UINT16_MAX+1,0);\r
+ TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+ /** @treq OSEK_AL_12\r
+ *\r
+ * Call SetRelAlarm() with cycle value lower than mincycle\r
+ *\r
+ * Service returns E_OS_VALUE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_12, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,1);\r
+ TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+\r
+ /** @treq OSEK_AL_13\r
+ *\r
+ * Call SetRelAlarm() with cycle value greater than maxallowedvalue\r
+ *\r
+ * Service returns E_OS_VALUE
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_13, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,UINT16_MAX+1);\r
+ TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+ /** @treq OSEK_AL_14\r
+ *\r
+ * Call SetRelAlarm() for alarm which will activate a task on expiration\r
+ *\r
+ * Alarm is activated. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_14, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_AL_14, SEQ_NR_02 );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_AL_14, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_AL_15\r
+ *\r
+ * Call SetRelAlarm() for alarm which will set an event on expiration\r
+ *\r
+ * Alarm is activated. Service returns E_OK
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ /* The task may not be suspended */\r
+ rv = ActivateTask(TASK_ID_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_03 );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_05 );\r
+\r
+ /** @treq OSEK_AL_16\r
+ *\r
+ * Call SetAbsAlarm() with invalid alarm ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_16, SEQ_NR_01 );\r
+ rv = SetAbsAlarm(ALARM_ID_ILL,2,0);\r
+ TEST_ASSERT( rv == E_OS_ID);\r
+\r
+ /** @treq OSEK_AL_17\r
+ *\r
+ * Call SetAbsAlarm() for already activated alarm which will activate a task on expiration\r
+ *\r
+ * Service returns E_OS_STATE
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_17, SEQ_NR_01 );\r
+ rv = SetAbsAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = SetAbsAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OS_STATE);\r
+ rv = CancelAlarm(ALARM_ID_act_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+ /** @treq OSEK_AL_18\r
+ *\r
+ * Call SetAbsAlarm() for already activated alarm which will set an\r
+ * event on expiration\r
+ *\r
+ * Service returns E_OS_STATE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_18, SEQ_NR_01 );\r
+ rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OS_STATE);\r
+ rv = CancelAlarm(ALARM_ID_setev_go_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+\r
+ /** @treq OSEK_AL_19\r
+ *\r
+ * Call SetAbsAlarm() with increment value lower than zero\r
+ *\r
+ * Service returns E_OS_VALUE\r
+ */
+ TEST_SET_FIXTURE(OSEK_AL_19, SEQ_NR_01 );\r
+ rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,-1,0);\r
+ TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+ /** @treq OSEK_AL_20\r
+ *\r
+ * Call SetAbsAlarm() with increment value greater than maxallowedvalue\r
+ *\r
+ * Service returns E_OS_VALUE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_20, SEQ_NR_01 );\r
+ rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,UINT16_MAX+1,0);\r
+ TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+ /** @treq OSEK_AL_21\r
+ *\r
+ * Call SetAbsAlarm() with cycle value lower than mincycle\r
+ *\r
+ * Service returns E_OS_VALUE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_21, SEQ_NR_01 );\r
+ rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,10,1);\r
+ TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+ /** @treq OSEK_AL_22\r
+ *\r
+ * Call SetAbsAlarm() with cycle value greater than maxallowedvalue\r
+ * Service returns E_OS_VALUE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_22, SEQ_NR_01 );\r
+ rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,10,UINT16_MAX+1);\r
+ TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+ /** @treq OSEK_AL_23\r
+ *\r
+ * Call SetAbsAlarm() for alarm which will activate a task on expiration\r
+ *\r
+ * Alarm is activated. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_23, SEQ_NR_01 );\r
+ rv = GetCounterValue(COUNTER_ID_soft1,&tick);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ rv = SetAbsAlarm(ALARM_ID_act_etask_h_full,tick+2,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_AL_23, SEQ_NR_02 );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_AL_23, SEQ_NR_04 );\r
+\r
+\r
+ /** @treq OSEK_AL_24\r
+ *\r
+ * Call SetAbsAlarm() for alarm which will set an event on expiration\r
+ *\r
+ * Alarm is activated. Service returns E_OK\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_01 );\r
+\r
+ rv = GetCounterValue(COUNTER_ID_soft1,&tick);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,tick+2,0);\r
+ TEST_ASSERT( rv == E_OK);\r
+ /* The task may not be suspended */\r
+ rv = ActivateTask(TASK_ID_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK);\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_03 );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK);\r
+ TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_05 );\r
+\r
+ /** @treq OSEK_AL_25\r
+ *\r
+ * Call CancelAlarm() with invalid alarm ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_25, SEQ_NR_01 );\r
+ rv = CancelAlarm(ALARM_ID_ILL);\r
+ TEST_ASSERT( rv == E_OS_ID );\r
+\r
+ /** @treq OSEK_AL_26\r
+ *\r
+ * Call CancelAlarm() for alarm which is currently not in use\r
+ *\r
+ * Service returns E_OS_NOFUNC\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_26, SEQ_NR_01 );\r
+ rv = CancelAlarm(ALARM_ID_act_etask_h_full);\r
+ TEST_ASSERT( rv == E_OS_NOFUNC );\r
+\r
+ /** @treq OSEK_AL_27\r
+ *\r
+ * Call CancelAlarm() for already activated alarm which will activate a task on expiration\r
+ *\r
+ * Alarm is cancelled. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_27, SEQ_NR_01 );\r
+ /* Already covered by OSEK_AL_05 */\r
+\r
+ /** @treq OSEK_AL_28\r
+ *\r
+ * Call CancelAlarm() for already activated alarm which will set an event on expiration\r
+ *\r
+ * Alarm is cancelled. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_28, SEQ_NR_01 );\r
+ /* Already covered by OSEK_AL_06 */\r
+\r
+ /** @treq OSEK_AL_29\r
+ *\r
+ * Expiration of alarm which activates a task while no tasks are currently running\r
+ *\r
+ * Task is activated
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_29, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_sys_tick_act_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_29, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_29, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_AL_30\r
+ *\r
+ * Expiration of alarm which activates a task while running task is non-preemptive\r
+ *\r
+ * Task is activated. No preemption of running task\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_30, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ActivateTask(TASK_ID_etask_l_non);\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Swap to NON task */\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ /** @treq OSEK_AL_31\r
+ *\r
+ * Expiration of alarm which activates a task with higher priority than running task while running task is preemptive\r
+ *\r
+ * Task is activated. Task with highest priority is executed\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_31, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_31, SEQ_NR_03 );\r
+\r
+ /** @treq OSEK_AL_32\r
+ *\r
+ * Expiration of alarm which activates a task with lower priority than running task while running task is preemptive\r
+ *\r
+ * Task is activated. No preemption of running task.\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_32, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_act_etask_l_non,2,0);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_32, SEQ_NR_02 );\r
+ /* Swap to alarm task */\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_32, SEQ_NR_04 );\r
+\r
+ /** @treq OSEK_AL_33\r
+ *\r
+ * Expiration of alarm which sets an event while running task is non-preemptive.\r
+ *\r
+ * Task which owns the event is not waiting for this event and not suspended.Event is set\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ /* Activate task that waits for go2 */\r
+ rv = ActivateTask(TASK_ID_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ /* Activate the NON task */\r
+ rv = ActivateTask(TASK_ID_etask_l_non);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ /* Swap to NON task */\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_06 );\r
+\r
+ /* Cleanup by etask_h_full */\r
+ rv = SetEvent( TASK_ID_etask_h_full, EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_08 );\r
+ /** @treq OSEK_AL_34\r
+ *\r
+ * Expiration of alarm which sets an event while running task is non-preemptive.\r
+ * Task which owns the event is waiting for this event.\r
+ *\r
+ * Event is set. Task which is owner of the event becomes ready.\r
+ * No preemption of running task\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ /* Activate task that waits for go */\r
+ rv = ActivateTask(TASK_ID_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ /* Activate the NON task */\r
+ rv = ActivateTask(TASK_ID_etask_l_non);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ /* Swap to NON task */\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_07 );\r
+\r
+ /** @treq OSEK_AL_35\r
+ *\r
+ * Expiration of alarm which sets an event while running task is preemptive.\r
+ * Task which owns the event is not waiting for this event and not suspended.\r
+ *\r
+ * Event is set
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_35, SEQ_NR_01 );\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+\r
+ /* Activate task that waits for go */\r
+ rv = ActivateTask(TASK_ID_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ TEST_SET_FIXTURE(OSEK_AL_35, SEQ_NR_03 );\r
+ /* Set go event */\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ TEST_SET_FIXTURE(OSEK_AL_35, SEQ_NR_04 );\r
+\r
+ rv = GetEvent(TASK_ID_etask_h_full,&eventMask);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( eventMask == EVENT_MASK_go );\r
+\r
+ /* Cleanup */\r
+ rv = SetEvent(TASK_ID_etask_h_full,EVENT_MASK_go2);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ /** @treq OSEK_AL_36\r
+ *\r
+ * Expiration of alarm which sets an event while running task is preemptive.\r
+ * Task which owns the event is waiting for this event.\r
+ *\r
+ * Event is set. Task which is owner of the event becomes ready.\r
+ * Task with highest priority is executed(Rescheduling)\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_01 );\r
+\r
+ rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ActivateTask(TASK_ID_etask_h_full);\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_03 );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = IncrementCounter(COUNTER_ID_soft1);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_05 );\r
+\r
+ TestExit(0);\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+ <AR-PACKAGE>\r
+ <SHORT-NAME>NewEcu</SHORT-NAME>\r
+ <ELEMENTS>\r
+ <ECU-CONFIGURATION UUID="d30db794-36ce-42ce-8658-deb9cfbfc18a">\r
+ <SHORT-NAME>config_osek_ev</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <DOC-REVISIONS>\r
+ <DOC-REVISION/>\r
+ </DOC-REVISIONS>\r
+ <SDGS>\r
+ <SDG GID="Arccore::EcuOptions">\r
+ <SD GID="MCU">Undefined MCU</SD>\r
+ <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_03_ev</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/NewEcu/SwComposition_NewEcu</ECU-SW-COMPOSITION-REF>\r
+ <MODULE-REFS>\r
+ <MODULE-REF DEST="MODULE-CONFIGURATION">/NewEcu/Os</MODULE-REF>\r
+ </MODULE-REFS>\r
+ </ECU-CONFIGURATION>\r
+ <ECU-SW-COMPOSITION UUID="aab85286-8442-4d60-bf6d-a8cdea2f4f7c">\r
+ <SHORT-NAME>SwComposition_NewEcu</SHORT-NAME>\r
+ </ECU-SW-COMPOSITION>\r
+ <MODULE-CONFIGURATION UUID="fb96b9f7-d486-4956-bcf5-03ac6c6e5f78">\r
+ <SHORT-NAME>Os</SHORT-NAME>\r
+ <ADMIN-DATA>\r
+ <SDGS>\r
+ <SDG/>\r
+ <SDG GID="Arccore::ModuleOptions">\r
+ <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+ <SD GID="ARCCORE_EDITOR_VERSION">2.0.11</SD>\r
+ </SDG>\r
+ </SDGS>\r
+ </ADMIN-DATA>\r
+ <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+ <CONTAINERS>\r
+ <CONTAINER UUID="e38c4f96-a8c1-4489-b907-03eb4441b231">\r
+ <SHORT-NAME>OsOS</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+ <VALUE>1000</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+ <VALUE>512</VALUE>\r
+ </INTEGER-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="a7839b8f-1ed1-4f24-b05f-06850836ea32">\r
+ <SHORT-NAME>OsHooks</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+ <VALUE>false</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ <BOOLEAN-VALUE>\r
+ <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+ <VALUE>true</VALUE>\r
+ </BOOLEAN-VALUE>\r
+ </PARAMETER-VALUES>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ <CONTAINER UUID="074c4c94-0aa1-4158-9223-7136a526fac0">\r
+ <SHORT-NAME>Task1</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+ <PARAMETER-VALUES>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+ <VALUE>1</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+ <VALUE>EXTENDED</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ <INTEGER-VALUE>\r
+ <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+ <VALUE>2048</VALUE>\r
+ </INTEGER-VALUE>\r
+ <ENUMERATION-VALUE>\r
+ <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+ <VALUE>FULL</VALUE>\r
+ </ENUMERATION-VALUE>\r
+ </PARAMETER-VALUES>\r
+ <SUB-CONTAINERS>\r
+ <CONTAINER UUID="c17d3508-e67f-49bd-92fb-8a3a51531b49">\r
+ <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+ <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+ </CONTAINER>\r
+ </SUB-CONTAINERS>\r
+ </CONTAINER>\r
+ </CONTAINERS>\r
+ </MODULE-CONFIGURATION>\r
+ </ELEMENTS>\r
+ </AR-PACKAGE>\r
+ </TOP-LEVEL-PACKAGES></AUTOSAR>\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.c)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Mon Sep 20 16:43:27 CEST 2010
+*/
+
+ \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h" // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ############################### DEBUG OUTPUT #############################\r
+uint32 os_dbg_mask = D_RESOURCE |D_SCHTBL |D_EVENT |D_TASK |D_ALARM;\r
+ \r
+\r
+\r
+// ################################# COUNTERS ###############################\r
+GEN_COUNTER_HEAD {\r
+ GEN_COUNTER( COUNTER_ID_Counter1,\r
+ "Counter1",\r
+ COUNTER_TYPE_HARD,\r
+ COUNTER_UNIT_NANO,\r
+ 0xffff,\r
+ 1,\r
+ 0,\r
+ 0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ################################## ALARMS ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################ RESOURCES ###############################\r
+GEN_RESOURCE_HEAD {\r
+ GEN_RESOURCE(\r
+ RES_ID_std_1,\r
+ RESOURCE_TYPE_STANDARD,\r
+ 0\r
+ ),\r
+};\r
+\r
+// ############################## STACKS (TASKS) ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(btask_m_non,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+DECLARE_STACK(etask_m_full_2,2048);\r
+\r
+// ################################## TASKS #################################\r
+GEN_TASK_HEAD {\r
+ GEN_ETASK( OsIdle,\r
+ 0,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ 0 \r
+ ),\r
+ GEN_BTASK(\r
+ btask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_ll_non,\r
+ 3,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_m_full,\r
+ 5,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_m_non,\r
+ 1,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_ETASK(\r
+ etask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_full,\r
+ 5,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ RES_MASK_std_1 | 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_full_2,\r
+ 5,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+};\r
+\r
+// ################################## HOOKS #################################\r
+GEN_HOOKS( \r
+ StartupHook, \r
+ NULL, \r
+ ShutdownHook, \r
+ ErrorHook,\r
+ PreTaskHook, \r
+ PostTaskHook \r
+);\r
+\r
+// ################################## ISRS ##################################\r
+\r
+\r
+// ############################ SCHEDULE TABLES #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.h)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.11
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Mon Sep 20 16:43:27 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2)
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1 0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go 1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_std_1 0\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_std_1 (1 << 0)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full 1\r
+#define TASK_ID_btask_l_full 2\r
+#define TASK_ID_btask_ll_non 3\r
+#define TASK_ID_btask_m_full 4\r
+#define TASK_ID_btask_m_non 5\r
+#define TASK_ID_etask_h_full 6\r
+#define TASK_ID_etask_l_full 7\r
+#define TASK_ID_etask_m_full 8\r
+#define TASK_ID_etask_m_full_2 9\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void btask_m_non( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+void etask_m_full_2( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE 2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT 0 \r
+#define OS_TASK_CNT 10\r
+#define OS_SCHTBL_CNT 0\r
+#define OS_COUNTER_CNT 1\r
+#define OS_EVENTS_CNT 1\r
+#define OS_ISRS_CNT 0\r
+#define OS_RESOURCE_CNT 1\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG STD_ON\r
+\r
+#define OS_SC1 STD_ON \r
+#define OS_STACK_MONITORING STD_ON\r
+#define OS_STATUS_EXTENDED STD_ON\r
+#define OS_USE_GET_SERVICE_ID STD_ON\r
+#define OS_USE_PARAMETER_ACCESS STD_ON\r
+#define OS_RES_SCHEDULER STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
--- /dev/null
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
--- /dev/null
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += test_02_ip.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+/*\r
+ * Created on: 4 aug 2010\r
+ * Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_EV_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l - low prio\r
+ * m - medium\r
+ * h - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+ OSEK_EV_01 = 1,\r
+ OSEK_EV_02,\r
+ OSEK_EV_03,\r
+ OSEK_EV_04,\r
+ OSEK_EV_05,\r
+ OSEK_EV_06,\r
+ OSEK_EV_07,\r
+ OSEK_EV_08,\r
+ OSEK_EV_09,\r
+ OSEK_EV_10,\r
+ OSEK_EV_11,\r
+ OSEK_EV_12,\r
+ OSEK_EV_13,\r
+ OSEK_EV_14,\r
+ OSEK_EV_15,\r
+ OSEK_EV_16,\r
+ OSEK_EV_17,\r
+ OSEK_EV_18,\r
+ OSEK_EV_19,\r
+ OSEK_EV_20,\r
+ OSEK_EV_21,\r
+ OSEK_EV_22,\r
+ OSEK_EV_23,\r
+ OSEK_EV_24,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static uint8_t activations = 0;\r
+\r
+static void isrSoftInt1( void ) {\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_07:\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_03 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ break;\r
+ }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+ StatusType rv;\r
+ TaskType taskId;\r
+\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_07:\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_02 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_1 );\r
+ break;\r
+ case OSEK_TM_09:\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+\r
+\r
+\r
+void OsIdle(void) {\r
+ while(1);\r
+}\r
+\r
+\r
+void btask_l_non ( void ) {\r
+ StatusType rv;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_TM_09:\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_02 );\r
+ /* Make higher prio task ready */\r
+ rv = SetEvent( TASK_ID_etask_m_full,EVENT_MASK_go);\r
+ TEST_ASSERT( rv == E_OK ) ;\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_03 );\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_05 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+}\r
+\r
+void etask_m_non ( void ) {\r
+ StatusType rv;\r
+ TaskStateType taskState;\r
+ switch ( TestWorld.fixtureNr ) {\r
+ case OSEK_EV_04:\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_03 );\r
+ /* Verify that task is in waiting */\r
+ rv = GetTaskState(etask_m_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_WAITING);\r
+ /* Set the Event */\r
+ rv = SetEvent( etask_m_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ /* Verify state, again */\r
+ rv = GetTaskState(etask_m_full,&taskState);\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_ASSERT( taskState == TASK_STATE_READY);\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_04 );\r
+ break;\r
+ case OSEK_EV_04:\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_03 );\r
+ rv = SetEvent( etask_m_full, EVENT_MASK_go2 );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_04 );\r
+ break;\r
+ default:\r
+ TEST_ASSERT( 0 );\r
+ }\r
+\r
+ rv = TerminateTask();\r
+ TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+ StatusType rv;\r
+ TaskType taskId;\r
+ TaskType isrTask;\r
+ TaskStateType taskState;\r
+\r
+ /** @treq OSEK_EV_01\r
+ *\r
+ * Call SetEvent() with invalid Task ID\r
+ *\r
+ * Service returns E_OS_ID\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_EV_01, SEQ_NR_01 );\r
+ rv = SetEvent(TASK_ID_ILL);\r
+ TEST_ASSERT( rv == E_OS_ID );\r
+\r
+ /** @treq OSEK_EV_02\r
+ *\r
+ * Call SetEvent() for basic task\r
+ *\r
+ * Service returns E_OS_ACCESS\r
+ */\r
+\r
+ TEST_SET_FIXTURE(OSEK_EV_02, SEQ_NR_01 );\r
+ rv = SetEvent( TASK_ID_btask_l_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OS_ACCESS );\r
+\r
+\r
+ // --------------------------------------------------------------------\r
+\r
+ /** @treq OSEK_EV_03\r
+ *\r
+ * Call SetEvent() for suspended extended task\r
+ *\r
+ * Service returns E_OS_STATE\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_03, SEQ_NR_01 );\r
+ rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OS_STATE );\r
+\r
+ /** @treq OSEK_EV_04\r
+ *\r
+ * Call SetEvent() from non-preemptive task on waiting extended\r
+ * task which is waiting for at least one of the requested events\r
+ *\r
+ * Requested events are set. Running task is not preempted.\r
+ * Waiting task becomes ready Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_m_non );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_02 );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_05 );\r
+\r
+ /** @treq OSEK_EV_05\r
+ *\r
+ * Call SetEvent() from non-preemptive task on waiting extended\r
+ * task which is not waiting for any of the requested events\r
+ *\r
+ * Requested events are set. Running task is not preempted.\r
+ * Waiting task doesn\92t become ready. Service returns E_OK\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_01 );\r
+ rv = ActivateTask( TASK_ID_etask_m_non );\r
+ TEST_ASSERT( rv == E_OK );\r
+\r
+ /** @treq OSEK_EV_06\r
+ *\r
+ * Interruption of running task\r
+ *\r
+ * Interrupt is executed\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_01 );\r
+ /* Already tested in a number of cases in tm suite */\r
+\r
+ /** @treq OSEK_EV_07\r
+ *\r
+ * Interruption of ISR2\r
+ *\r
+ * Interrupt is executed\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_01 );\r
+ /* Create an ISR2 */\r
+ isrTask = Os_Arc_CreateIsr( isrSoftInt0, 8/*prio*/,"soft_0");\r
+ Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_0);\r
+\r
+ /* Create an ISR2 */\r
+ isrTask = Os_Arc_CreateIsr( isrSoftInt0, 9/*prio*/,"soft_1");\r
+ Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_1);\r
+\r
+ Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+ TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_04 );\r
+\r
+\r
+ /** @treq OSEK_EV_08\r
+ *\r
+ * Interruption of ISR3\r
+ *\r
+ * Interrupt is executed\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_01 );\r
+ /* ISR3 is not applicable */\r
+\r
+ /** @treq OSEK_EV_09\r
+ *\r
+ * Return from ISR2. Interrupted task is non-preemptive\r
+ *\r
+ * Execution of interrupted task is continued\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_01 );\r
+ rv = ActivateTask(TASK_ID_btask_l_non );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = WaitEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ rv = ClearEvent( EVENT_MASK_go );\r
+ TEST_ASSERT( rv == E_OK );\r
+ TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_06 );\r
+\r
+ /** @treq OSEK_EV_10\r
+ *\r
+ * Return from ISR3. Interrupted task is non-preemptive\r
+ *\r
+ * Execution of interrupted task is continued\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_01 );\r
+ /* ISR3 is not applicable */\r
+\r
+ /** @treq OSEK_EV_11\r
+ *\r
+ * Return from ISR2. Interrupted task is preemptive\r
+ *\r
+ * Ready task with highest priority is executed (Rescheduling)\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_11, SEQ_NR_01 );\r
+\r
+\r
+\r
+ /** @treq OSEK_EV_12\r
+ *\r
+ * Return from ISR3. Interrupted task is preemptive\r
+ *\r
+ * Ready task with highest priority is executed (Rescheduling)\r
+ */\r
+ TEST_SET_FIXTURE(OSEK_EV_12, SEQ_NR_01 );\r
+ /* ISR3 is not applicable */\r
+\r
+\r
+ TestExit(0);\r
+}\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.c)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.10
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Sun Oct 10 21:13:01 CEST 2010
+*/
+
+ \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h" // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ############################### DEBUG OUTPUT #############################\r
+uint32 os_dbg_mask = 0;\r
+ \r
+\r
+\r
+// ################################# COUNTERS ###############################\r
+GEN_COUNTER_HEAD {\r
+ GEN_COUNTER( COUNTER_ID_Counter1,\r
+ "Counter1",\r
+ COUNTER_TYPE_HARD,\r
+ COUNTER_UNIT_NANO,\r
+ 0xffff,\r
+ 1,\r
+ 0,\r
+ 0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ################################## ALARMS ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################ RESOURCES ###############################\r
+GEN_RESOURCE_HEAD {\r
+ GEN_RESOURCE(\r
+ RES_ID_std_1,\r
+ RESOURCE_TYPE_STANDARD,\r
+ 0\r
+ ),\r
+};\r
+\r
+// ############################## STACKS (TASKS) ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(btask_m_non,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+DECLARE_STACK(etask_m_full_2,2048);\r
+\r
+// ################################## TASKS #################################\r
+GEN_TASK_HEAD {\r
+ GEN_ETASK( OsIdle,\r
+ 0,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ 0 \r
+ ),\r
+ GEN_BTASK(\r
+ btask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_ll_non,\r
+ 3,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 1\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_m_full,\r
+ 5,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_BTASK(\r
+ btask_m_non,\r
+ 1,\r
+ NON,\r
+ FALSE,\r
+ NULL,\r
+ 0,\r
+ 2\r
+ ),\r
+ \r
+ GEN_ETASK(\r
+ etask_h_full,\r
+ 6,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_l_full,\r
+ 4,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_full,\r
+ 5,\r
+ FULL,\r
+ TRUE,\r
+ NULL,\r
+ RES_MASK_std_1 | 0\r
+ ),\r
+ \r
+ \r
+ GEN_ETASK(\r
+ etask_m_full_2,\r
+ 5,\r
+ FULL,\r
+ FALSE,\r
+ NULL,\r
+ 0\r
+ ),\r
+ \r
+ \r
+};\r
+\r
+// ################################## HOOKS #################################\r
+GEN_HOOKS( \r
+ StartupHook, \r
+ NULL, \r
+ ShutdownHook, \r
+ ErrorHook,\r
+ PreTaskHook, \r
+ PostTaskHook \r
+);\r
+\r
+// ################################## ISRS ##################################\r
+\r
+\r
+// ############################ SCHEDULE TABLES #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
--- /dev/null
+/*
+* Configuration of module Os (Os_Cfg.h)
+*
+* Created by:
+* Configured for (MCU): Undefined MCU
+*
+* Module vendor: ArcCore
+* Module version: 2.0.10
+*
+*
+* Generated by Arctic Studio (http://arccore.com)
+* on Sun Oct 10 21:13:01 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2)
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1 0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go 1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_std_1 0\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_std_1 (1 << 0)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full 1\r
+#define TASK_ID_btask_l_full 2\r
+#define TASK_ID_btask_ll_non 3\r
+#define TASK_ID_btask_m_full 4\r
+#define TASK_ID_btask_m_non 5\r
+#define TASK_ID_etask_h_full 6\r
+#define TASK_ID_etask_l_full 7\r
+#define TASK_ID_etask_m_full 8\r
+#define TASK_ID_etask_m_full_2 9\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void btask_m_non( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+void etask_m_full_2( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE 2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT 0 \r
+#define OS_TASK_CNT 10\r
+#define OS_SCHTBL_CNT 0\r
+#define OS_COUNTER_CNT 1\r
+#define OS_EVENTS_CNT 1\r
+#define OS_ISRS_CNT 0\r
+#define OS_RESOURCE_CNT 1\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG STD_OFF\r
+\r
+#define OS_SC1 STD_ON \r
+#define OS_STACK_MONITORING STD_ON\r
+#define OS_STATUS_EXTENDED STD_ON\r
+#define OS_USE_GET_SERVICE_ID STD_ON\r
+#define OS_USE_PARAMETER_ACCESS STD_ON\r
+#define OS_RES_SCHEDULER STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
--- /dev/null
+enum OsekFixtureNr {\r
+ OSEK_TM_02,\r
+ OSEK_TM_06,\r
+ OSEK_TM_11,\r
+ OSEK_TM_17,\r
+ OSEK_TM_32,\r
+\r
+};\r
+\r
+void etask_m_full( void ) {\r
+\r
+}\r
};\r
\r
struct test {\r
- uint8_t testSuite;\r
- uint8_t testNr;\r
+ uint16_t testSuite;\r
+ uint16_t testNr;\r
uint16_t status;\r
- const char *description;\r
- uint32_t expectedErrMask;\r
+ uint16_t pad;\r
+// const char *description;\r
+// uint32_t expectedErrMask;\r
};\r
\r
-struct test testTable[50] = { {0} };\r
\r
\r
+struct test testTable[50] __attribute__ ((aligned(8))) = { {0} };\r
+\r
void TestInit( void ) {\r
\r
}\r
\r
}\r
\r
+void TestSetFixture( uint32_t nextTestFixture, uint32_t nextTestNr,\r
+ char *file, int line, const char *function ) {\r
+ _Bool error = 0;\r
+\r
+ testTable[nextTestFixture].testSuite = nextTestFixture;\r
+ testTable[nextTestFixture].testNr = nextTestNr;\r
+ testTable[nextTestFixture].status |= TEST_FLG_RUNNING;\r
+ testTable[nextTestFixture].pad = 0x0;\r
+\r
+ /* For a new sequence should start with TEST_SET_FIXTURE( OSEK_TM_04, SEQ_NR_01 ) */\r
+ if( nextTestNr == 1) {\r
+ if( (nextTestFixture) != (TestWorld.fixtureNr +1) ) {\r
+ printf("## Expected fixture=%u, found=%u\n",\r
+ (unsigned)nextTestFixture,\r
+ (unsigned)TestWorld.fixtureNr +1);\r
+ error = 1;\r
+ }\r
+\r
+ } else {\r
+ if( (nextTestFixture) != (TestWorld.fixtureNr ) ) {\r
+ printf("## Expected same fixture=%u, found=%u\n",\r
+ (unsigned)nextTestFixture,\r
+ (unsigned)TestWorld.fixtureNr);\r
+ error = 1;\r
+ }\r
+ if( nextTestNr != ( TestWorld.testNr + 1 ) ) {\r
+ printf("## Sequence is wrong. Found %u, expected %u in fixture %u\n",\r
+ (unsigned)nextTestNr,\r
+ (unsigned)TestWorld.testNr + 1,\r
+ (unsigned)nextTestFixture);\r
+ error = 1;\r
+ }\r
+ }\r
+\r
+ if( error == 1 ) {\r
+ printf("## Info: %s %d %s \n",file,line,function);\r
+ testTable[nextTestFixture].status |= TEST_FLG_SEQ_ERROR;\r
+ }\r
+#if 0\r
+ if( (nextTestNr) != (TestWorld.testNr +1) ) {\r
+ printf("%s %d %s FAILURE, seq failed\n",file,line,function);\r
+ }\r
+#endif\r
+\r
+ printf("Testing fixture %u and sub seq:%u\n",(unsigned)nextTestFixture, (unsigned)nextTestNr);\r
+ TestWorld.testNr = nextTestNr;\r
+ TestWorld.fixtureNr = nextTestFixture;\r
+}\r
+\r
+\r
/**\r
*\r
* @param text\r
*/\r
void TestFail( const char *text,char *file, int line, const char *function ) {\r
printf("%02d %02d FAILED, %s , %d, %s\n",test_suite, test_nr, file, line, function);\r
- testTable[testCnt].testSuite = test_suite;\r
- testTable[testCnt].testNr = test_nr;\r
- testTable[testCnt].status |= TEST_FLG_ASSERT;\r
+ testTable[TestWorld.fixtureNr].testSuite = 0x0;\r
+ testTable[TestWorld.fixtureNr].testNr = TestWorld.testNr;\r
+ testTable[TestWorld.fixtureNr].status |= TEST_FLG_ASSERT;\r
// testCnt++;\r
// _test_failed++;\r
}\r
void TestStart( const char *str, int testNr ) {\r
testTable[testCnt].status = TEST_FLG_RUNNING;\r
testTable[testCnt].testNr = testNr;\r
- testTable[testCnt].description = str;\r
+// testTable[testCnt].description = str;\r
printf("%3d %3d %s\n",testCnt,testNr,str);\r
}\r
\r
\r
} else {\r
/* All is OK */\r
- testTable[testCnt].status &= TEST_FLG_RUNNING;\r
+ // testTable[testCnt].status &= TEST_FLG_RUNNING;\r
testTable[testCnt].status |= TEST_FLG_OK;\r
printf("OK\n");\r
}\r
testCnt++;\r
}\r
\r
+/**\r
+ * Exit from the test system, no try to be graceful here.
+ * @param rv
+ */\r
void TestExit( int rv ) {\r
+ printf("---- Done ----\n");\r
Irq_Disable();\r
exit(rv);\r
}\r
\r
void TestTouch( void ) {\r
- testTable[testCnt].status |= TEST_FLG_TOUCHED;\r
+ testTable[TestWorld.fixtureNr].status |= TEST_FLG_TOUCHED;\r
}\r
\r
void TestNotImplemented( void ) {\r
- testTable[testCnt].status |= TEST_FLG_NOT_IMPLEMENTED;\r
+ testTable[TestWorld.fixtureNr].status |= TEST_FLG_NOT_IMPLEMENTED;\r
}\r
\r
\r
void TestOk( void ) {\r
printf("%02d %02d OK\n",test_suite, test_nr);\r
- testTable[testCnt].testSuite = test_suite;\r
- testTable[testCnt].testNr = test_nr;\r
- testTable[testCnt].status = 1;\r
+ testTable[TestWorld.fixtureNr].testSuite = TestWorld.fixtureNr;\r
+ testTable[TestWorld.fixtureNr].testNr = TestWorld.testNr;\r
+ testTable[TestWorld.fixtureNr].status = 1;\r
testCnt++;\r
_test_ok++;\r
}\r
#include <stdio.h>\r
\r
/* Test flags */\r
-#define TEST_FLG_RUNNING 1\r
-#define TEST_FLG_ASSERT (1<<1)\r
+#define TEST_FLG_OK 1\r
+#define TEST_FLG_ASSERT (1<<7)\r
#define TEST_FLG_DONE (1<<2)\r
-#define TEST_FLG_OK (1<<3)\r
+#define TEST_FLG_RUNNING (1<<3)\r
#define TEST_FLG_NOT_IMPLEMENTED (1<<4)\r
#define TEST_FLG_TOUCHED (1<<5)\r
+#define TEST_FLG_SEQ_ERROR (1<<6)\r
\r
#define TEST_VALUE_NC (-1)\r
\r
int nr;\r
} TestFixtureType;\r
\r
+typedef struct TestWorld {\r
+ uint16_t fixtureNr;\r
+ uint16_t testNr;\r
+ TestFixtureType fixtures[];\r
+} TestWorldType;\r
+\r
+extern TestWorldType TestWorld;\r
+\r
void TestDone( void );\r
\r
void TestFail( const char *text,char *file, int line, const char *function );\r
void TestInc( void );\r
void TestEnd( void );\r
void TestExit( int rv );\r
+void TestSetFixture( uint32_t nextTestFixture, uint32_t nextTestNr,\r
+ char *file, int line, const char *function );\r
+#define TEST_SET_FIXTURE( _nextTestFixture, _nextTestNr ) TestSetFixture( _nextTestFixture, _nextTestNr, __FILE__, __LINE__, __FUNCTION__ )\r
+\r
+#if 0\r
+// void TestSetFixture( uint32_t testFixture, uint32_t testNr );\r
+#define TestSetFixture( _nextTestFixture, _nextTestNr ) \\r
+ if( (_nextTestNr) != (TestWorld.testNr +1) ) { \\r
+ printf("%s %d FAILURE, seq failed\n",__FILE__,__LINE__); \\r
+ } \\r
+ TestWorld.testNr = _nextTestNr; \\r
+ TestWorld.fixtureNr = _nextTestFixture;\r
+#endif\r
+\r
+enum TestSeq {\r
+ TEST_NR_01 = 1,\r
+ TEST_NR_02,\r
+ TEST_NR_03,\r
+ TEST_NR_04,\r
+ TEST_NR_05,\r
+ TEST_NR_06,\r
+ TEST_NR_07,\r
+ TEST_NR_08,\r
+ TEST_NR_09,\r
+ TEST_NR_10,\r
+ TEST_NR_11,\r
+ TEST_NR_12,\r
+ TEST_NR_13,\r
+ TEST_NR_14,\r
+ TEST_NR_15,\r
+ TEST_NR_16,\r
+ TEST_NR_17,\r
+ TEST_NR_18,\r
+ TEST_NR_19,\r
+ TEST_NR_20,\r
+ TEST_NR_21,\r
+ TEST_NR_22,\r
+ TEST_NR_23,\r
+ TEST_NR_24,\r
+ TEST_NR_25,\r
+ TEST_NR_26,\r
+ TEST_NR_27,\r
+ TEST_NR_28,\r
+ TEST_NR_29,\r
+ TEST_NR_30,\r
+ TEST_NR_31,\r
+ TEST_NR_32,\r
+ TEST_NR_33,\r
+ TEST_NR_34,\r
+ TEST_NR_35,\r
+ TEST_NR_36,\r
+ TEST_NR_37,\r
+ TEST_NR_38,\r
+ TEST_NR_39,\r
+};\r
+\r
+enum SubTest {\r
+ SEQ_NR_01 = 1,\r
+ SEQ_NR_02,\r
+ SEQ_NR_03,\r
+ SEQ_NR_04,\r
+ SEQ_NR_05,\r
+ SEQ_NR_06,\r
+ SEQ_NR_07,\r
+ SEQ_NR_08,\r
+};\r
\r
\r
typedef void (*test_func_t)( void );\r
\r
\r
// Tests\r
-DECLARE_TASKS(01);\r
-DECLARE_TASKS(02);\r
-DECLARE_TASKS(03);\r
-DECLARE_TASKS(04);\r
+DECLARE_TASKS(01)\r
+DECLARE_TASKS(02)\r
+DECLARE_TASKS(03)\r
+DECLARE_TASKS(04)\r
\r
#endif /* TEST_FRAMEWORK_H_ */\r
\r
#include <stdint.h>\r
#include "Os.h"\r
-#include "debug.h"\r
+#include <assert.h>\r
+\r
+\r
#include "test_framework.h"\r
+#if defined( USE_MCU )\r
+#include "Mcu.h"\r
+#endif\r
+#include "arc.h"\r
+\r
+//#define USE_LDEBUG_PRINTF 1\r
+#include "debug.h"\r
\r
#define ERROR_LOG_SIZE 1\r
\r
}\r
#endif\r
\r
- LDEBUG_PRINTF("## ErrorHook err=%u\n",Error);\r
+// LDEBUG_PRINTF("## ErrorHook err=%u\n",error);\r
\r
/* Log the errors in a buffer for later review */\r
errEntry = &ErrorLog.log[ErrorLog.index];\r
#endif\r
\r
void PreTaskHook( void ) {\r
+ StatusType rv;\r
TaskType task;\r
- GetTaskID(&task);\r
+ TaskStateType state;\r
+\r
+ rv = GetTaskID(&task);\r
+ assert( rv == E_OK );\r
LDEBUG_PRINTF("## PreTaskHook, taskid=%d\n",task);\r
+ rv = GetTaskState(task,&state);\r
+ assert( rv == E_OK );\r
+ assert( state == TASK_STATE_RUNNING );\r
}\r
\r
void PostTaskHook( void ) {\r
+ StatusType rv;\r
TaskType task;\r
- GetTaskID(&task);\r
+ TaskStateType state;\r
+\r
+ rv = GetTaskID(&task);\r
+ assert( rv == E_OK );\r
LDEBUG_PRINTF("## PostTaskHook, taskid=%d\n",task);\r
+ rv = GetTaskState(task,&state);\r
+ assert( rv == E_OK );\r
+ assert( state == TASK_STATE_RUNNING );\r
+\r
#if 0\r
{\r
StackInfoType si;\r
--- /dev/null
+\r
+\r
+Info:\r
+ - The OSEK OS test do follow the MODISTARC test plan, but not the test procedure.\r
+ - The MIDSTARC test-suites are from 1999? while latest OSEK OS spec is from 2005?, so\r
+ not all tests are applicable to the latest specification. \r
+ - Do not care about OSEK conformance classes, uses only top class ECC2\r
+ - Tests for Autosar SC1, only \r
+\r
+Known to missing from tests:\r
+ - Multiple alarms to one counter.\r
+ - OSEK requirements that are "fixed" by Autosar, e.g. OS239,OS070,OS069,OS032,? \r
+ - Testing of "Use Parameter Access", etc.\r
+ - Internal resoures (grouping of tasks)\r
+ - SetEvent on suspended task from Alarm\r
+ \r
+Need conversion:\r
+ - Scheduletables..\r
+ - Autostart testing..\r
+
\ No newline at end of file