mdot_rtos
Fork of mbed-rtos by
Revision 85:ef0a22cdf839, committed 2015-06-17
- Comitter:
- mbed_official
- Date:
- Wed Jun 17 11:15:10 2015 +0100
- Parent:
- 84:143955ffb790
- Child:
- 86:58c3b7759abf
- Commit message:
- Synchronized with git revision c33e334a2273b85d12a0bf31aa2f0f86a205ee4b
Full URL: https://github.com/mbedmicro/mbed/commit/c33e334a2273b85d12a0bf31aa2f0f86a205ee4b/
RZ_A1H - Modify the OS track acquisition method
Changed in this revision
--- a/rtos/Thread.cpp Wed Jun 17 10:00:10 2015 +0100
+++ b/rtos/Thread.cpp Wed Jun 17 11:15:10 2015 +0100
@@ -31,7 +31,6 @@
_thread_def.pthread = task;
_thread_def.tpriority = priority;
_thread_def.stacksize = stack_size;
-#ifndef __MBED_CMSIS_RTOS_CA9
if (stack_pointer != NULL) {
_thread_def.stack_pointer = (uint32_t*)stack_pointer;
_dynamic_stack = false;
@@ -47,7 +46,6 @@
_thread_def.stack_pointer[i] = 0xE25A2EA5;
}
#endif
-#endif
_tid = osThreadCreate(&_thread_def, argument);
}
@@ -136,11 +134,9 @@
Thread::~Thread() {
terminate();
-#ifndef __MBED_CMSIS_RTOS_CA9
if (_dynamic_stack) {
delete[] (_thread_def.stack_pointer);
}
-#endif
}
}
--- a/rtx/TARGET_CORTEX_A/RTX_CM_lib.h Wed Jun 17 10:00:10 2015 +0100
+++ b/rtx/TARGET_CORTEX_A/RTX_CM_lib.h Wed Jun 17 11:15:10 2015 +0100
@@ -85,16 +85,24 @@
#if (OS_TIMERS != 0)
#define OS_TASK_CNT (OS_TASKCNT + 1)
+#ifndef __MBED_CMSIS_RTOS_CA9
#define OS_PRIV_CNT (OS_PRIVCNT + 2)
#define OS_STACK_SZ (4*(OS_PRIVSTKSIZE+OS_MAINSTKSIZE+OS_TIMERSTKSZ))
+#endif
#else
#define OS_TASK_CNT OS_TASKCNT
+#ifndef __MBED_CMSIS_RTOS_CA9
#define OS_PRIV_CNT (OS_PRIVCNT + 1)
#define OS_STACK_SZ (4*(OS_PRIVSTKSIZE+OS_MAINSTKSIZE))
#endif
+#endif
uint16_t const os_maxtaskrun = OS_TASK_CNT;
+#ifdef __MBED_CMSIS_RTOS_CA9
+uint32_t const os_stackinfo = (OS_STKCHECK<<24)| (OS_IDLESTKSIZE*4);
+#else
uint32_t const os_stackinfo = (OS_STKCHECK<<24)| (OS_PRIV_CNT<<16) | (OS_STKSIZE*4);
+#endif
uint32_t const os_rrobin = (OS_ROBIN << 16) | OS_ROBINTOUT;
uint32_t const os_trv = OS_TRV;
uint8_t const os_flags = OS_RUNPRIV;
@@ -107,6 +115,11 @@
_declare_box (mp_tcb, OS_TCB_SIZE, OS_TASK_CNT);
uint16_t const mp_tcb_size = sizeof(mp_tcb);
+#ifdef __MBED_CMSIS_RTOS_CA9
+/* Memory pool for os_idle_demon stack allocation. */
+_declare_box8 (mp_stk, OS_IDLESTKSIZE*4, 1);
+uint32_t const mp_stk_size = sizeof(mp_stk);
+#else
/* Memory pool for System stack allocation (+os_idle_demon). */
_declare_box8 (mp_stk, OS_STKSIZE*4, OS_TASK_CNT-OS_PRIV_CNT+1);
uint32_t const mp_stk_size = sizeof(mp_stk);
@@ -114,6 +127,7 @@
/* Memory pool for user specified stack allocation (+main, +timer) */
uint64_t os_stack_mem[2+OS_PRIV_CNT+(OS_STACK_SZ/8)];
uint32_t const os_stack_sz = sizeof(os_stack_mem);
+#endif
#ifndef OS_FIFOSZ
#define OS_FIFOSZ 16
@@ -129,7 +143,7 @@
/* User Timers Resources */
#if (OS_TIMERS != 0)
extern void osTimerThread (void const *argument);
-#if defined (__MBED_CMSIS_RTOS_CA9)
+#ifdef __MBED_CMSIS_RTOS_CA9
osThreadDef(osTimerThread, (osPriority)(OS_TIMERPRIO-3), 4*OS_TIMERSTKSZ);
#else
osThreadDef(osTimerThread, (osPriority)(OS_TIMERPRIO-3), 1, 4*OS_TIMERSTKSZ);
@@ -237,7 +251,12 @@
/* Main Thread definition */
extern int main (void);
+#ifdef __MBED_CMSIS_RTOS_CA9
+uint32_t os_thread_def_stack_main [(4 * OS_MAINSTKSIZE) / sizeof(uint32_t)];
+osThreadDef_t os_thread_def_main = {(os_pthread)main, osPriorityNormal, 1, 4*OS_MAINSTKSIZE, os_thread_def_stack_main };
+#else
osThreadDef_t os_thread_def_main = {(os_pthread)main, osPriorityNormal, 1, 4*OS_MAINSTKSIZE };
+#endif
#if defined (__CC_ARM)
--- a/rtx/TARGET_CORTEX_A/RTX_Conf_CA.c Wed Jun 17 10:00:10 2015 +0100 +++ b/rtx/TARGET_CORTEX_A/RTX_Conf_CA.c Wed Jun 17 11:15:10 2015 +0100 @@ -50,12 +50,20 @@ #define OS_TASKCNT 25 #endif +#ifdef __MBED_CMSIS_RTOS_CA9 +// <o>Idle stack size [bytes] <64-4096:8><#/4> +// <i> Defines default stack size for the Idle thread. +#ifndef OS_IDLESTKSIZE + #define OS_IDLESTKSIZE 128 +#endif +#else // __MBED_CMSIS_RTOS_CA9 // <o>Default Thread stack size [bytes] <64-4096:8><#/4> // <i> Defines default stack size for threads with osThreadDef stacksz = 0 // <i> Default: 200 #ifndef OS_STKSIZE #define OS_STKSIZE 200 #endif +#endif // __MBED_CMSIS_RTOS_CA9 // <o>Main Thread stack size [bytes] <64-4096:8><#/4> // <i> Defines stack size for main thread. @@ -64,19 +72,21 @@ #define OS_MAINSTKSIZE 2048 #endif +#ifndef __MBED_CMSIS_RTOS_CA9 // <o>Number of threads with user-provided stack size <0-250> // <i> Defines the number of threads with user-provided stack size. // <i> Default: 0 #ifndef OS_PRIVCNT - #define OS_PRIVCNT 10 + #define OS_PRIVCNT 0 #endif // <o>Total stack size [bytes] for threads with user-provided stack size <0-4096:8><#/4> // <i> Defines the combined stack size for threads with user-provided stack size. // <i> Default: 0 #ifndef OS_PRIVSTKSIZE - #define OS_PRIVSTKSIZE 8192 + #define OS_PRIVSTKSIZE 0 #endif +#endif // __MBED_CMSIS_RTOS_CA9 // <q>Check for stack overflow // <i> Includes the stack checking code for stack overflow.
--- a/rtx/TARGET_CORTEX_A/cmsis_os.h Wed Jun 17 10:00:10 2015 +0100
+++ b/rtx/TARGET_CORTEX_A/cmsis_os.h Wed Jun 17 11:15:10 2015 +0100
@@ -264,6 +264,9 @@
osPriority tpriority; ///< initial thread priority
uint32_t instances; ///< maximum number of instances of that thread function
uint32_t stacksize; ///< stack size requirements in bytes; 0 is default stack size
+#ifdef __MBED_CMSIS_RTOS_CA9
+ uint32_t *stack_pointer; ///< pointer to the stack memory block
+#endif
} osThreadDef_t;
/// Timer Definition structure contains timer parameters.
@@ -356,10 +359,11 @@
#define osThreadDef(name, priority, instances, stacksz) \
extern const osThreadDef_t os_thread_def_##name
#else // define the object
-#if defined (__MBED_CMSIS_RTOS_CA9)
+#ifdef __MBED_CMSIS_RTOS_CA9
#define osThreadDef(name, priority, stacksz) \
+uint32_t os_thread_def_stack_##name [stacksz / sizeof(uint32_t)]; \
const osThreadDef_t os_thread_def_##name = \
-{ (name), (priority), 1, (stacksz) }
+{ (name), (priority), 1, (stacksz), (os_thread_def_stack_##name) }
#else
#define osThreadDef(name, priority, instances, stacksz) \
const osThreadDef_t os_thread_def_##name = \
--- a/rtx/TARGET_CORTEX_A/rt_CMSIS.c Wed Jun 17 10:00:10 2015 +0100
+++ b/rtx/TARGET_CORTEX_A/rt_CMSIS.c Wed Jun 17 11:15:10 2015 +0100
@@ -442,9 +442,11 @@
extern const uint32_t os_section_id$$Limit;
#endif
+#ifndef __MBED_CMSIS_RTOS_CA9
// OS Stack Memory for Threads definitions
extern uint64_t os_stack_mem[];
extern const uint32_t os_stack_sz;
+#endif
// OS Timers external resources
extern const osThreadDef_t os_thread_def_osTimerThread;
@@ -546,6 +548,11 @@
/// Initialize the RTOS Kernel for creating objects
osStatus svcKernelInitialize (void) {
+#ifdef __MBED_CMSIS_RTOS_CA9
+ if (!os_initialized) {
+ rt_sys_init(); // RTX System Initialization
+ }
+#else
int ret;
if (!os_initialized) {
@@ -557,6 +564,7 @@
rt_sys_init(); // RTX System Initialization
}
+#endif
os_tsk.run->prio = 255; // Highest priority
@@ -668,6 +676,13 @@
return NULL;
}
+#ifdef __MBED_CMSIS_RTOS_CA9
+ if (thread_def->stacksize != 0) { // Custom stack size
+ stk = (void *)thread_def->stack_pointer;
+ } else { // Default stack size
+ stk = NULL;
+ }
+#else
if (thread_def->stacksize != 0) { // Custom stack size
stk = rt_alloc_mem( // Allocate stack
os_stack_mem,
@@ -680,6 +695,7 @@
} else { // Default stack size
stk = NULL;
}
+#endif
tsk = rt_tsk_create( // Create task
(FUNCP)thread_def->pthread, // Task function pointer
@@ -690,9 +706,11 @@
);
if (tsk == 0) { // Invalid task ID
+#ifndef __MBED_CMSIS_RTOS_CA9
if (stk != NULL) {
rt_free_mem(os_stack_mem, stk); // Free allocated stack
}
+#endif
sysThreadError(osErrorNoMemory); // Create task failed (Out of memory)
return NULL;
}
@@ -717,20 +735,26 @@
osStatus svcThreadTerminate (osThreadId thread_id) {
OS_RESULT res;
P_TCB ptcb;
+#ifndef __MBED_CMSIS_RTOS_CA9
void *stk;
+#endif
ptcb = rt_tid2ptcb(thread_id); // Get TCB pointer
if (ptcb == NULL) return osErrorParameter;
+#ifndef __MBED_CMSIS_RTOS_CA9
stk = ptcb->priv_stack ? ptcb->stack : NULL; // Private stack
+#endif
res = rt_tsk_delete(ptcb->task_id); // Delete task
if (res == OS_R_NOK) return osErrorResource; // Delete task failed
+#ifndef __MBED_CMSIS_RTOS_CA9
if (stk != NULL) {
rt_free_mem(os_stack_mem, stk); // Free private stack
}
+#endif
return osOK;
}
