blob: 5d0330a5e0f5a6b4a60f5f2371a7b6df8e7b9db8 (
plain)
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
|
/***************************************************************************
* Copyright (c) 2024 Microsoft Corporation
* Copyright (c) 2026-present Eclipse ThreadX contributors
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
*
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** ThreadX Component */
/** */
/** Trace */
/** */
/**************************************************************************/
/**************************************************************************/
#define TX_SOURCE_CODE
/* Include necessary system files. */
#include "tx_api.h"
#include "tx_trace.h"
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
/* */
/* _tx_trace_object_unregister PORTABLE C */
/* 6.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
/* */
/* DESCRIPTION */
/* */
/* This function unregisters a ThreadX system object from the trace */
/* registry area. */
/* */
/* INPUT */
/* */
/* object_pointer Address of system object */
/* */
/* OUTPUT */
/* */
/* None */
/* */
/* CALLS */
/* */
/* None */
/* */
/* CALLED BY */
/* */
/* Application Code */
/* */
/**************************************************************************/
VOID _tx_trace_object_unregister(VOID *object_ptr)
{
#ifdef TX_ENABLE_EVENT_TRACE
UINT i, entries;
UCHAR *work_ptr;
TX_TRACE_OBJECT_ENTRY *entry_ptr;
/* Determine if the registry area is setup. */
if (_tx_trace_registry_start_ptr != TX_NULL)
{
/* Registry is setup, proceed. */
/* Pickup the total entries. */
entries = (UINT) _tx_trace_total_registry_entries;
/* Loop to find available entry. */
for (i = ((ULONG) 0); i < entries; i++)
{
/* Setup the registry entry pointer. */
work_ptr = TX_OBJECT_TO_UCHAR_POINTER_CONVERT(_tx_trace_registry_start_ptr);
work_ptr = TX_UCHAR_POINTER_ADD(work_ptr, ((sizeof(TX_TRACE_OBJECT_ENTRY))*i));
entry_ptr = TX_UCHAR_TO_OBJECT_POINTER_CONVERT(work_ptr);
/* Determine if this entry matches the object pointer... */
if (entry_ptr -> tx_trace_object_entry_thread_pointer == TX_POINTER_TO_ULONG_CONVERT(object_ptr))
{
/* Mark this entry as available, but leave the other information so that old trace entries can
still find it - if necessary! */
entry_ptr -> tx_trace_object_entry_available = ((UCHAR) TX_TRUE);
/* Increment the number of available registry entries. */
_tx_trace_available_registry_entries++;
/* Adjust the search index to this position. */
_tx_trace_registry_search_start = i;
break;
}
}
}
#else
TX_INTERRUPT_SAVE_AREA
/* Access input arguments just for the sake of lint, MISRA, etc. */
if (object_ptr != TX_NULL)
{
/* NOP code. */
TX_DISABLE
TX_RESTORE
}
#endif
}
|