Skip to content

Commit 4ae6b05

Browse files
committed
Merge pull request #1 from 0xc0170/dev_update_rtos
RTOS - update to v4.79
2 parents 1ee1150 + dd49382 commit 4ae6b05

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+2276
-1262
lines changed

core/mbed-rtos/rtos/Mutex.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class Mutex {
5757
osMutexId _osMutexId;
5858
osMutexDef_t _osMutexDef;
5959
#ifdef CMSIS_OS_RTX
60-
#ifdef __MBED_CMSIS_RTOS_CA9
60+
#if defined(__MBED_CMSIS_RTOS_CA9) || defined(__MBED_CMSIS_RTOS_CM)
6161
int32_t _mutex_data[4];
6262
#else
6363
int32_t _mutex_data[3];

core/mbed-rtos/rtos/RtosTimer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@ class RtosTimer {
6161
private:
6262
osTimerId _timer_id;
6363
osTimerDef_t _timer;
64-
#ifdef CMSIS_OS_RTX
64+
#if defined(CMSIS_OS_RTX) && !defined(__MBED_CMSIS_RTOS_CM)
6565
uint32_t _timer_data[5];
66+
#else
67+
uint32_t _timer_data[6];
6668
#endif
6769
};
6870

core/mbed-rtos/rtos/Thread.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace rtos {
2828

2929
Thread::Thread(void (*task)(void const *argument), void *argument,
3030
osPriority priority, uint32_t stack_size, unsigned char *stack_pointer) {
31-
#ifdef CMSIS_OS_RTX
31+
#ifdef __MBED_CMSIS_RTOS_CM
3232
_thread_def.pthread = task;
3333
_thread_def.tpriority = priority;
3434
_thread_def.stacksize = stack_size;
@@ -71,8 +71,10 @@ int32_t Thread::signal_clr(int32_t signals) {
7171
}
7272

7373
Thread::State Thread::get_state() {
74-
#ifndef __MBED_CMSIS_RTOS_CA9
74+
#if !defined(__MBED_CMSIS_RTOS_CA9) && !defined(__MBED_CMSIS_RTOS_CM)
75+
#ifdef CMSIS_OS_RTX
7576
return ((State)_thread_def.tcb.state);
77+
#endif
7678
#else
7779
uint8_t status;
7880
status = osThreadGetState(_tid);
@@ -82,39 +84,55 @@ Thread::State Thread::get_state() {
8284

8385
uint32_t Thread::stack_size() {
8486
#ifndef __MBED_CMSIS_RTOS_CA9
87+
#if defined(CMSIS_OS_RTX) && !defined(__MBED_CMSIS_RTOS_CM)
8588
return _thread_def.tcb.priv_stack;
8689
#else
8790
return 0;
8891
#endif
92+
#else
93+
return 0;
94+
#endif
8995
}
9096

9197
uint32_t Thread::free_stack() {
9298
#ifndef __MBED_CMSIS_RTOS_CA9
99+
#if defined(CMSIS_OS_RTX) && !defined(__MBED_CMSIS_RTOS_CM)
93100
uint32_t bottom = (uint32_t)_thread_def.tcb.stack;
94101
return _thread_def.tcb.tsk_stack - bottom;
95102
#else
96103
return 0;
97104
#endif
105+
#else
106+
return 0;
107+
#endif
98108
}
99109

100110
uint32_t Thread::used_stack() {
101111
#ifndef __MBED_CMSIS_RTOS_CA9
112+
#if defined(CMSIS_OS_RTX) && !defined(__MBED_CMSIS_RTOS_CM)
102113
uint32_t top = (uint32_t)_thread_def.tcb.stack + _thread_def.tcb.priv_stack;
103114
return top - _thread_def.tcb.tsk_stack;
104115
#else
105116
return 0;
106117
#endif
118+
#else
119+
return 0;
120+
#endif
107121
}
108122

109123
uint32_t Thread::max_stack() {
110124
#ifndef __MBED_CMSIS_RTOS_CA9
125+
#if defined(CMSIS_OS_RTX) && !defined(__MBED_CMSIS_RTOS_CM)
111126
uint32_t high_mark = 0;
112127
while (_thread_def.tcb.stack[high_mark] == 0xE25A2EA5)
113128
high_mark++;
114129
return _thread_def.tcb.priv_stack - (high_mark * 4);
115130
#else
116131
return 0;
117132
#endif
133+
#else
134+
return 0;
135+
#endif
118136
}
119137

120138
osEvent Thread::signal_wait(int32_t signals, uint32_t millisec) {
@@ -139,9 +157,11 @@ void Thread::attach_idle_hook(void (*fptr)(void)) {
139157

140158
Thread::~Thread() {
141159
terminate();
160+
#ifdef __MBED_CMSIS_RTOS_CM
142161
if (_dynamic_stack) {
143162
delete[] (_thread_def.stack_pointer);
144163
}
164+
#endif
145165
}
146166

147167
}

core/mbed-rtos/rtx/TARGET_CORTEX_M/HAL_CM.c

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/*----------------------------------------------------------------------------
2-
* RL-ARM - RTX
2+
* CMSIS-RTOS - RTX
33
*----------------------------------------------------------------------------
44
* Name: HAL_CM.C
55
* Purpose: Hardware Abstraction Layer for Cortex-M
6-
* Rev.: V4.60
6+
* Rev.: V4.79
77
*----------------------------------------------------------------------------
88
*
9-
* Copyright (c) 1999-2009 KEIL, 2009-2012 ARM Germany GmbH
9+
* Copyright (c) 1999-2009 KEIL, 2009-2015 ARM Germany GmbH
1010
* All rights reserved.
1111
* Redistribution and use in source and binary forms, with or without
1212
* modification, are permitted provided that the following conditions are met:
@@ -33,7 +33,7 @@
3333
*---------------------------------------------------------------------------*/
3434

3535
#include "rt_TypeDef.h"
36-
#include "RTX_Conf.h"
36+
#include "RTX_Config.h"
3737
#include "rt_HAL_CM.h"
3838

3939

@@ -58,12 +58,15 @@ void rt_init_stack (P_TCB p_TCB, FUNCP task_body) {
5858

5959
/* Prepare a complete interrupt frame for first task start */
6060
size = p_TCB->priv_stack >> 2;
61+
if (size == 0U) {
62+
size = (U16)os_stackinfo >> 2;
63+
}
6164

6265
/* Write to the top of stack. */
6366
stk = &p_TCB->stack[size];
6467

6568
/* Auto correct to 8-byte ARM stack alignment. */
66-
if ((U32)stk & 0x04) {
69+
if ((U32)stk & 0x04U) {
6770
stk--;
6871
}
6972

@@ -74,8 +77,8 @@ void rt_init_stack (P_TCB p_TCB, FUNCP task_body) {
7477
stk[14] = (U32)task_body;
7578

7679
/* Clear R4-R11,R0-R3,R12,LR registers. */
77-
for (i = 0; i < 14; i++) {
78-
stk[i] = 0;
80+
for (i = 0U; i < 14U; i++) {
81+
stk[i] = 0U;
7982
}
8083

8184
/* Assign a void pointer to R0. */
@@ -87,31 +90,50 @@ void rt_init_stack (P_TCB p_TCB, FUNCP task_body) {
8790
/* Task entry point. */
8891
p_TCB->ptask = task_body;
8992

93+
/* Initialize stack with magic pattern. */
94+
if (os_stackinfo & 0x10000000U) {
95+
if (size > (16U+1U)) {
96+
for (i = ((size - 16U)/2U) - 1U; i; i--) {
97+
stk -= 2U;
98+
stk[1] = MAGIC_PATTERN;
99+
stk[0] = MAGIC_PATTERN;
100+
}
101+
if (--stk > p_TCB->stack) {
102+
*stk = MAGIC_PATTERN;
103+
}
104+
}
105+
}
106+
107+
#ifdef __MBED_CMSIS_RTOS_CM
90108
/* Set a magic word for checking of stack overflow.
91-
For the main thread (ID: 0x01) the stack is in a memory area shared with the
109+
For the main thread (ID: 0x02) the stack is in a memory area shared with the
92110
heap, therefore the last word of the stack is a moving target.
93111
We want to do stack/heap collision detection instead.
94112
*/
95-
if (p_TCB->task_id != 0x01)
113+
if (p_TCB->task_id != 0x02)
96114
p_TCB->stack[0] = MAGIC_WORD;
115+
#else
116+
/* Set a magic word for checking of stack overflow. */
117+
p_TCB->stack[0] = MAGIC_WORD;
118+
#endif
97119
}
98120

99121

100122
/*--------------------------- rt_ret_val ----------------------------------*/
101123

102124
static __inline U32 *rt_ret_regs (P_TCB p_TCB) {
103125
/* Get pointer to task return value registers (R0..R3) in Stack */
104-
#if (__TARGET_FPU_VFP)
126+
#if defined(__TARGET_FPU_VFP)
105127
if (p_TCB->stack_frame) {
106128
/* Extended Stack Frame: R4-R11,S16-S31,R0-R3,R12,LR,PC,xPSR,S0-S15,FPSCR */
107-
return (U32 *)(p_TCB->tsk_stack + 8*4 + 16*4);
129+
return (U32 *)(p_TCB->tsk_stack + (8U*4U) + (16U*4U));
108130
} else {
109131
/* Basic Stack Frame: R4-R11,R0-R3,R12,LR,PC,xPSR */
110-
return (U32 *)(p_TCB->tsk_stack + 8*4);
132+
return (U32 *)(p_TCB->tsk_stack + (8U*4U));
111133
}
112134
#else
113135
/* Stack Frame: R4-R11,R0-R3,R12,LR,PC,xPSR */
114-
return (U32 *)(p_TCB->tsk_stack + 8*4);
136+
return (U32 *)(p_TCB->tsk_stack + (8U*4U));
115137
#endif
116138
}
117139

@@ -135,9 +157,9 @@ void rt_ret_val2(P_TCB p_TCB, U32 v0, U32 v1) {
135157

136158
#ifdef DBG_MSG
137159
void dbg_init (void) {
138-
if ((DEMCR & DEMCR_TRCENA) &&
139-
(ITM_CONTROL & ITM_ITMENA) &&
140-
(ITM_ENABLE & (1UL << 31))) {
160+
if (((DEMCR & DEMCR_TRCENA) != 0U) &&
161+
((ITM_CONTROL & ITM_ITMENA) != 0U) &&
162+
((ITM_ENABLE & (1UL << 31)) != 0U)) {
141163
dbg_msg = __TRUE;
142164
}
143165
}
@@ -147,24 +169,22 @@ void dbg_init (void) {
147169

148170
#ifdef DBG_MSG
149171
void dbg_task_notify (P_TCB p_tcb, BOOL create) {
150-
while (ITM_PORT31_U32 == 0);
172+
while (ITM_PORT31_U32 == 0U);
151173
ITM_PORT31_U32 = (U32)p_tcb->ptask;
152-
while (ITM_PORT31_U32 == 0);
153-
ITM_PORT31_U16 = (create << 8) | p_tcb->task_id;
174+
while (ITM_PORT31_U32 == 0U);
175+
ITM_PORT31_U16 = (U16)((create << 8) | p_tcb->task_id);
154176
}
155177
#endif
156178

157179
/*--------------------------- dbg_task_switch -------------------------------*/
158180

159181
#ifdef DBG_MSG
160182
void dbg_task_switch (U32 task_id) {
161-
while (ITM_PORT31_U32 == 0);
162-
ITM_PORT31_U8 = task_id;
183+
while (ITM_PORT31_U32 == 0U);
184+
ITM_PORT31_U8 = (U8)task_id;
163185
}
164186
#endif
165187

166-
167188
/*----------------------------------------------------------------------------
168189
* end of file
169190
*---------------------------------------------------------------------------*/
170-

0 commit comments

Comments
 (0)