@@ -546,7 +546,7 @@ uint32_t svcKernelSysTick (void) {
546
546
547
547
/// Initialize the RTOS Kernel for creating objects
548
548
osStatus osKernelInitialize (void ) {
549
- if (__get_IPSR () != 0U ) {
549
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
550
550
return osErrorISR ; // Not allowed in ISR
551
551
}
552
552
if ((__get_CONTROL () & 1U ) == 0U ) { // Privileged mode
@@ -560,7 +560,7 @@ osStatus osKernelInitialize (void) {
560
560
osStatus osKernelStart (void ) {
561
561
uint32_t stack [8 ];
562
562
563
- if (__get_IPSR () != 0U ) {
563
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
564
564
return osErrorISR ; // Not allowed in ISR
565
565
}
566
566
@@ -601,7 +601,7 @@ osStatus osKernelStart (void) {
601
601
602
602
/// Check if the RTOS kernel is already started
603
603
int32_t osKernelRunning (void ) {
604
- if ((__get_IPSR () != 0U ) || ((__get_CONTROL () & 1U ) == 0U )) {
604
+ if ((__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) || ((__get_CONTROL () & 1U ) == 0U )) {
605
605
// in ISR or Privileged
606
606
return (int32_t )os_running ;
607
607
} else {
@@ -611,7 +611,7 @@ int32_t osKernelRunning (void) {
611
611
612
612
/// Get the RTOS kernel system timer counter
613
613
uint32_t osKernelSysTick (void ) {
614
- if (__get_IPSR () != 0U ) { return 0U ; } // Not allowed in ISR
614
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { return 0U ; } // Not allowed in ISR
615
615
return __svcKernelSysTick ();
616
616
}
617
617
@@ -799,7 +799,7 @@ osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument) {
799
799
return osThreadContextCreate (thread_def , argument , NULL );
800
800
}
801
801
osThreadId osThreadContextCreate (const osThreadDef_t * thread_def , void * argument , void * context ) {
802
- if (__get_IPSR () != 0U ) {
802
+ if (__get_PRIMASK () != 0U || __get_IPSR () != 0U ) {
803
803
return NULL ; // Not allowed in ISR
804
804
}
805
805
if (((__get_CONTROL () & 1U ) == 0U ) && (os_running == 0U )) {
@@ -812,39 +812,39 @@ osThreadId osThreadContextCreate (const osThreadDef_t *thread_def, void *argumen
812
812
813
813
/// Return the thread ID of the current running thread
814
814
osThreadId osThreadGetId (void ) {
815
- if (__get_IPSR () != 0U ) {
815
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
816
816
return NULL ; // Not allowed in ISR
817
817
}
818
818
return __svcThreadGetId ();
819
819
}
820
820
821
821
/// Terminate execution of a thread and remove it from ActiveThreads
822
822
osStatus osThreadTerminate (osThreadId thread_id ) {
823
- if (__get_IPSR () != 0U ) {
823
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
824
824
return osErrorISR ; // Not allowed in ISR
825
825
}
826
826
return __svcThreadTerminate (thread_id );
827
827
}
828
828
829
829
/// Pass control to next thread that is in state READY
830
830
osStatus osThreadYield (void ) {
831
- if (__get_IPSR () != 0U ) {
831
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
832
832
return osErrorISR ; // Not allowed in ISR
833
833
}
834
834
return __svcThreadYield ();
835
835
}
836
836
837
837
/// Change priority of an active thread
838
838
osStatus osThreadSetPriority (osThreadId thread_id , osPriority priority ) {
839
- if (__get_IPSR () != 0U ) {
839
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
840
840
return osErrorISR ; // Not allowed in ISR
841
841
}
842
842
return __svcThreadSetPriority (thread_id , priority );
843
843
}
844
844
845
845
/// Get current priority of an active thread
846
846
osPriority osThreadGetPriority (osThreadId thread_id ) {
847
- if (__get_IPSR () != 0U ) {
847
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
848
848
return osPriorityError ; // Not allowed in ISR
849
849
}
850
850
return __svcThreadGetPriority (thread_id );
@@ -862,7 +862,7 @@ __NO_RETURN void osThreadExit (void) {
862
862
uint8_t osThreadGetState (osThreadId thread_id ) {
863
863
P_TCB ptcb ;
864
864
865
- if (__get_IPSR () != 0U ) return osErrorISR ; // Not allowed in ISR
865
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) return osErrorISR ; // Not allowed in ISR
866
866
867
867
ptcb = rt_tid2ptcb (thread_id ); // Get TCB pointer
868
868
if (ptcb == NULL ) return INACTIVE ;
@@ -911,7 +911,7 @@ os_InRegs osEvent_type svcWait (uint32_t millisec) {
911
911
912
912
/// Wait for Timeout (Time Delay)
913
913
osStatus osDelay (uint32_t millisec ) {
914
- if (__get_IPSR () != 0U ) {
914
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
915
915
return osErrorISR ; // Not allowed in ISR
916
916
}
917
917
return __svcDelay (millisec );
@@ -925,7 +925,7 @@ os_InRegs osEvent osWait (uint32_t millisec) {
925
925
ret .status = osErrorOS ;
926
926
return ret ;
927
927
#else
928
- if (__get_IPSR () != 0U ) { // Not allowed in ISR
928
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { // Not allowed in ISR
929
929
ret .status = osErrorISR ;
930
930
return ret ;
931
931
}
@@ -1208,7 +1208,7 @@ void sysUserTimerUpdate (uint32_t sleep_time) {
1208
1208
1209
1209
/// Create timer
1210
1210
osTimerId osTimerCreate (const osTimerDef_t * timer_def , os_timer_type type , void * argument ) {
1211
- if (__get_IPSR () != 0U ) {
1211
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1212
1212
return NULL ; // Not allowed in ISR
1213
1213
}
1214
1214
if (((__get_CONTROL () & 1U ) == 0U ) && (os_running == 0U )) {
@@ -1221,23 +1221,23 @@ osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void
1221
1221
1222
1222
/// Start or restart timer
1223
1223
osStatus osTimerStart (osTimerId timer_id , uint32_t millisec ) {
1224
- if (__get_IPSR () != 0U ) {
1224
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1225
1225
return osErrorISR ; // Not allowed in ISR
1226
1226
}
1227
1227
return __svcTimerStart (timer_id , millisec );
1228
1228
}
1229
1229
1230
1230
/// Stop timer
1231
1231
osStatus osTimerStop (osTimerId timer_id ) {
1232
- if (__get_IPSR () != 0U ) {
1232
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1233
1233
return osErrorISR ; // Not allowed in ISR
1234
1234
}
1235
1235
return __svcTimerStop (timer_id );
1236
1236
}
1237
1237
1238
1238
/// Delete timer
1239
1239
osStatus osTimerDelete (osTimerId timer_id ) {
1240
- if (__get_IPSR () != 0U ) {
1240
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1241
1241
return osErrorISR ; // Not allowed in ISR
1242
1242
}
1243
1243
return __svcTimerDelete (timer_id );
@@ -1374,7 +1374,7 @@ int32_t isrSignalSet (osThreadId thread_id, int32_t signals) {
1374
1374
1375
1375
/// Set the specified Signal Flags of an active thread
1376
1376
int32_t osSignalSet (osThreadId thread_id , int32_t signals ) {
1377
- if (__get_IPSR () != 0U ) { // in ISR
1377
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { // in ISR
1378
1378
return isrSignalSet (thread_id , signals );
1379
1379
} else { // in Thread
1380
1380
return __svcSignalSet (thread_id , signals );
@@ -1383,7 +1383,7 @@ int32_t osSignalSet (osThreadId thread_id, int32_t signals) {
1383
1383
1384
1384
/// Clear the specified Signal Flags of an active thread
1385
1385
int32_t osSignalClear (osThreadId thread_id , int32_t signals ) {
1386
- if (__get_IPSR () != 0U ) {
1386
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1387
1387
return (int32_t )0x80000000U ; // Not allowed in ISR
1388
1388
}
1389
1389
return __svcSignalClear (thread_id , signals );
@@ -1393,7 +1393,7 @@ int32_t osSignalClear (osThreadId thread_id, int32_t signals) {
1393
1393
os_InRegs osEvent osSignalWait (int32_t signals , uint32_t millisec ) {
1394
1394
osEvent ret ;
1395
1395
1396
- if (__get_IPSR () != 0U ) { // Not allowed in ISR
1396
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { // Not allowed in ISR
1397
1397
ret .status = osErrorISR ;
1398
1398
return ret ;
1399
1399
}
@@ -1505,7 +1505,7 @@ osStatus svcMutexDelete (osMutexId mutex_id) {
1505
1505
1506
1506
/// Create and Initialize a Mutex object
1507
1507
osMutexId osMutexCreate (const osMutexDef_t * mutex_def ) {
1508
- if (__get_IPSR () != 0U ) {
1508
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1509
1509
return NULL ; // Not allowed in ISR
1510
1510
}
1511
1511
if (((__get_CONTROL () & 1U ) == 0U ) && (os_running == 0U )) {
@@ -1518,23 +1518,23 @@ osMutexId osMutexCreate (const osMutexDef_t *mutex_def) {
1518
1518
1519
1519
/// Wait until a Mutex becomes available
1520
1520
osStatus osMutexWait (osMutexId mutex_id , uint32_t millisec ) {
1521
- if (__get_IPSR () != 0U ) {
1521
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1522
1522
return osErrorISR ; // Not allowed in ISR
1523
1523
}
1524
1524
return __svcMutexWait (mutex_id , millisec );
1525
1525
}
1526
1526
1527
1527
/// Release a Mutex that was obtained with osMutexWait
1528
1528
osStatus osMutexRelease (osMutexId mutex_id ) {
1529
- if (__get_IPSR () != 0U ) {
1529
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1530
1530
return osErrorISR ; // Not allowed in ISR
1531
1531
}
1532
1532
return __svcMutexRelease (mutex_id );
1533
1533
}
1534
1534
1535
1535
/// Delete a Mutex that was created by osMutexCreate
1536
1536
osStatus osMutexDelete (osMutexId mutex_id ) {
1537
- if (__get_IPSR () != 0U ) {
1537
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1538
1538
return osErrorISR ; // Not allowed in ISR
1539
1539
}
1540
1540
return __svcMutexDelete (mutex_id );
@@ -1672,7 +1672,7 @@ osStatus isrSemaphoreRelease (osSemaphoreId semaphore_id) {
1672
1672
1673
1673
/// Create and Initialize a Semaphore object
1674
1674
osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t * semaphore_def , int32_t count ) {
1675
- if (__get_IPSR () != 0U ) {
1675
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1676
1676
return NULL ; // Not allowed in ISR
1677
1677
}
1678
1678
if (((__get_CONTROL () & 1U ) == 0U ) && (os_running == 0U )) {
@@ -1685,24 +1685,24 @@ osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t
1685
1685
1686
1686
/// Wait until a Semaphore becomes available
1687
1687
int32_t osSemaphoreWait (osSemaphoreId semaphore_id , uint32_t millisec ) {
1688
- if (__get_IPSR () != 0U ) {
1688
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1689
1689
return -1 ; // Not allowed in ISR
1690
1690
}
1691
1691
return __svcSemaphoreWait (semaphore_id , millisec );
1692
1692
}
1693
1693
1694
1694
/// Release a Semaphore
1695
1695
osStatus osSemaphoreRelease (osSemaphoreId semaphore_id ) {
1696
- if (__get_IPSR () != 0U ) { // in ISR
1696
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { // in ISR
1697
1697
return isrSemaphoreRelease (semaphore_id );
1698
- } else { // in Thread
1698
+ } else { // in Thread
1699
1699
return __svcSemaphoreRelease (semaphore_id );
1700
1700
}
1701
1701
}
1702
1702
1703
1703
/// Delete a Semaphore that was created by osSemaphoreCreate
1704
1704
osStatus osSemaphoreDelete (osSemaphoreId semaphore_id ) {
1705
- if (__get_IPSR () != 0U ) {
1705
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1706
1706
return osErrorISR ; // Not allowed in ISR
1707
1707
}
1708
1708
return __svcSemaphoreDelete (semaphore_id );
@@ -1785,7 +1785,7 @@ osStatus sysPoolFree (osPoolId pool_id, void *block) {
1785
1785
1786
1786
/// Create and Initialize memory pool
1787
1787
osPoolId osPoolCreate (const osPoolDef_t * pool_def ) {
1788
- if (__get_IPSR () != 0U ) {
1788
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1789
1789
return NULL ; // Not allowed in ISR
1790
1790
}
1791
1791
if (((__get_CONTROL () & 1U ) == 0U ) && (os_running == 0U )) {
@@ -1798,7 +1798,7 @@ osPoolId osPoolCreate (const osPoolDef_t *pool_def) {
1798
1798
1799
1799
/// Allocate a memory block from a memory pool
1800
1800
void * osPoolAlloc (osPoolId pool_id ) {
1801
- if ((__get_IPSR () != 0U ) || ((__get_CONTROL () & 1U ) == 0U )) { // in ISR or Privileged
1801
+ if ((__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) || ((__get_CONTROL () & 1U ) == 0U )) { // in ISR or Privileged
1802
1802
return sysPoolAlloc (pool_id );
1803
1803
} else { // in Thread
1804
1804
return __sysPoolAlloc (pool_id );
@@ -1809,7 +1809,7 @@ void *osPoolAlloc (osPoolId pool_id) {
1809
1809
void * osPoolCAlloc (osPoolId pool_id ) {
1810
1810
void * mem ;
1811
1811
1812
- if ((__get_IPSR () != 0U ) || ((__get_CONTROL () & 1U ) == 0U )) { // in ISR or Privileged
1812
+ if ((__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) || ((__get_CONTROL () & 1U ) == 0U )) { // in ISR or Privileged
1813
1813
mem = sysPoolAlloc (pool_id );
1814
1814
} else { // in Thread
1815
1815
mem = __sysPoolAlloc (pool_id );
@@ -1822,7 +1822,7 @@ void *osPoolCAlloc (osPoolId pool_id) {
1822
1822
1823
1823
/// Return an allocated memory block back to a specific memory pool
1824
1824
osStatus osPoolFree (osPoolId pool_id , void * block ) {
1825
- if ((__get_IPSR () != 0U ) || ((__get_CONTROL () & 1U ) == 0U )) { // in ISR or Privileged
1825
+ if ((__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) || ((__get_CONTROL () & 1U ) == 0U )) { // in ISR or Privileged
1826
1826
return sysPoolFree (pool_id , block );
1827
1827
} else { // in Thread
1828
1828
return __sysPoolFree (pool_id , block );
@@ -1962,7 +1962,7 @@ os_InRegs osEvent isrMessageGet (osMessageQId queue_id, uint32_t millisec) {
1962
1962
1963
1963
/// Create and Initialize Message Queue
1964
1964
osMessageQId osMessageCreate (const osMessageQDef_t * queue_def , osThreadId thread_id ) {
1965
- if (__get_IPSR () != 0U ) {
1965
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
1966
1966
return NULL ; // Not allowed in ISR
1967
1967
}
1968
1968
if (((__get_CONTROL () & 1U ) == 0U ) && (os_running == 0U )) {
@@ -1975,7 +1975,7 @@ osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId threa
1975
1975
1976
1976
/// Put a Message to a Queue
1977
1977
osStatus osMessagePut (osMessageQId queue_id , uint32_t info , uint32_t millisec ) {
1978
- if (__get_IPSR () != 0U ) { // in ISR
1978
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { // in ISR
1979
1979
return isrMessagePut (queue_id , info , millisec );
1980
1980
} else { // in Thread
1981
1981
return __svcMessagePut (queue_id , info , millisec );
@@ -1984,7 +1984,7 @@ osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec)
1984
1984
1985
1985
/// Get a Message or Wait for a Message from a Queue
1986
1986
os_InRegs osEvent osMessageGet (osMessageQId queue_id , uint32_t millisec ) {
1987
- if (__get_IPSR () != 0U ) { // in ISR
1987
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { // in ISR
1988
1988
return isrMessageGet (queue_id , millisec );
1989
1989
} else { // in Thread
1990
1990
return __svcMessageGet (queue_id , millisec );
@@ -2121,7 +2121,7 @@ osStatus sysMailFree (osMailQId queue_id, void *mail, uint32_t isr) {
2121
2121
2122
2122
/// Create and Initialize mail queue
2123
2123
osMailQId osMailCreate (const osMailQDef_t * queue_def , osThreadId thread_id ) {
2124
- if (__get_IPSR () != 0U ) {
2124
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) {
2125
2125
return NULL ; // Not allowed in ISR
2126
2126
}
2127
2127
if (((__get_CONTROL () & 1U ) == 0U ) && (os_running == 0U )) {
@@ -2134,7 +2134,7 @@ osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id) {
2134
2134
2135
2135
/// Allocate a memory block from a mail
2136
2136
void * osMailAlloc (osMailQId queue_id , uint32_t millisec ) {
2137
- if (__get_IPSR () != 0U ) { // in ISR
2137
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { // in ISR
2138
2138
return sysMailAlloc (queue_id , millisec , 1U );
2139
2139
} else { // in Thread
2140
2140
return __sysMailAlloc (queue_id , millisec , 0U );
@@ -2146,7 +2146,7 @@ void *osMailCAlloc (osMailQId queue_id, uint32_t millisec) {
2146
2146
void * pool ;
2147
2147
void * mem ;
2148
2148
2149
- if (__get_IPSR () != 0U ) { // in ISR
2149
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { // in ISR
2150
2150
mem = sysMailAlloc (queue_id , millisec , 1U );
2151
2151
} else { // in Thread
2152
2152
mem = __sysMailAlloc (queue_id , millisec , 0U );
@@ -2161,7 +2161,7 @@ void *osMailCAlloc (osMailQId queue_id, uint32_t millisec) {
2161
2161
2162
2162
/// Free a memory block from a mail
2163
2163
osStatus osMailFree (osMailQId queue_id , void * mail ) {
2164
- if (__get_IPSR () != 0U ) { // in ISR
2164
+ if (__get_PRIMASK () != 0U || __get_BASEPRI () != 0U || __get_IPSR () != 0U ) { // in ISR
2165
2165
return sysMailFree (queue_id , mail , 1U );
2166
2166
} else { // in Thread
2167
2167
return __sysMailFree (queue_id , mail , 0U );
0 commit comments