Skip to content

Commit 2cbd857

Browse files
committed
Fix Interrupt depth comparison logic
Fix parameter mismatch in portmacro.h file.
1 parent 6fcec80 commit 2cbd857

File tree

4 files changed

+12
-11
lines changed

4 files changed

+12
-11
lines changed

portable/CCRH/F1Kx/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ The test project can be found [here](https://github.com/FreeRTOS/FreeRTOS-Commun
2323
## Note
2424
1. Configure IPIR Interrupt: Ensure that the bit specifying the destination for binding (requesting) an interrupt is enabled (e.g: IBDxxx register of F1KH-D8) (1)
2525
2. `Channel 0` and address `0xFFFEEC00` are used as default configuration for configIPIR_CHANNEL and configEXCLUSIVE_ADDRESS, in case of resource confliction other channel/address can be used. (2)
26-
3. The minimal stack size (configMINIMAL_STACK_SIZE) must be included the reserved memory for nested interrupt. This formula can be referred: `(task_context_size) * (1 + configMAX_INT_NESTING) + Stack_depth_of_taskcode`
27-
In which, `task_context_size` is calculated as `36*4bytes = 144bytes` (when FPU enabled) or `34*4bytes = 136` (when FPU disabled), configMAX_INT_NESTING is 02 as default.
26+
3. The minimal stack size (configMINIMAL_STACK_SIZE) must be included the reserved memory for nested interrupt. This formula can be referred: `(task_context_size) * (2 + configMAX_INT_NESTING) + Stack_depth_of_taskcode`
27+
In which, `task_context_size` is calculated as `36*4bytes = 144bytes` (when FPU enabled) or `34*4bytes = 136` (when FPU disabled), configMAX_INT_NESTING is `02` as default (Note that a value of `0` is not allowed).
2828
4. `configTIMER_PRESCALE`: This value is required in order to correctly configure clock for `CPUCLK_L`. Refer to Hardware Manual at `Table 44.22` for `option byte`: If the user sets the option byte `CKDIVMD to 1`, then `configTIMER_PRESCALE = 4`. Otherwise, if `CKDIVMD is set to 0`, then `configTIMER_PRESCALE = 2`.
2929

3030
(1) This is applicable for F1KH-D8 with SMP only.

portable/CCRH/F1Kx/port.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@
171171
#define configSETUP_TICK_INTERRUPT() prvSetupTimerInterrupt()
172172
#endif /* configSETUP_TICK_INTERRUPT */
173173

174-
#ifndef configMAX_INT_NESTING
174+
#if ( !defined( configMAX_INT_NESTING ) || ( configMAX_INT_NESTING == 0 ) )
175175

176176
/* Set the default value for depth of nested interrupt. In theory, the
177177
* microcontroller have mechanism to limit number of nested level of interrupt
@@ -225,7 +225,7 @@ volatile BaseType_t xPortScheduleStatus[ configNUMBER_OF_CORES ] = { 0 };
225225
* It is necessary to control maximum stack depth.
226226
*/
227227
volatile UBaseType_t uxInterruptNesting[ configNUMBER_OF_CORES ] = { 0 };
228-
volatile const UBaseType_t uxPortMaxInterruptDepth = configMAX_INT_NESTING - 1;
228+
volatile const UBaseType_t uxPortMaxInterruptDepth = configMAX_INT_NESTING;
229229

230230
/* Count number of nested locks by same cores. The lock is completely released
231231
* only if this count is decreased to 0, the lock is separated for task

portable/CCRH/F1Kx/portasm.s

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,10 @@ _vIrq_Handler:
269269

270270
; Do not enable interrupt for nesting. Stackover flow may occurs if the
271271
; depth of nesting interrupt is exceeded.
272-
mov #_uxPortMaxInterruptDepth, r15
273-
cmp r16, r15
274-
be 4 ; Jump over ei instruction
272+
mov #_uxPortMaxInterruptDepth, r19
273+
ld.w 0[r19], r15
274+
cmp r15, r16
275+
bge 4 ; Jump over ei instruction
275276
ei
276277
jarl _vCommonISRHandler, lp
277278
di

portable/CCRH/F1Kx/portmacro.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,11 @@
111111
/* Scheduler utilities */
112112

113113
/* Called at the end of an ISR that can cause a context switch */
114-
extern void vPortSetSwitch( BaseType_t vPortSetSwitch );
114+
extern void vPortSetSwitch( BaseType_t xSwitchRequired );
115115

116-
#define portEND_SWITCHING_ISR( xSwitchRequired ) vPortSetSwitch( vPortSetSwitch )
116+
#define portEND_SWITCHING_ISR( x ) vPortSetSwitch( x )
117117

118-
#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x )
118+
#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x )
119119

120120
/* Use to transfer control from one task to perform other tasks of
121121
* higher priority */
@@ -131,7 +131,7 @@
131131
#define coreid xPortGET_CORE_ID()
132132

133133
/* Request the core ID x to yield. */
134-
extern void vPortYieldCore( unsigned int coreID );
134+
extern void vPortYieldCore( uint32_t coreID );
135135

136136
#define portYIELD_CORE( x ) vPortYieldCore( x )
137137

0 commit comments

Comments
 (0)