|
79 | 79 | #define tmrSTATUS_IS_STATICALLY_ALLOCATED ( 0x02U )
|
80 | 80 | #define tmrSTATUS_IS_AUTORELOAD ( 0x04U )
|
81 | 81 |
|
| 82 | +/* |
| 83 | + * Macros to mark the start and end of a critical code region. |
| 84 | + */ |
| 85 | + #if ( portUSING_GRANULAR_LOCKS == 1 ) |
| 86 | + #define tmrENTER_CRITICAL() taskDATA_GROUP_ENTER_CRITICAL( &xTimerDataGroupLocks ) |
| 87 | + #define tmrEXIT_CRITICAL() taskDATA_GROUP_EXIT_CRITICAL( &xTimerDataGroupLocks ) |
| 88 | + #else /* #if ( portUSING_GRANULAR_LOCKS == 1 ) */ |
| 89 | + #define tmrENTER_CRITICAL() taskENTER_CRITICAL() |
| 90 | + #define tmrEXIT_CRITICAL() taskEXIT_CRITICAL() |
| 91 | + #endif /* #if ( portUSING_GRANULAR_LOCKS == 1 ) */ |
| 92 | + |
82 | 93 | /* The definition of the timers themselves. */
|
83 | 94 | typedef struct tmrTimerControl /* The old naming convention is used to prevent breaking kernel aware debuggers. */
|
84 | 95 | {
|
|
149 | 160 | PRIVILEGED_DATA static QueueHandle_t xTimerQueue = NULL;
|
150 | 161 | PRIVILEGED_DATA static TaskHandle_t xTimerTaskHandle = NULL;
|
151 | 162 |
|
| 163 | + #if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) |
| 164 | + PRIVILEGED_DATA static struct |
| 165 | + { |
| 166 | + portSPINLOCK_TYPE xTaskSpinlock; |
| 167 | + portSPINLOCK_TYPE xISRSpinlock; |
| 168 | + } |
| 169 | + xTimerDataGroupLocks = |
| 170 | + { |
| 171 | + .xTaskSpinlock = portINIT_SPINLOCK_STATIC, |
| 172 | + .xISRSpinlock = portINIT_SPINLOCK_STATIC |
| 173 | + }; |
| 174 | + #endif /* #if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */ |
| 175 | + |
152 | 176 | /*-----------------------------------------------------------*/
|
153 | 177 |
|
154 | 178 | /*
|
|
572 | 596 | traceENTER_vTimerSetReloadMode( xTimer, xAutoReload );
|
573 | 597 |
|
574 | 598 | configASSERT( xTimer );
|
575 |
| - taskENTER_CRITICAL(); |
| 599 | + tmrENTER_CRITICAL(); |
576 | 600 | {
|
577 | 601 | if( xAutoReload != pdFALSE )
|
578 | 602 | {
|
|
583 | 607 | pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_AUTORELOAD );
|
584 | 608 | }
|
585 | 609 | }
|
586 |
| - taskEXIT_CRITICAL(); |
| 610 | + tmrEXIT_CRITICAL(); |
587 | 611 |
|
588 | 612 | traceRETURN_vTimerSetReloadMode();
|
589 | 613 | }
|
|
597 | 621 | traceENTER_xTimerGetReloadMode( xTimer );
|
598 | 622 |
|
599 | 623 | configASSERT( xTimer );
|
600 |
| - portBASE_TYPE_ENTER_CRITICAL(); |
| 624 | + tmrENTER_CRITICAL(); |
601 | 625 | {
|
602 | 626 | if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) == 0U )
|
603 | 627 | {
|
|
610 | 634 | xReturn = pdTRUE;
|
611 | 635 | }
|
612 | 636 | }
|
613 |
| - portBASE_TYPE_EXIT_CRITICAL(); |
| 637 | + tmrEXIT_CRITICAL(); |
614 | 638 |
|
615 | 639 | traceRETURN_xTimerGetReloadMode( xReturn );
|
616 | 640 |
|
|
1116 | 1140 | /* Check that the list from which active timers are referenced, and the
|
1117 | 1141 | * queue used to communicate with the timer service, have been
|
1118 | 1142 | * initialised. */
|
1119 |
| - taskENTER_CRITICAL(); |
| 1143 | + tmrENTER_CRITICAL(); |
1120 | 1144 | {
|
1121 | 1145 | if( xTimerQueue == NULL )
|
1122 | 1146 | {
|
|
1158 | 1182 | mtCOVERAGE_TEST_MARKER();
|
1159 | 1183 | }
|
1160 | 1184 | }
|
1161 |
| - taskEXIT_CRITICAL(); |
| 1185 | + tmrEXIT_CRITICAL(); |
1162 | 1186 | }
|
1163 | 1187 | /*-----------------------------------------------------------*/
|
1164 | 1188 |
|
|
1172 | 1196 | configASSERT( xTimer );
|
1173 | 1197 |
|
1174 | 1198 | /* Is the timer in the list of active timers? */
|
1175 |
| - portBASE_TYPE_ENTER_CRITICAL(); |
| 1199 | + tmrENTER_CRITICAL(); |
1176 | 1200 | {
|
1177 | 1201 | if( ( pxTimer->ucStatus & tmrSTATUS_IS_ACTIVE ) == 0U )
|
1178 | 1202 | {
|
|
1183 | 1207 | xReturn = pdTRUE;
|
1184 | 1208 | }
|
1185 | 1209 | }
|
1186 |
| - portBASE_TYPE_EXIT_CRITICAL(); |
| 1210 | + tmrEXIT_CRITICAL(); |
1187 | 1211 |
|
1188 | 1212 | traceRETURN_xTimerIsTimerActive( xReturn );
|
1189 | 1213 |
|
|
1200 | 1224 |
|
1201 | 1225 | configASSERT( xTimer );
|
1202 | 1226 |
|
1203 |
| - taskENTER_CRITICAL(); |
| 1227 | + tmrENTER_CRITICAL(); |
1204 | 1228 | {
|
1205 | 1229 | pvReturn = pxTimer->pvTimerID;
|
1206 | 1230 | }
|
1207 |
| - taskEXIT_CRITICAL(); |
| 1231 | + tmrEXIT_CRITICAL(); |
1208 | 1232 |
|
1209 | 1233 | traceRETURN_pvTimerGetTimerID( pvReturn );
|
1210 | 1234 |
|
|
1221 | 1245 |
|
1222 | 1246 | configASSERT( xTimer );
|
1223 | 1247 |
|
1224 |
| - taskENTER_CRITICAL(); |
| 1248 | + tmrENTER_CRITICAL(); |
1225 | 1249 | {
|
1226 | 1250 | pxTimer->pvTimerID = pvNewID;
|
1227 | 1251 | }
|
1228 |
| - taskEXIT_CRITICAL(); |
| 1252 | + tmrEXIT_CRITICAL(); |
1229 | 1253 |
|
1230 | 1254 | traceRETURN_vTimerSetTimerID();
|
1231 | 1255 | }
|
|
0 commit comments