Select one of the symbols to view example projects that use it.
 
Outline
...
...
...
...
#define TX_SOURCE_CODE
#include "tx_api.h"
#include "tx_thread.h"
...
...
_tx_thread_system_preempt_check()
Files
loading...
CodeScopeSTM32 Libraries and Samplesthreadxcommon/src/tx_thread_system_preempt_check.c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/**************************************************************************/ /* */ /* Copyright (c) Microsoft Corporation. All rights reserved. */ /* */ /* This software is licensed under the Microsoft Software License */ /* Terms for Microsoft Azure RTOS. Full text of the license can be */ /* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */ /* and in the root directory of this software. */ /* */... /**************************************************************************/ ... /**************************************************************************/ /**************************************************************************/ /** */ /** ThreadX Component */ /** */ /** Thread */ /** */... /**************************************************************************/ /**************************************************************************/ #define TX_SOURCE_CODE /* Include necessary system files. */ #include "tx_api.h" #include "tx_thread.h" ... /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _tx_thread_system_preempt_check PORTABLE C */ /* 6.1 */ /* AUTHOR */ /* */ /* William E. Lamie, Microsoft Corporation */ /* */ /* DESCRIPTION */ /* */ /* This function checks for preemption that could have occurred as a */ /* result scheduling activities occurring while the preempt disable */ /* flag was set. */ /* */ /* INPUT */ /* */ /* None */ /* */ /* OUTPUT */ /* */ /* None */ /* */ /* CALLS */ /* */ /* _tx_thread_system_return Return to the system */ /* */ /* CALLED BY */ /* */ /* Other ThreadX Components */ /* */ /* RELEASE HISTORY */ /* */ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 William E. Lamie Initial Version 6.0 */ /* 09-30-2020 Yuxin Zhou Modified comment(s), */ /* resulting in version 6.1 */ /* */... /**************************************************************************/ VOID _tx_thread_system_preempt_check(VOID) { ULONG combined_flags; TX_THREAD *current_thread; TX_THREAD *thread_ptr; /* Combine the system state and preempt disable flags into one for comparison. */ TX_THREAD_SYSTEM_RETURN_CHECK(combined_flags) /* Determine if we are in a system state (ISR or Initialization) or internal preemption is disabled. */ if (combined_flags == ((ULONG) 0)) { /* No, at thread execution level so continue checking for preemption. */ /* Pickup thread pointer. */ TX_THREAD_GET_CURRENT(current_thread) /* Pickup the next execute pointer. */ thread_ptr = _tx_thread_execute_ptr; /* Determine if preemption should take place. */ if (current_thread != thread_ptr) { #ifdef TX_ENABLE_STACK_CHECKING /* Check this thread's stack. */ TX_THREAD_STACK_CHECK(thread_ptr)/* ... */ #endif #ifdef TX_THREAD_ENABLE_PERFORMANCE_INFO /* Determine if an idle system return is present. */ if (thread_ptr == TX_NULL) { /* Yes, increment the return to idle return count. */ _tx_thread_performance_idle_return_count++; }if (thread_ptr == TX_NULL) { ... } else { /* No, there is another thread ready to run and will be scheduled upon return. */ _tx_thread_performance_non_idle_return_count++; }else { ... } /* ... */#endif /* Return to the system so the higher priority thread can be scheduled. */ _tx_thread_system_return(); }if (current_thread != thread_ptr) { ... } }if (combined_flags == ((ULONG) 0)) { ... } }{ ... }