34 #define MICRIUM_SOURCE
37 #ifdef VSC_INCLUDE_SOURCE_FILE_NAMES
38 const CPU_CHAR *os_tls__c =
"$Id: $";
41 #if defined(OS_CFG_TLS_TBL_SIZE) && (OS_CFG_TLS_TBL_SIZE > 0u)
68 OS_TLS_ID OS_TLS_GetID (
OS_ERR *p_err)
75 #ifdef OS_SAFETY_CRITICAL
76 if (p_err == (
OS_ERR *)0) {
77 OS_SAFETY_CRITICAL_EXCEPTION();
89 id = OS_TLS_NextAvailID;
126 OS_TLS OS_TLS_GetValue (OS_TCB *p_tcb,
135 #ifdef OS_SAFETY_CRITICAL
136 if (p_err == (
OS_ERR *)0) {
137 OS_SAFETY_CRITICAL_EXCEPTION();
143 #if OS_CFG_ARG_CHK_EN > 0u
144 if (
id >= OS_TLS_NextAvailID) {
151 if (p_tcb == (OS_TCB *)0) {
160 value = p_tcb->TLS_Tbl[id];
163 return ((OS_TLS)value);
206 void OS_TLS_SetDestruct (OS_TLS_ID
id,
207 OS_TLS_DESTRUCT_PTR p_destruct,
213 #ifdef OS_SAFETY_CRITICAL
214 if (p_err == (
OS_ERR *)0) {
215 OS_SAFETY_CRITICAL_EXCEPTION();
220 if (
id >= OS_TLS_NextAvailID) {
225 if (OS_TLS_DestructPtrTbl[
id] != (OS_TLS_DESTRUCT_PTR)0) {
231 OS_TLS_DestructPtrTbl[id] = p_destruct;
268 void OS_TLS_SetValue (OS_TCB *p_tcb,
277 #ifdef OS_SAFETY_CRITICAL
278 if (p_err == (
OS_ERR *)0) {
279 OS_SAFETY_CRITICAL_EXCEPTION();
284 #if OS_CFG_ARG_CHK_EN > 0u
285 if (
id >= OS_TLS_NextAvailID) {
292 if (p_tcb == (OS_TCB *)0) {
301 p_tcb->TLS_Tbl[id] = value;
340 void OS_TLS_Init (
OS_ERR *p_err)
346 OS_TLS_NextAvailID = 0u;
349 OS_TLS_DestructPtrTbl[i] = (OS_TLS_DESTRUCT_PTR)0;
372 void OS_TLS_TaskCreate (OS_TCB *p_tcb)
392 void OS_TLS_TaskDel (OS_TCB *p_tcb)
395 OS_TLS_DESTRUCT_PTR *p_tbl;
398 for (
id = 0;
id < OS_TLS_NextAvailID;
id++) {
399 p_tbl = &OS_TLS_DestructPtrTbl[id];
400 if (*p_tbl != (OS_TLS_DESTRUCT_PTR)0) {
401 (*p_tbl)(p_tcb, id, p_tcb->TLS_Tbl[id]);
424 void OS_TLS_TaskSw (
void)