?? tx_el.c
字號(hào):
/**************************************************************************/
/* */
/* Copyright (c) 1996-2000 by Express Logic Inc. */
/* */
/* This software is copyrighted by and is the sole property of Express */
/* Logic, Inc. All rights, title, ownership, or other interests */
/* in the software remain the property of Express Logic, Inc. This */
/* software may only be used in accordance with the corresponding */
/* license agreement. Any unauthorized use, duplication, transmission, */
/* distribution, or disclosure of this software is expressly forbidden. */
/* */
/* This Copyright notice may not be removed or modified without prior */
/* written consent of Express Logic, Inc. */
/* */
/* Express Logic, Inc. reserves the right to modify this software */
/* without notice. */
/* */
/* Express Logic, Inc. */
/* 11440 West Bernardo Court info@expresslogic.com */
/* Suite 366 http://www.expresslogic.com */
/* San Diego, CA 92127 */
/* */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** ThreadX Component */
/** */
/** ThreadX/GHS Event Log (EL) */
/** */
/**************************************************************************/
/**************************************************************************/
#define TX_SOURCE_CODE
#define TX_EL_SOURCE_CODE
/* Include necessary system files. */
#include "tx_api.h"
#include "tx_el.h"
#include "string.h"
/* Define global variables used to manage the event pool. */
UCHAR *_tx_el_tni_start;
UCHAR **_tx_el_current_event;
UCHAR *_tx_el_event_area_start;
UCHAR *_tx_el_event_area_end;
UINT _tx_el_maximum_events;
ULONG _tx_el_total_events;
UINT _tx_el_event_filter;
ULONG _tx_el_fake_time_stamp = 0;
extern char __ghsbegin_events[];
extern char __ghsend_events[];
extern TX_THREAD *_tx_thread_current_ptr;
UINT _tx_thread_interrupt_control(UINT new_posture);
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
/* */
/* _tx_el_initialize 68332/Green Hills */
/* 3.0a */
/* AUTHOR */
/* */
/* William E. Lamie, Express Logic, Inc. */
/* */
/* DESCRIPTION */
/* */
/* This function creates the Event Log (in the format dictated by the */
/* GHS Event Analyzer) and sets up various information for subsequent */
/* operation. The start and end of the Event Log is determined by the */
/* .eventlog section in the linker control file. */
/* */
/* INPUT */
/* */
/* None */
/* */
/* OUTPUT */
/* */
/* None */
/* */
/* CALLS */
/* */
/* None */
/* */
/* CALLED BY */
/* */
/* Application Code */
/* */
/* RELEASE HISTORY */
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 12-02-1999 William E. Lamie Initial Version 3.0a */
/* */
/**************************************************************************/
VOID _tx_el_initialize(VOID)
{
UCHAR *work_ptr;
UCHAR *read_ptr;
ULONG event_log_size;
UCHAR *end_ptr;
UINT i;
/* Clear total event counter. */
_tx_el_total_events = 0;
/* Clear event filter. */
_tx_el_event_filter = 0;
/* First, pickup the starting and ending address of the Event Log memory. */
work_ptr = (unsigned char *) __ghsbegin_events;
end_ptr = (unsigned char *) __ghsend_events;
/* Calculate the event log size. */
event_log_size = end_ptr - work_ptr;
/* Subtract off the number of bytes in the header and the TNI area. */
event_log_size = event_log_size - (TX_EL_HEADER_SIZE +
(TX_EL_TNI_ENTRY_SIZE * TX_EL_TNIS));
/* Make sure the event log is evenly divisible by the event size. */
event_log_size = (event_log_size/TX_EL_EVENT_SIZE) * TX_EL_EVENT_SIZE;
/* Build the Event Log header. */
/* Setup the Event Log Version ID and TNIS. */
*((unsigned short *) work_ptr) = (unsigned short) TX_EL_VERSION_ID;
work_ptr = work_ptr + sizeof(unsigned short);
*((unsigned short *) work_ptr) = (unsigned short) TX_EL_TNIS;
work_ptr = work_ptr + sizeof(unsigned short);
/* Setup the EVPS (event pool size) field. */
*((ULONG *) work_ptr) = event_log_size;
work_ptr = work_ptr + sizeof(ULONG);
/* Remember the maximum number of events. */
_tx_el_maximum_events = event_log_size/TX_EL_EVENT_SIZE;
/* Setup max_events field. */
*((ULONG *) work_ptr) = _tx_el_maximum_events;
work_ptr = work_ptr + sizeof(ULONG);
/* Setup the evploc (location of event pool). */
*((ULONG *) work_ptr) = (ULONG) (((ULONG) __ghsbegin_events) + TX_EL_HEADER_SIZE +
(TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE));
work_ptr = work_ptr + sizeof(ULONG);
/* Save the current event pointer. */
_tx_el_current_event = (UCHAR **) work_ptr;
/* Setup event_ptr (pointer to oldest event) field to the start
of the event pool. */
*_tx_el_current_event = (UCHAR *) (((ULONG) __ghsbegin_events) + TX_EL_HEADER_SIZE +
(TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE));
work_ptr = work_ptr + sizeof(ULONG);
/* Setup tbfreq (the number of ticks in a second) field. */
*((ULONG *) work_ptr) = TX_EL_TICKS_PER_SECOND;
work_ptr = work_ptr + sizeof(ULONG);
/* At this point we are pointing at the Thread Name Information (TNI) array. */
/* Remember the start of this for future updates. */
_tx_el_tni_start = work_ptr;
/* Clear the entire TNI array, this is the initial setting. */
end_ptr = work_ptr + (TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE);
memset((void *)work_ptr, 0, (TX_EL_TNIS * TX_EL_TNI_ENTRY_SIZE));
work_ptr = end_ptr;
/* At this point, we are pointing at the actual Event Entry area. */
/* Remember the start of the actual event log area. */
_tx_el_event_area_start = work_ptr;
/* Clear the entire Event area. */
end_ptr = work_ptr + event_log_size;
memset((void *)work_ptr, 0, event_log_size);
work_ptr = end_ptr;
/* Save the end pointer for later use. */
_tx_el_event_area_end = work_ptr;
/* Setup an entry to resolve all activites from initialization and from
an idle system. */
work_ptr = _tx_el_tni_start;
read_ptr = (UCHAR *) "Initialization/System Idle";
i = 0;
while ((i < TX_EL_TNI_NAME_SIZE) && (*read_ptr))
{
/* Copy a character of thread's name into TNI area of log. */
*work_ptr++ = *read_ptr++;
/* Increment the character count. */
i++;
}
/* Determine if a NULL needs to be inserted. */
if (i < TX_EL_TNI_NAME_SIZE)
{
/* Yes, insert a NULL into the event log string. */
*work_ptr = (unsigned char) 0;
}
/* Setup the thread ID to NULL. */
*((ULONG *) (_tx_el_tni_start + TX_EL_TNI_THREAD_ID_OFFSET)) = (ULONG) TX_NULL;
/* Set the valid field to indicate the entry is complete. */
*((UCHAR *) (_tx_el_tni_start + TX_EL_TNI_VALID_OFFSET)) = (ULONG) TX_EL_VALID_ENTRY;
/* At this point, we should be ready to insert thread names and track events!! */
}
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
/* */
/* _tx_el_thread_register 68332/Green Hills */
/* 3.0a */
/* AUTHOR */
/* */
/* William E. Lamie, Express Logic, Inc. */
/* */
/* DESCRIPTION */
/* */
/* This function registers a thread in the event log for future */
/* display purposes. */
/* */
/* INPUT */
/* */
/* thread_ptr Pointer to thread control block */
/* */
/* OUTPUT */
/* */
/* TX_SUCCESS Thread was placed in TNI area */
/* TX_ERROR No more room in the TNI area */
/* */
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -